xie32132 xie32132
关注数: 1 粉丝数: 110 发帖数: 725 关注贴吧数: 3
【求助】红外遥控 帮忙 弄了好几天, 实在弄不出了。也不知错哪了。 用串口看踩的数据很乱。可能是那个地方弄差了。 求指点。 void IR_Routine() interrupt 2 { uchar cNumber1,cNumber2,temp; uint value_high,value_low,lowtime,hightime; EX1 = 0; //关闭中断 TH0=TL0=0; TR0=1; while(!IR); TR0=0; value_low=TH0*256+TL0; TH0=TL0=0; TR0=1; while(IR); TR0=0; value_high=TH0*256+TL0; if((value_low>8800) && (value_low<9800) && (value_high>2600) && (value_high<3600)) { for (cNumber1=0;cNumber1<4;cNumber1++) //收集四组数据,前两组为地址码,仅 { //仅接着是两个命令码,这是NEC公司所定义的协议里规定的 for (cNumber2=0;cNumber2<8;cNumber2++)//每组数-据有8位 { temp=temp>>1; TH0=TL0=0; TR0=1; while(!IR); TR0=0; lowtime=TH0*256+TL0; TH0=TL0=0; TR0=1; while(IR); TR0=0; hightime=TH0*256+TL0; if( (lowtime<370) || (lowtime>640) ) { EX1=1; return; } if( (hightime>420) && (hightime<620) ) if((hightime>1300)&&(hightime<1800)) } cIRReceiveData[cNumber1]=temp; } } if(cIRReceiveData[2]!=~cIRReceiveData[3]) { EX1=1; return; } switch(cIRReceiveData[2]) {case 0x16: One_DigitalTube_display(0); break;case 0x0c: One_DigitalTube_display(1); break;case 0x18:One_DigitalTube_display(2); break;case 0x5e:One_DigitalTube_display(3); break;case 0x08:One_DigitalTube_display(4); break;case 0x1c:One_DigitalTube_display(5); break;case 0x5a:One_DigitalTube_display(6); break;case 0x42: One_DigitalTube_display(7); break;case 0x52: One_DigitalTube_display(8); break;case 0x4a: One_DigitalTube_display(9); break;} EX1 = 1; }
1 下一页