红外遥控器的解码

2020-01-22 12:01发布

红外遥控器的解码
实测距离10米时不会错误或需要重复按遥控器 (*^__^*) ……


接收头 (原文件名:接收头.jpg.jpg)


正确解码 (原文件名:20110103426.jpg)
第一行显示的是:地址码+地址码+操作码+操作码反码  接受数据正确时第二行显示OK  旁边的数字是连_发次数


错误解码 (原文件名:20110103427.jpg)
第一行显示的是:地址码+地址码+操作码+操作码反码  接受数据错误时第二行显示error  旁边的数字是连_发次数


51开发板配的万能遥控器 (原文件名:20110103428.jpg)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
98条回答
beijisnow
2020-01-25 07:36
发现bug  改了一下

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;              //重新开放外部中断
}

一周热门 更多>