红外数据传输 2009-8-11 //延续1.66MS大于0.8MS后我们可以再判断遥控接收脚的电平, if(prem)//如果这时高电平仍然在继续那么接收到的数据是1的编码 { ram[ramc]=(ram[ramc]<<1)+1;//将目前接收到的数据位1放到对应的字节中 delaytime(11);//如果本次接受到的数据是1,那么要继续延迟1MS,这样才能跨入 //下个位编码的低电平中(即是开始的0.56MS中) } else//否则目前接收到的是数据0的编码 ram[ramc]=ram[ramc]<<1;//将目前接收到的数据位0放到对应的字节中 }//本次接收结束,进行下次位接收,此接收动作进行32次,正好完成4个字节的接收 }
if(ram[2]!=(~(ram[3]&0x7f)))//本次接收码的判断 { for(i=0;i<4;i++)//没有此对应关系则表明接收失败,清除接受到的数据 ram[i]=0; return; }
dis_num=ram[2];//将接收到的按键数据赋给显示变量 }
main() { IT0=1;//设定INT0为边沿触发 EX0=1;//打开外部中断0 EA=1;//全局中断开关打开 while(1) { switch(dis_num) { case0x81:num=0;break; case0xcf:num=1;break; case0x92:num=2;break; case0x86:num=3;break; case0xcc:num=4;break; case0xa4:num=5;break; case0xa0:num=6;break; case0x8f:num=7;break; case0x80:num=8;break; case0x84:num=9;break; case0x88:num=10;break; case0xe0:num=11;break; case0xb1:num=12;break; case0xc2:num=13;break; case0xb0:num=14;break; case0xb8:num=15;break; } P2=table[num]; P1=0x01; delaytime(5); } } 10 |
|