/***无敌呆呆猫---2015/6/28晚21:18编写完成#51单片机NEC格式红外遥控码解码程序#
留此纪念### ***/
#include
#define wei P0
#define duan P1
***it ird=P3^2;
unsigned int timelong; //timelong T/C定时器计数值
unsigned char quke,timeok,a,b,yonghuma1_l,yonghuma1_h,yonghuma_l //quke=躯壳 用户码低8位 高8位 按键码正8位 反8位
,yonghuma_h,anjianma1_z,anjianma1_f,anjianma_z,anjianma_f;
unsigned char code zifuku[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, //3641BG:4位共阳极数码管字符表
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
void delay (unsigned int a){ //用于保持数码管显示稳定
unsigned int i; //要控制其他器件的话
while(--a !=0){ //这个delay也可以去掉
for(i=0;i<600;i++);}
}
void main(){
EA=1;
EX0=1;
IT0=1;
TR0=0;
TMOD=1;
TH0=0;
TL0=0;
b=0;
wei=0x00;
duan=0xff;
while(1){
wei=0x80; //如果不用数码管显示
duan=zifuku[yonghuma_l/16]; //可以换成任何你想要
delay(1); //控制的器件 所以呢
duan=0xff; //这个红外解码程序
wei=0x40; //还是相当实用的
duan=zifuku[yonghuma_l%16]; //控制LED灯什么的
delay(1); //应该随便啦
duan=0xff;
wei=0x20;
duan=zifuku[yonghuma_h/16];
delay(1);
duan=0xff;
wei=0x10;
duan=zifuku[yonghuma_h%16];
delay(1);
duan=0xff;
wei=0x8;
duan=zifuku[anjianma_z/16];
delay(1);
duan=0xff;
wei=0x4;
duan=zifuku[anjianma_z%16];
delay(1);
duan=0xff;
wei=0x2;
duan=zifuku[anjianma_f/16];
delay(1);
duan=0xff;
wei=0x1;
duan=zifuku[anjianma_f%16];
delay(1);
duan=0xff;
}
}
void zdext ()interrupt 0{
TR0=0;
timelong=TH0*256+TL0;
TH0=0;
TL0=0;
TR0=1;
if((timelong>13300)&&(timelong<13700)){timeok=1;} //引导检测
if((timelong>2000)&&(timelong<2500)) {timeok=2;} //码流1检测
if((timelong>875)&&(timelong<1375)) {timeok=3;} //码流0检测
switch(timeok){
case 1:b=1; //找到引导码 为后面程序提供开启钥匙
a=0;
quke=0;
break;
case 2:quke=quke>>1; //1赋值
quke=quke|0x80;
a=a+1;
break;
case 3:quke=quke>>1; //0赋值
quke=quke|0x00;
a=a+1;
break;
}
if(b){ //这个b是找到引导的标志 主要是防止没找到引导码而导致后面程序赋值出错
switch(a){
case 8:yonghuma1_l=quke;
break;
case 16:yonghuma1_h=quke;
break;
case 24:anjianma1_z=quke;
break;
case 32:anjianma1_f=quke;
break;
}
}
if(a==32){b=0; //加这一级if主要是为了在解码失败的时候不影响到
yonghuma_l=yonghuma1_l; //动态数码管原来的显示值 如果不用数码管而是换成
yonghuma_h=yonghuma1_h; //要控制的其他器件的话 这一级if也可以在解码失败
anjianma_z=anjianma1_z; //时不影响到器件原先的工作状态 这个很重要!!!
anjianma_f=anjianma1_f;
}
}
/***感谢小榄辉对之前程序while过多 实用性差点评 这个程序是之前程序的改进型
如果感兴趣的想试一试这个解码程序的发烧友 移植的时候后面的
动态数码管显示得自己修改一下哦 我的板子被我改过了 不一样
照搬的话可能显示不了哦 ***/
|