#include<reg51.h> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long
extern show(uchar showdata); //这是用595和数码管显示的函数
ulong IRcode=0x00000000; //32位的键代码
uint customcode=0x0000; //16位用户码 uchar Lcustomcode=0x00; //低8用户码 uchar Hcustomcode0x00; //高8位用户码 uchar datacode=0x00; //8位键数据码 uchar Rdatacode=0x00; //8位键数据反码
sbit IR=P3^2;
void delay() { uchar i,j,k; for(i=200;i>0;i--) for(j=200;j>0;j--) for(k=55;k>0;k--) ; }
void delay4_3ms() //延时4.3ms { TH1=0xef; TL1=0x34; TR1=1; while(TF1==0); TF1=0; TR1=0; }
void delay1_120ms() //延时1.120ms { TH1=0xFB; TL1=0xA0; TR1=1; while(TF1==0); TF1=0; TR1=0; }
void init() { TMOD=0x11; //定时器0,工作方式1 ; 定时器1,工作方式1 TCON=0x01; //外中断0下降沿触发,(包括TR1=0,TR0=0) TH0=0x3c; //初始化定时器0,定时50ms TL0=0xb0; TH1=0x00; //初始化定时器1 TL1=0x00; EA=1; //开全中断 ET0=1; //开放T0中断 ET1=1; //开放T1中断 EX0=1; //开放INT0 }
void remoteint() interrupt 0 using 1 //遥控器中断0处理函数,读取32位码 { uchar k ; EX0=0; delay4_3ms(); if(IR!=0) return; //判断是否有干扰 while(IR==0); for(k=0;k<32;k++) { while(IR==1); delay1_120ms(); if(IR==1) IRcode=IRcode|0x80000000; else IRcode=IRcode|0x00000000; IRcode=IRcode>>1; } //if(customcode!=0xFFC0) return; //判断,防止其他遥控器干扰 Lcustomcode=IRcode; //取低8位用户码 IRcode=IRcode>>8; Hcustomcode=IRcode; //取高8位用户码 IRcode=IRcode>>8; datacode=IRcode; //取数据码 IRcode=IRcode>>8; Rdatacode=IRcode; //取数据码的反码 EX0=1; }
void Timer0INT() interrupt 1 using 2 //定时器0中断函数 { //TR1=0; //TR1=1; }
void Timer1INT() interrupt 3 using 3 //定时器1中断函数 { //TR1=0; //TR1=1; }
//------------------------------------主函数-------------------------------- void main() { init(); while(1) { loop: if(customcode==0) goto loop; //if(~Rdatacode!=datacode) goto loop; show(Lcustomcode); //显示低8位用户码 delay(); show(Hcustomcode); //显示高8位用户码 delay(); show(datacode); //显示数据码 delay(); show(Rdatacode); //显示数据反码 delay(); } }
//因为我不知道遥控器各个键的数据码,所以我想用以上程序测出来,但程序读取发生了一些问题:1:有两个键测出来的数据码是一样的 2:有些键数据反码跟原码不吻合 3:if(IR==1) IRcode=IRcode|0x80000000; else IRcode=IRcode|0x00000000;这两句根据数据格式应该调换过来,但反而这样才能测出码,而且这样测出的用户码跟厂家给的用户码是一样的,好奇怪啊。而且,我觉得那个1.12MS的定时不太对的,应该在0.9MS时候做判断比较好,但改成0.9MS的话就更不行了 哪位高手能帮帮我忙啊,好可怜,昨天搞了一天了都没搞出来 遥控器发射码格式如下图:
|