本人最近学习到了51
单片机红外遥控部分内容,但是如下程序很是不懂,关于液晶显示遥控键码值的问题,我想问的是,红外遥控的说明资料是每种都不一样吗》我学习的板子没有带这部分内容,怎么办呢
void IR_IN() interrupt 0 using 0{ unsigned char j,k,N=0; EX0 = 0; delay(15); if (IRIN==1) { EX0 =1; return; } //
确认IR
信号出现 while (!IRIN) //
等IR
变为高电平,跳过9ms
的前导低电平信号。 {delay(1);} for(j=0;j<4;j++) //
收集四组数据 { for(k=0;k<8;k++) //
每组数据有8
位 { while (IRIN) //
等 IR
变为低电平,跳过4.5ms
的前导高电平信号。 {delay(1);} while (!IRIN) //
等 IR
变为高电平 {delay(1);} while (IRIN) //
计算IR
高电平时长 { delay(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=1; return; } IRCOM[5]=IRCOM[2] & 0x0F; //
取键码的低四位 IRCOM[6]=IRCOM[2] >> 4; //
右移4
次,高四位变为低四位 if(IRCOM[5]>9) {IRCOM[5]=IRCOM[5]+0x37;} else IRCOM[5]=IRCOM[5]+0x30; if(IRCOM[6]>9) {IRCOM[6]=IRCOM[6]+0x37;} else IRCOM[6]=IRCOM[6]+0x30; lcd_pos(0x4b); lcd_wdat(IRCOM[6]); //
第一位数显示 lcd_pos(0x4c); lcd_wdat(IRCOM[5]); //
第二位数显示 beep(); EX0 = 1; }
一周热门 更多>