红外遥控解码的C51程序

源代码在线查看: 最简红外遥控解码.txt

软件大小: 2 K
上传用户: littlefish
关键词: C51 红外遥控 程序 解码
下载地址: 免注册下载 普通下载 VIP

相关代码

				       用单片机进行红外遥控解码,对大多数初学者来说是很麻烦的一个问题。从书中和网上找到的一些这方面的程序,运行往往是无法通过。即使能用的程序也是显得复杂而长。
				        下面介绍本人自编的红外遥控解码的C51程序,自认为是可能是史上最简的。此程序是针对uPD6121系列的遥控器的取码程序,解码值在Im[2]中,当IrOK=1时解码有效。 
				/*   51单片机红外遥控解码程序   */
				/*      适用uPD6121系列            */
				/*     周正华 2008.4.11编         */ 
				/*    http://hi.baidu.com/52_diy   */
				
				#include 
				
				#define DIGPORT P2
				#define WORDPORT P0
				unsigned char code LED_num[]={0x3f,0x18,0x76,0x7c,0x59,0x6d,0x6f,0x38,0x7f,0x7d};
				
				#define Imax 14000    //此处为晶振为11.0592时的取值, 
				#define Imin 8000    //如用其它频率的晶振时,
				#define Inum 1450    //要改变相应的取值。
				unsigned char Im[]={0x00,0x00,0x00,0x00};
				
				unsigned long m,Tc;
				unsigned char i,IrOK;
				
				
				void DelayMy(unsigned int t){
				while(--t);
				}
				
				
				void Display_LED(unsigned long num)
				{
				unsigned int ii;
				unsigned int jj=0;
				unsigned long aa,bb;
				unsigned int xx[8]={0,0,0,0,0,0,0,0};
				do {
				    bb=num/10;
				    aa=num-bb*10;
				    xx[jj]=aa;
				    num=bb;jj++;
				    }
				while(num>0);
				DIGPORT=0x80;
				for(ii=0;ii				    WORDPORT=LED_num[xx[ii]];
				    DelayMy(60);
				    DIGPORT=DIGPORT>>1;
				};
				WORDPORT=0;
				}
				
				//外部中断解码程序
				void intersvr1(void) interrupt 2 using 1
				{
				Tc=TH0*256+TL0;                                               //提取中断时间间隔时长
				TH0=0; TL0=0;              //定时中断重新置零
				if((Tc>Imin)&&(Tc				if(Tc>Inum) Im[m/8]=Im[m/8]>>1|0x80; else Im[m/8]=Im[m/8]>>1; //取码
				if(m==32) if((Im[2]|0x01)==~Im[3]) IrOK=1; else IrOK=0;    //取码完成后判断读码是否正确
				m++;                //准备读下一码
				}
				
				
				/*演示主程序*/
				void main(void)
				{
				m=0;
				EA=1;
				
				IT1=1;EX1=1;
				
				TMOD=0x11;  
				TH0=0;TL0=0;
				TR0=1;ET0=1;
				
				for(;;){
				DelayMy(100);
				if(IrOK==1) for(i=0;i				IrOK=0;
				}
				}
							

相关资源