89C52驱动两个步进电机的问题

2019-07-16 01:25发布

思路   两个步进电机模拟两个轮子   使二驱车能够实现加速 减速 转向       既做到匀速加速减速左右转  其中非转向时两点机同步转动
设备和连接  89C82   其中电阻除了单片机供电是10K之外全是220  电容30PF      按键分别有加减速  倒车  左右转  寻迹模式和壁障模式     7个
    QQ截图20130414144449.jpg
QQ截图20130414144457.jpg
程序   
#include<AT89X52.h>
#define step_moto_port1 P0
#define step_moto_port2 P3
#define JIASU_KEY (!(P2_0))
#define JIANSU_KEY (!(P2_1))
#define ZZ_KEY (!(P2_2))
#define YZ_KEY (!(P2_3))
#define XJ_KEY (!(P2_4))
#define BZ_KEY (!(P2_5))
#define DC_KEY (!(P2_6))
sbit LED1 = P1^0;
sbit LED2 = P1^1;
unsigned int speed=1000;
unsigned int speed_change=1000;
unsigned char dir=1;                  //倒车控制,1为前进,0为倒车
unsigned char zhuan=0;          //转向控制,0为直线,1为左转,2为右转
unsigned char ji=0;          //模拟接收寻迹传感器读数,0为关闭,1为开启寻迹
unsigned char bi=0;          //避障模式,0为无障碍,1为需要避障
unsigned char s;
void Delay()
{
unsigned char t,y;
  for (t=0;t<245;t++)
    for (y=0;y<240;y++);       
}
void run()
{
speed=speed_change;
while(speed--)
if(zhuan==0)
{
  if(dir==1)
  {
   if(step_moto_port1 >=0x80)
    step_moto_port1=0x01;
    else         
    step_moto_port1 <<= 1;
   if(step_moto_port2 >=0x80)
    step_moto_port2=0x01;
    else         
    step_moto_port2 <<= 1;
  }
if(dir==0)
  {
   LED1 = ~LED1;
   LED2 = ~LED2;
   if(step_moto_port1 <=0x01)
    step_moto_port1=0x08;
    else
    step_moto_port1 >>= 1;
   if(step_moto_port2 <=0x01)
    step_moto_port2=0x08;
    else
    step_moto_port2 >>= 1;
  }
}
if(zhuan==1)
{
  LED1 = ~LED1;
  step_moto_port1=0x00;
  if(step_moto_port2 >=0x80)
   step_moto_port2=0x01;
  else         
   step_moto_port2 <<= 1;
}
if(zhuan==2)
{
  LED2 = ~LED2;
  step_moto_port2=0x00;
  if(step_moto_port1 >=0x80)
   step_moto_port1=0x01;
  else         
   step_moto_port1 <<= 1;
}
if(bi==1)
  {
  LED1 = ~LED1;
  LED2 = ~LED2;
  if(step_moto_port1 <=0x01)
    step_moto_port1=0x08;
    else
    step_moto_port1 >>= 1;
  if(step_moto_port2 <=0x01)
    step_moto_port2=0x08;
    else
    step_moto_port2 >>= 1;
  Delay();
  Delay();
  Delay();
  LED1 = ~LED1;
  step_moto_port1=0x00;
  if(step_moto_port2 >=0x80)
   step_moto_port2=0x01;
  else         
   step_moto_port2 <<= 1;
  bi=0;
  }
}
void main(void)
{
step_moto_port1=0x01;
step_moto_port2=0x01;
while(1)
{
  if(DC_KEY)
  {
  if(ji==0)  
  dir = 0;
  while(DC_KEY)  run();
  dir = 1;
  }
  if(JIANSU_KEY)
  {
  if(speed_change >= 2000)
  speed_change = speed_change - 1000;
  while(JIANSU_KEY) run();
  }
  if(JIASU_KEY)
  {
  if(speed_change < 20000)
  speed_change = speed_change + 1000;
  while(JIASU_KEY) run();
  }
  if(ZZ_KEY)
  {
  if(ji==0)
   zhuan=1;
   dir=3;
   while(ZZ_KEY) run();
   zhuan=0;
   dir=1;
  }
  if(YZ_KEY)
  {
  if(ji==0)
   zhuan=2;
   dir=3;
   while(YZ_KEY) run();
   zhuan=0;
   dir=1;
  }
  if(BZ_KEY)
  {
  if(ji==0)
   dir=3;
   bi=1;
   while(BZ_KEY) run();
   bi=0;
   dir=1;
  }
  if(XJ_KEY)
  {
  ji=1;
  dir=3;
  {
  if(ZZ_KEY)
   zhuan=1;
   while(ZZ_KEY) run();
   zhuan=0;
  }
  {
  if(YZ_KEY)
   zhuan=2;
   while(YZ_KEY) run();
   zhuan=0;
  }
  while(XJ_KEY) run();
  dir=0;
  ji=0;
  }
run();
}
}





问题
程序无法实现控制```````````按任何键都是减速到近乎停止     而且电机要按倒车按键启动   求助大神````````````












友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。