有关循迹小车程序

2019-07-16 03:26发布

我做了个循迹小车,但是速度太快,改掉PWM数值后,小车的停顿的时间就变长了,是不是要改下定时器的数值?该怎么改?而且我的循迹小车不够灵敏,程序也容易跑飞....怎么办
times New Roman">#include<reg51.h>#define uchar unsigned char#define uint unsigned intunsigned char zkb1=0 ;    //**左边电机的占空比**//unsigned char zkb2=0 ;    //**右边电机的占空比**//unsigned char t=0;        //**定时器中断计数器**//sbit RSEN1=P1^0;       // 右光对管1sbit RSEN2=P1^1;       //右光对管2sbit LSEN1=P1^2;        //左光对管1sbit LSEN2=P1^3;        //左光对管2sbit IN1=P0^0;sbit IN2=P0^1;sbit IN3=P0^2;sbit IN4=P0^3;sbit ENA=P0^4;sbit ENB=P0^5;//****************延时函数****************//void delay(int z)   {   while (z--);  }//**********初始化定时器,中断***********//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,右转1***//   else  if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==1))    { flag=2;} //***左偏2,右转2***//   else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==1))    { flag=3; }//***右偏1,左转1***//  else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==0))    { flag=4; }//***右偏2,左转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;  while(1)  {  IN1=1; //******给电机加电启动******//     IN2=0;     IN3=1;     IN4=0;     ENA=1;     ENB=1;    while(1)     {  xunji(); //*********寻迹**********//     }    }}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。