
#define uchar unsigned char
#define uint unsigned int
uint zkb1=0 ; //**右边电机的占空比**//
uint zkb2=0 ; //**左边电机的占空比**//
uint t=0; //**定时器中断计数器**//
sbit rin1=P1^0;
sbit rin2=P1^1;
sbit lin1=P1^2;
sbit lin2=P1^3;
sbit lift2=P2^2;
sbit lift1=P2^3;
sbit mid=P2^4;
sbit right1=P2^5;
sbit right2=P2^6;
sbit pwm1=P2^0;
sbit pwm2=P2^1;
//****************延时函数****************//
void delay(uint x)
{
uchar j;
while (x--)
{
for(j=0;j<123;j++);
}
}
//**********初始化定时器,中断***********//
void init()
{ TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
EA=1;
ET0=1;
TR0=1;
}
//***********中断函数+脉宽调制***********//
void timer0() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
++t;
if(t<=zkb1)
{
pwm1=1;
}
if(t>zkb1)
{
pwm1=0;
}
if(t<=zkb2)
{
pwm2=1;
}
if(t>zkb2)
{
pwm2=0;
}
if(t==1000)
{t=0;}
}
// zkb2=左, zkb1=左
//******************直行******************//
void qianjin()
{
// zkb2=200; zkb1=170;
zkb2=1000; zkb1=920;
lin1=1; //******给电机加电启动******//
lin2=0;
rin1=1;
rin2=0;
}
//***************左转1函数***************//
void turn_right1()
{
// zkb2=200; zkb1=0;
zkb2=950; zkb1=100;rin1=0;rin2=1;
}
//***************左转2函数***************//
void turn_right2()
{
// zkb2=300; zkb1=0;
zkb2=1000; zkb1=110;rin1=0;rin2=1;
}
//***************右转1函数***************//
void turn_lift1()
{
// zkb2=0; zkb1=200;
zkb2=100; zkb1=950; lin1=0;lin2=1;
}
//***************右转2函数***************//
void turn_lift2()
{
// zkb2=0; zkb1=300;
zkb2=110; zkb1=1000; lin1=0;lin2=1;
}
//***************循迹函数*****************//
void xunji()
{
uchar flag;
if((lift2==1)&&(lift1==1)&&(mid==0)&&(right1==1)&&(right2==1))
{ flag=0; }//*******直行*******//
else if((lift1==0)&&(mid==0)&&(right1==0))
{ flag=0; } //******直行*******//
//else if((lift2==1)&&(lift1==1)&&(mid==1)&&(right1==1)&&(right2==1))
// { flag=0; } //*******直行*******//
else if((lift2==1)&&(lift1==0)&&(mid==1)&&(right1==1)&&(right2==1))
{ flag=1; } //*******左转1*******//
else if((lift2==0)&&(lift1==1)&&(mid==1)&&(right1==1)&&(right2==1))
{ flag=2; }//***左转2***//
else if((lift2==1)&&(lift1==1)&&(mid==1)&&(right1==0)&&(right2==1))
{ flag=3; }//***右转1***//
else if((lift2==1)&&(lift1==1)&&(mid==1)&&(right1==1)&&(right2==0))
{ flag=4; }//***右转2***//
switch (flag)
{
case 0:qianjin();
break;
case 1:turn_lift1();
break;
case 2:turn_lift2();
break;
case 3:turn_right1();
break;
case 4:turn_right2();
break;
default: break;
}
}
//****************主程序****************//
void main()
{
init();
while(1)
{ lin1=1; //******给电机加电启动******//
lin2=0;
rin1=1;
rin2=0;
// pwm1=1;
// pwm2=1;
while(1)
{
xunji(); //*********寻迹**********//
// zkb1=0;
// zkb2=500;
// qianjin();
// turn_lift1();
// turn_lift2();
// turn_right1();
// turn_right2();
}
}
}
