#include <reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit LED1 = P2^2;
sbit LED2 = P2^3;
sbit LED3 = P2^4;
sbit LED4 = P2^5;
sbit LED5 = P2^6;
sbit LED6 = P2^7;
sbit ENA=P1^0;
sbit ENB=P1^1;
sbit IN1=P1^2;
sbit IN2=P1^3;
sbit IN3=P1^5;
sbit IN4=P1^4;
uint8 t = 0;
uint8 PWM_T1 = 0;
uint8 PWM_T2 = 0;
uint16 a=0; b=0; c=0;
void delay_1ms(uint16 l)
{
uint16 x,y;
for(x=l;x>0;x--)
for(y=120;y>0;y--);
}
void forward()
{
TR0=1;
IN1=1;
IN2=0;
IN3=1;
IN4=0;
PWM_T1=100;
PWM_T2=100;
}
void left()
{
TR0=1;
IN1=0;
IN2=1;
IN3=1;
IN4=0;
PWM_T1=250;
PWM_T2=250;
}
void right()
{
TR0=1;
IN1=1;
IN2=0;
IN3=0;
IN4=1;
PWM_T1=250;
PWM_T2=250;
}
void stop()
{
TR0=1;
ENA=0;
ENB=0;
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
void main(void)
{
stop();
TMOD = 0x02;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
PWM_T1=100;
PWM_T2=100;
delay_1ms(1000);
while(1)
{
if(LED1==1&&LED6==0&&LED2==1&&LED5==0&&LED3==1&&LED4==0) //左转
{
a++;
if(a==2||a==4)
{
forward();
delay_1ms(100);
}
else if(a==5)
{
left();
delay_1ms(490);
}
else
{
left();
delay_1ms(210);
}
}
if(LED1==0&&LED6==1&&LED2==0&&LED5==1&&LED3==0&&LED4==1) //右转
{
b++;
if(b==2||b==4||b==6)
{
forward();
delay_1ms(100);
}
else if(b==7)
{
stop();
delay_1ms(20000000);
}
else
{
right();
delay_1ms(210);
}
}
if(LED1==1&&LED6==1&&LED2==1&&LED5==1&&LED3==1&&LED4==1) //后转
{
c++;
if(c==1)
{
forward();
delay_1ms(100);
}
else if(c==2)
{
left();
delay_1ms(210);
}
else
{
left();
delay_1ms(450);
}
}
if(LED1==0&&LED6==0) //Ö±ÐÐ
{
if(LED3==1&&LED4==0&&LED2==0&&LED5==0&&LED1==0&&LED6==0)
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
PWM_T1=100;
PWM_T2=100;
delay_1ms(10);
}
if(LED3==0&&LED4==1&&LED2==0&&LED5==0&&LED1==0&&LED6==0)
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
PWM_T1=100;
PWM_T2=100;
delay_1ms(10);
}
if(LED2==1&&LED5==0&&LED3==0&&LED4==0&&LED1==0&&LED6==0)
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
PWM_T1=100;
PWM_T2=100;
delay_1ms(10);
}
if(LED2==0&&LED5==1&&LED3==0&&LED4==0&&LED1==0&&LED6==0)
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
PWM_T1=100;
PWM_T2=100;
delay_1ms(10);
}
if(LED3==0&&LED4==0&&LED2==0&&LED5==0&&LED1==0&&LED6==0)
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
PWM_T1=110;
PWM_T2=110;
}
}
}
}
timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t==250)
{
t=0;
}
if(PWM_T1<=t)
{
ENA=0;
}
else
{
ENA=1;
}
if(PWM_T2<=t)
{
ENB=0;
}
else
{
ENB=1;
}
}
````