#ifndef _HW_H_ #define _HW_H_ /********************************************************** 设置 **********************************************************/ uchar IRCOM[]={0x00,0x00,0x00,0x00,0x10,0x10}; /*************************************************************** 外部中断0响应函数,完成对红外遥控的解码 -------------------------协议-------------------------- ----开始拉低9ms,接着是一个4.5ms的高脉冲,通知器件开始传送数据了 ----接着是26位前导脉冲,用于识别该型号的摇控。 ----然后是发送8位数据的原码,接着又发送8位数据的反码. ----最后是一个长脉冲,和开始位一样,拉低9ms和一个4.5ms脉冲表示结束。 ----每个按键不同这处只在于那8位数据的原码和反码,因些只须要识别 ----8位原码就可以识别按键了 ****************************************************************/ void delayA(uchar x) //x*0.14MS { uchar i; while(x--) { for (i = 0; i<13; i++) {} } } void IR_IN() interrupt 0 using 0 { uchar j,k,N=0; EX0 = 0; delayA(15); if (IRIN==1) { EX0 =1; return; } //确认IR信号出现 while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。 {delayA(1);} for (j=0;j<4;j++) //收集四组数据 { for (k=0;k<8;k++) //每组数据有8位 { while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。 {delayA(1);}// while (!IRIN) //等 IR 变为高电平 {delayA(1);} // while (IRIN) //计算IR高电平时长 { delayA(1); N++; if (N>=30) { EX0=1; return;} //0.14ms计数过长自动离开。 } //高电平计数完毕 IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0” if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1” N=0; }//end for k }//end for j if (IRCOM[2]!=~IRCOM[3]) //接收时间是否正确 { EX0=0; return; } /*================红外编码处理====================*/ switch(IRCOM[2]) { case 0x0C: key_0=1; break; //1 case 0x18: key_1=1; break; //2 case 0x5E: key_2=1; break; //3 case 0x08: key_3=1; break; //4 case 0x1C: key_4=1; break; //5 case 0x5A: key_5=1; break; //6 case 0x42: key_6=1; break; //7 case 0x52: key_7=1; break; //8 case 0x4A: key_8=1; break; //9 case 0x16: key_9=1; break; //0 case 0x40: key_minish=1; break; //音量- case 0x43: key_add=1; break; //音量+ case 0x46: key_manue=1; break; //播放 case 0x45: key_ok=1; break; //OFF case 0x15: key_up=1; break; //上 case 0x09: key_down=1; break; //下 case 0x19: key_alarm=1; break; //RPT case 0x47: key_voioff=1; break; //静音 case 0x0D: key_voion=1; break; //U/SD default: break; //别的键按下 } EX0 = 1; //开中断 } #endif 你把编码数据改一下看行不行! |
#ifndef _HW_H_ #define _HW_H_ /********************************************************** 设置 **********************************************************/ uchar IRCOM[]={0x00,0x00,0x00,0x00,0x10,0x10}; /*************************************************************** 外部中断0响应函数,完成对红外遥控的解码 -------------------------协议-------------------------- ----开始拉低9ms,接着是一个4.5ms的高脉冲,通知器件开始传送数据了 ----接着是26位前导脉冲,用于识别该型号的摇控。 ----然后是发送8位数据的原码,接着又发送8位数据的反码. ----最后是一个长脉冲,和开始位一样,拉低9ms和一个4.5ms脉冲表示结束。 ----每个按键不同这处只在于那8位数据的原码和反码,因些只须要识别 ----8位原码就可以识别按键了 ****************************************************************/ void delayA(uchar x) //x*0.14MS { uchar i; while(x--) { for (i = 0; i<13; i++) {} } } void IR_IN() interrupt 0 using 0 { uchar j,k,N=0; EX0 = 0; delayA(15); if (IRIN==1) { EX0 =1; return; } //确认IR信号出现 while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。 {delayA(1);} for (j=0;j<4;j++) //收集四组数据 { for (k=0;k<8;k++) //每组数据有8位 { while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。 {delayA(1);}// while (!IRIN) //等 IR 变为高电平 {delayA(1);} // while (IRIN) //计算IR高电平时长 { delayA(1); N++; if (N>=30) { EX0=1; return;} //0.14ms计数过长自动离开。 } //高电平计数完毕 IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0” if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1” N=0; }//end for k }//end for j if (IRCOM[2]!=~IRCOM[3]) //接收时间是否正确 { EX0=0; return; } /*================红外编码处理====================*/ switch(IRCOM[2]) { case 0x0C: key_0=1; break; //1 case 0x18: key_1=1; break; //2 case 0x5E: key_2=1; break; //3 case 0x08: key_3=1; break; //4 case 0x1C: key_4=1; break; //5 case 0x5A: key_5=1; break; //6 case 0x42: key_6=1; break; //7 case 0x52: key_7=1; break; //8 case 0x4A: key_8=1; break; //9 case 0x16: key_9=1; break; //0 case 0x40: key_minish=1; break; //音量- case 0x43: key_add=1; break; //音量+ case 0x46: key_manue=1; break; //播放 case 0x45: key_ok=1; break; //OFF case 0x15: key_up=1; break; //上 case 0x09: key_down=1; break; //下 case 0x19: key_alarm=1; break; //RPT case 0x47: key_voioff=1; break; //静音 case 0x0D: key_voion=1; break; //U/SD default: break; //别的键按下 } EX0 = 1; //开中断 } #endif 你把编码数据改一下看行不行! |
太强了,太强了,太强了,太强了, |
遥控不能用。应该是编码格式或者是按键编码值的问题。建议楼主,多用几个遥控器测试一下。 |