#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit t1 = P3^0;
sbit t2 = P3^1;
sbit a1 = P1^0;
sbit a2 = P1^1;
sbit a3 = P1^2;
sbit a4 = P1^3;
sbit a10 = P2^0; // 避 障
sbit a11 = P2^1;
sbit a12 = P2^2;
sbit a13 = P2^3; // 寻 光
sbit a14 = P2^4;
sbit a15 = P2^5;
sbit M= P3^6; // 寻 黑 线
sbit L= P3^7;
sbit R= P3^5;
uint SpeedA=40;
uint SpeedB=40;
uint m0=0;
uint m1=0;
void FX(uint f){
switch(f)
{
case 0: a1 = 0;a2 = 0;a3 = 0;a4 = 0; break; //停 车
case 1: a1 = 1;a2 = 0;a3 = 1;a4 = 0; break; //前 进
case 2: a1 = 0;a2 = 1;a3 = 0;a4 = 1; break; //倒 退
case 3: a1 = 0;a2 = 1;a3 = 1;a4 = 0; break; //右 转
case 4: a1 = 1;a2 = 0;a3 = 0;a4 = 1; break; //左 转
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
void main(void)
{
delay(1000);
delay(1000);
TH0 = 0x86;
TL0 = 0xE8;
TH1 = 0x86;
TL1 = 0xE8;
TMOD = 0x11;
TR0 = 1;
TR1 = 1;
ET0 = 1;
ET1 = 1;
EA = 1;
FX(0);
while(1)
{
if( M==0) //寻黑线
{
FX(1);
}
else if(L==0)
{
FX(4);
}
else if(R==0)
{
FX(3);
}
if(a11==0) //避 障
{
delay(200);
if(a11==0)
{
delay(200);
FX(0);
if(a11==0 && a10==1 && a12==1)
{
FX(0);
delay(1000);
FX(2);
delay(400);
FX(0);
delay(1000);
FX(3);
delay(800);
}
}
}
if( a11==0&&a12==0 )
{
delay(200);
if( a11==0&&a12==0 )
{
FX(0);
delay(1000);
FX(2) ;
delay(400);
FX(0) ;
delay(1000);
FX(3);
delay(800);
}
}
if( a10==0 && a11==0 )
{
delay(200);
if( a10==0 && a11==0 )
{
FX(0);
delay(1000);
FX(2) ;
delay(400);
FX(0) ;
delay(1000);
FX(4);
delay(800);
}
}
if(a14==0 && a13==1&& a15==1) //寻 光
{
FX(1);
}
else if(a13==0)
{
FX(3);
if(a14==0)
{
FX(1);
}
}
else if(a15==0)
{
FX(4);
if(a14==0)
{
FX(1);
}
}
else
{
FX(1);
}
}
}
void time0_int() interrupt 1 using 1
{
TR0=0;
TH0=0x86;
TL0=0xE8;
m1=m1 + 1;
if(m1< SpeedA)
{
t1 = 1;
}
else
t1 = 0;
if(m1== 40)
{
m1=0;
}
TR0 = 1;
}
void time1_int() interrupt 3 using 1
{
TR1=0;
TH1=0x86;
TL1=0xE8;
m0=m0 + 1;
if(m0 < SpeedB)
{
t2=1;
}
else t2 = 0;
if(m0 == 40)
{
m0=0;
}
TR1 = 1;
}
void int0() interrupt 0 using 1
{
ET0 = 1;
}