红外遥控器的解码
实测距离10米时不会错误或需要重复按遥控器 (*^__^*) ……
接收头
(原文件名:接收头.jpg.jpg)
正确解码
(原文件名:20110103426.jpg)
第一行显示的是:地址码+地址码+操作码+操作码反码 接受数据正确时第二行显示OK 旁边的数字是连_发次数
错误解码
(原文件名:20110103427.jpg)
第一行显示的是:地址码+地址码+操作码+操作码反码 接受数据错误时第二行显示error 旁边的数字是连_发次数
51开发板配的万能遥控器
(原文件名:20110103428.jpg)
void Decode(void)
{
unsigned char bitcounter,timecounter=0x00;
EX0 = 0; //外部中断无效
for(bitcounter=12; bitcounter>0; bitcounter--)
{
{
if((IR_time[timecounter]>IR_L_timer_min)&(IR_time[timecounter]<IR_L_timer_max)) //数据"0" 0.6ms低电平+0.6ms高电平
{
IR_12bit>>=1;
IR_12bit&=0xf7ff; //16位int数的第12位置0
}
else if((IR_time[timecounter]>IR_H_timer_min)&(IR_time[timecounter]<IR_H_timer_max)) //数据"1" 1.2ms低电平+0.6ms高电平
{
IR_12bit>>=1;
IR_12bit|=0x800; //16位int数的第12位置1
}
timecounter++;
}
}
IR_Command=(char)IR_12bit&0x7f; //保留低7位
IR_12bit>>=7; //再右移7位 使address低位对齐
IR_Address=(char)IR_12bit&0x1f; //保留低5位
if(IR_Address==0x01) //地址码=1
{
IR_Newkey=1;
}
EX0 = 1; //重新开放外部中断
}
一周热门 更多>