红外遥控器的解码

2020-01-22 12:01发布

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


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


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


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


51开发板配的万能遥控器 (原文件名:20110103428.jpg)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
98条回答
tzsteel
2020-02-01 22:57
回复【61楼】ye955
-----------------------------------------------------------------------

井底之蛙,你才见过几种遥控器,就敢说用中断是笨人?
遥控器用的最多的是电视,DVD,空调等,人家用的单片机会缺中断口?如果都用你的方法,就别干别的事了。
另外告诉你,人家90%都不是51单片机。

有用查询方式,但都是用在极简系统,就象你举的例子,风扇、电暖气之类的,那是不得已而为之。你们不用,只能说明你们做的产品档次太低。
-----------------------------------
回复 97 楼
你把解码子程序 Decode里移位顺序反过来
程序没细看,你试试下面程序
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>>=1;
                IR_12bit&=0xfffe;    //逆序 //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>>=1;
                IR_12bit|=0x001; //逆序 //IR_12bit|=0x800;  //16位int数的第12位置1
            }
            timecounter++;
        }
    }

一周热门 更多>