#include <reg52.h>
sbit jieshou=P3^2;
sbit q1=P0^0;
sbit q2=P0^1;
sbit q3=P0^2;
sbit q4=P0^3;
sbit ENA=P0^4;
sbit ENB=P0^5;
sbit w=P1^0;
unsigned char flagl,flagr;
unsigned char a[4];
unsigned int hightime,lowtime,t;
void delay(unsigned char i)//延时函数
{
unsigned char x,y;
for(x=i;x>0;x--)
for(y=110;y>0;y--);
}
int shibie()//单片机解码红外函数
{
unsigned char i,x,temp;
//w=0;
for(i=0;i<4;i++)
{
for(x=0;x<8;x++)
{
temp=temp>>1;
TH0=0;
TL0=0;
//w=0;
TR0=1;
//w=0;
while(jieshou==0)
TR0=0;
lowtime=TH0*256+TL0;//保存低电平时间
TH0=0;
TL0=0;
TR0=1;
while(jieshou==1);
TR0=0;
hightime=TH0*256+TL0;//保存高电平时间
if(lowtime<400||lowtime>700)
return 0;
if(hightime>450 && hightime<675)
temp=temp&0x7f;
if(hightime>1410 && hightime<1955)
temp=temp |0x80;
}
a[i]=temp;//解码出来的放在这里边
}
if(a[2]==~a[3])//验证码与反码是否相同
return 1;//验证正确返回一
}
void init()
{
flagl=20;
flagr=20;
TMOD=0X01;
TH0=0;
TL0=0;
IT0=1;
//TH1=1;
//TL1=1;
EA=1;
EX0=1;
IT0=1;
ET0=1;
//ET1=1;
TR0=1;
//低电平触发
//TR1=1;
}
void qianjin()
{ q1=1;
q2=0;
q3=1;
q4=0;
flagl=10;
flagr=10;
delay(50);
}
void left()
{
q1=0;
q2=0;
q3=1;
q4=0;
flagl=0;
flagr=20;
delay(50);
}
void right()
{
q1=1;
q2=0;
q3=0;
q4=0;
flagl=10;
flagr=0;
delay(50);
}
void houtui()
{
q1=0;
q2=1;
q3=0;
q4=1;
flagl=10;
flagr=10;
delay(100);
}
void int0() interrupt 0
{
EX0=0;//关闭未卜终端,只解码一次的数据
TH0=0;//定时器清零
TL0=0;
TR0=1;
// w=0;
while(jieshou==0)//给引导码的低电平计时
TR0=0;
lowtime=TH0*256+TL0;
TH0=0;
TL0=0;
TR0=1;
hightime=TH0*256+TL0;
//w=0;
if(lowtime>8500 && lowtime<9500 && hightime>4200 && hightime<4800)//?????
{
w=0;
if(shibie()==1)
{
//panduan();
if(a[2]==0x15)
{
qianjin();
delay(500);
}
else if(a[2]==0x40)
{
right();
delay(500);
}
else if(a[2]==0x44)
{
left();
delay(500);
}
else if(a[2]=0x07)
{
houtui();
delay(500);
}
}
}
EX0=1;
}
void enter0() interrupt 1 //PWM控制
{
TH0=0;
TL0=0;
if(t<flagl)
ENA=1;
else
ENA=0;
if(t<flagr)
ENB=1;
else
ENB=0;
t++;
if(t==100)
t=0;
}
/*void panduan()
{
if(a[2]==0x15)
{
qianjin();
delay(500);
}
else if(a[2]==0x40)
{
right();
delay(500);
}
else if(a[2]==0x44)
{
left();
delay(500);
}
else if(a[2]=0x07)
{
houtui();
delay(500);
}
}*/
void main()
{
ENA=1;
ENB=1;
q1=0;
q2=0;
q3=1;
q4=0;
init();
//while(1);
//{
// panduan();
//}
} |