红外遥控器的解码
实测距离10米时不会错误或需要重复按遥控器 (*^__^*) ……
接收头
(原文件名:接收头.jpg.jpg)
正确解码
(原文件名:20110103426.jpg)
第一行显示的是:地址码+地址码+操作码+操作码反码 接受数据正确时第二行显示OK 旁边的数字是连_发次数
错误解码
(原文件名:20110103427.jpg)
第一行显示的是:地址码+地址码+操作码+操作码反码 接受数据错误时第二行显示error 旁边的数字是连_发次数
51开发板配的万能遥控器
(原文件名:20110103428.jpg)
-----------------------------------------------------------------------
井底之蛙,你才见过几种遥控器,就敢说用中断是笨人?
遥控器用的最多的是电视,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++;
}
}
一周热门 更多>