#include<reg52.h>
#include "MacroandConst.h"
#include "L298_2.h"
#include "main.h"
sbit IR=P3^2;
uchar flag;
uchar IRcom[6];
uint LowTime,HighTime;
/*函數(shù)功能:對(duì)4個(gè)字節(jié)的用戶碼和鍵數(shù)據(jù)碼進(jìn)行解碼
說明:解碼正確,返回1,否則返回0
出口參數(shù):dat*/
bit DeCode(void)
{
uchar i,j;
uchar temp;
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
temp=temp>>1;
TH0=0;
TL0=0;
TR0=1;
while(IR==0);
TR0=0;
LowTime=TH0*256+TL0;
TH0=0;
TL0=0;
TR0=1;
while(IR==1);
TR0=0;
HighTime=TH0*256+TL0;
if((LowTime<390)||(LowTime>680))
return 0;
if((HighTime>450)&&(HighTime<670))
temp=temp&0x7f;
if((HighTime>1400)&&(HighTime<1890))
temp=temp|0x80;
}
IRcom[i]=temp;
}
if(IRcom[2]=~IRcom[3])
{ IRcom[5]=IRcom[2]&0x0f;
IRcom[4]=IRcom[2]>>4;
if(IRcom[4]>9) {IRcom[4]=IRcom[4]+0x37;}
else {IRcom[4]=IRcom[4]+0x30;}
if(IRcom[5]>9) {IRcom[5]=IRcom[5]+0x37;}
else {IRcom[5]=IRcom[5]+0x30;}
}
return 1;
}
/***********************************************/
//紅外感應(yīng)處理程序,用的鍵盤值是本人用于做LED燈
//調(diào)控的遙控器中的7個(gè)按鍵,具體看遙控器。
/***********************************************/
void Function(void)
{
TR1 = 1;
switch(IRcom[2])
{
case 0x5a: Go();break; //向上,對(duì)應(yīng)小車的前進(jìn)
case 0x1c: Stop();break; //中間,對(duì)應(yīng)小車的停止
case 0x18: Right_Run();break; //向下,對(duì)應(yīng)小車的后退
case 0x52: Left_Run();break; //向左,對(duì)應(yīng)小車的左轉(zhuǎn)
case 0x08: Back();break; //向左,對(duì)應(yīng)小車的右轉(zhuǎn)
case 0x42: Dangwei += 1;
if(Dangwei>10) Dangwei=10;break;
case 0x4a: Dangwei -= 1;
if(Dangwei<=1) Dangwei=1;break;
}
}
/*函數(shù)功能:紅外線觸發(fā)的外中斷處理函數(shù)*/
void Int0(void) interrupt 0 using 0
{
EX0=0;
TH0=0;
TL0=0;
TR0=1;
while(IR==0);
TR0=0;
LowTime=TH0*256+TL0;
TH0=0;
TL0=0;
TR0=1;
while(IR==1);
TR0=0;
HighTime=TH0*256+TL0;
if((LowTime>8400)&&(LowTime<9600)&&(HighTime>3900)&&(HighTime<5100))
{
if(DeCode()==1)
{
Function();
}
}
EX0=1;
}
|