volatile UINT8 Counter;
static UINT8 DatMax;
void IrProcess(void)
{
UINT8 i;
UINT8 j;
UINT8 tmpDat;
UINT8 resCheck;
bool TimeOutFlag;
if(RecvFlag == TRUE)
return;
if(!Irda)
{
Counter = 0;
TH1 = 6;
TL1 = 6;
TR1 = 1;
while(!Irda);
TR1 = 0;
//判断是否收到头
if(Counter < 4)
return;
Counter = 0;
TH1 = 6;
TL1 = 6;
TR1 = 1;
TimeOutFlag = false;
while(Irda)
{
//是否超时
if(Counter >= 40)
{
TR1 = 0;
return;
}
}
//接收数据
i = 0;
while(1)
{
for(j=0;j<8;j++)
{
TR1 = 0;
TH1 = 131;
TL1 = 131;
Counter = 0;
while(!Irda);
Counter = 0;
TR1 = 1;
while(Irda)
{
if(Counter > 6)
{
TimeOutFlag = true;
break;
}
}
if(TimeOutFlag == true)
break;
if(Counter >= 3)
tmpDat = (tmpDat << 1) | 1;
else
tmpDat = tmpDat << 1;
}
if(TimeOutFlag == true)
break;
IrBuff[i++] = tmpDat;
}
DatMax = i;
resCheck = IrBuff[DatMax - 1] | IrBuff[DatMax - 2];
if((resCheck == 0xff) && (IrBuff[2] != 0xff))
{
RecvFlag = TRUE;
LedR = 0;
RecvTick = Tick10;
RecvLen = DatMax;
}
}
}
void Timer1Isr(void) interrupt 3
{
Counter++;
}
本程序基于8051内核单片机的MCU。可用于电视机遥控器的解码。
以下是STC12C54XX单片机的一个6路遥控电路,可适配大多电视遥控器。