大家看看我的小车程序!!!

2019-07-15 23:22发布

大家看看我的C程序!!
为什么小车在跑的时候,不会转弯,
????
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

unsigned char zkb1=0 ;    //**左边电机的占空比**//
unsigned char zkb2=0 ;    //**右边电机的占空比**//
unsigned char t=0;        //**定时器中断计数器**//

sbit RSEN1=P1^0;       // 右光对管1
sbit RSEN2=P1^1;       //右光对管2
sbit LSEN1=P1^2;        //左光对管1
sbit LSEN2=P1^3;        //左光对管2

sbit IN1=P2^0;
sbit IN2=P2^1;
sbit IN3=P2^2;
sbit IN4=P2^3;
sbit ENA=P2^4;
sbit ENB=P2^5;

//**********初始化定时器,中断***********//
void init()
{  TMOD=0x01;
   TH0=(65536-100)/256;
   TL0=(65536-100)%256;
   EA=1;
   ET0=1;
   TR0=1;
}

//***********中断函数+脉宽调制***********//
void timer0() interrupt 1
{ if(t<zkb1)
     ENA=1;
  else
     ENA=0;
  if(t<zkb2)
      ENB=1;
  else
      ENB=0;
        t++;
  if(t>=100)
    {t=0;}
}
//******************直行******************//
void qianjin()
{  zkb1=30;
   zkb2=30;
}
//***************左转函数1***************//
void turn_left1()
{  zkb1=0;
    zkb2=50;
}
//***************左转函数2***************//
void turn_left2()
{  zkb1=0;
    zkb2=60;
}
//***************右转函数1***************//
void turn_right1()
{  zkb1=50;
    zkb2=0;
}
//***************右转函数2***************//
void turn_right2()
{  zkb1=60;
    zkb2=0;
}

//***************循迹函数*****************//
void xunji()
{ uchar flag;
  if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==1))
    { flag=0; }//*******直行*******//
   else  if((RSEN1==0)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==1))
    { flag=1;} //***右转1***//
   else  if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==1))
    { flag=2;} //***右转2***//
   else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==1))
    { flag=3; }//***左转1***//
   else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==0))
    { flag=4; }//***左转2***//
switch (flag)
     {  case 0:qianjin();
              break;
        case 1:turn_right1();
              break;
        case 2:turn_right2();
              break;
        case 3:turn_left1();
              break;
        case 4:turn_left2();
              break;           
        default: break;
      }
}
//****************主程序****************//
void main()
{ init();
  zkb1=30;
  zkb2=30;
           IN1=1; //******给电机加电启动******//
     IN2=0;
     IN3=1;
     IN4=0;
     ENA=1;
     ENB=1;       
        while(1)
     {  
         xunji(); //*********寻迹**********//
     }
}

求助啊~~~~

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
学单片机的人
1楼-- · 2019-07-16 23:15
冰葑世纪 发表于 2013-7-31 20:34
改善下控制算法吧,多调试

好的~
学单片机的人
2楼-- · 2019-07-17 00:48
Aidaohuakai 发表于 2013-7-31 19:53
转弯的时候你没定时啊,,假如转弯的时候执行转弯1ms,你根本看不出来,并且在1ms内可能只专1度的弯 ...

  我用的是定时中断啊
Aidaohuakai
3楼-- · 2019-07-17 06:05
学单片机的人 发表于 2013-7-31 20:36
我用的是定时中断啊

晕,假如检测到黑线是1ms,在这1ms你那个定时有用,只要检测不到黑线,你那定时就会改变。
Aidaohuakai
4楼-- · 2019-07-17 07:57
Aidaohuakai 发表于 2013-7-31 22:22
晕,假如检测到黑线是1ms,在这1ms你那个定时有用,只要检测不到黑线,你那定时就会改变。 ...

我说的是你那个定时是用于pwm输出。
必须要有一个定时是独立于pwm之外的。
手执福音书
5楼-- · 2019-07-17 10:05
pwm与timer 不一致哈
防线
6楼-- · 2019-07-17 14:50
好像有点问题

一周热门 更多>