#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint time,left, right,pwm0,pwm1,pwm2,pwm3;
sbit IN1 = P1^0;
sbit IN2 = P1^1;
sbit IN3 = P1^2;
sbit IN4 = P1^3;
sbit infrared1=P0^5;
sbit infrared2=P0^3;
sbit infrared3=P0^1;
void speed(int left,int rihgt)//该函数的作用是给pwm0,pwm1,pwm2,pwm3赋值
{
if(left>=0)
{
pwm0=left;
pwm1=0;
}
else
{
pwm0=0;
pwm1=0-left;
}
if(rihgt>=0)
{
pwm2=left;
pwm3=0;
}
else
{
pwm2=0;
pwm3=0-left;
}
}
void main()
{
TMOD =0x01;
TH0=(65536-10)/256;
TL0=(65536-10)%256;
EA=1;
TR0=1;
ET0=1;
speed(0,0);
while(1)
{
if(infrared1==0&&infrared2==1&&infrared3==0||infrared1==1&&infrared2==1&&infrared3==0||infrared1==0&&infrared2==1&&infrared3==1)
/*传感器1低电平(白)传感器2高电平(黑)传感器3低电平(白)*/
/*传感器1高电平(黑)传感器2高电平(黑)传感器3低电平(白)*/
/*传感器1低电平(白)传感器2高电平(黑)传感器3高电平(黑)*/
{
speed(30,30);//A逆时针 B逆时针
}
if(infrared1==1&&infrared2==0&&infrared3==0)
/*传感器1高电平(黑)传感器2低电平(白)传感器3低电平(白)*/
{
speed(26,-26); //A逆时针 B顺时针
}
if(infrared1==0&&infrared2==0&&infrared3==1)
/*传感器1低电平(白)传感器2低电平(白)传感器3高电平(黑)*/
{
speed(-26,26);//A顺时针 B逆时针
}
}
}
void time_0(void) interrupt 1
{
TH0=(65536-10)/256;
TL0=(65536-10)%256;
time++;
if(time<=150)
{
if(time<=pwm0)
IN1=0;
else
IN1=1;
if(time<=pwm1)
IN2=0;
else
IN2=1;
if(time<=pwm2)
IN3=0;
else
IN3=1;
if(time<=pwm3)
IN4=0;
else
IN4=1;
}
else
time=0;
}