⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 program+yanshi.c

📁 关于C51的红外解码程序绝对好使(NEC)
💻 C
字号:
//这是一个红外接收程序,并用2个数码管显示其键值。
#include<main.h>                                         
void delay(uchar j)
{
	while(j--);
}
//红外接收模块
void int00(void) interrupt 0 using 0
{
	uchar w=4,flag=0;
	uchar n=8;
	uchar p=0;
	EX0=0;
	TR1=0;
	flag_t0=0;
	TH0=0xfc;                    //产生880ms中断,用来判断是高电平,还是低电平 
	TL0=0xd3;
	TR0=1;
	while(flag_t0==0);
	flag_t0=0;
	if(P32==0)  
	{
  		TH0=0xe3;
  		TL0=0x6c;                 //定时8820减掉上面的882
   		TR0=1;
 		while(flag_t0==0)
		{
			ii=b&0xf0;
			ii=ii>>4;
			jj=b&0x0f;
			P0=getcode[ii];
			P27=0;
			delay(10);
			P27=1;
			P0=getcode[jj];
			P26=0;
			delay(10);
			P26=1;    
		}
 		flag_t0=0;
 		while(P32==0); 
 		TH0=0xee;
 		TL0=0xef;					//定时4740
 		TR0=1;
 		while(flag_t0==0)
		{
			if(TH0==0xfa&&TH0==0x3d&&P32==0)
				flag=1;
			ii=b&0xf0;
			ii=ii>>4;
			jj=b&0x0f;
			P0=getcode[ii];
			P27=0;
			delay(10);
			P27=1;
			P0=getcode[jj];
			P26=0;
			delay(10);
			P26=1;    
		}
   		flag_t0=0;			//4740ms是用来判断9s过后的4.5ms是否到时间
		if(flag==0){	
		if(P32==0)
		{       
        	while(w--)      
			{
            	while(n--)
				{
				 	save=save>>1; 
                  	while(P32==0);
                  	TH0=0xfc;			//产生880ms中断,如P32等于1,则所传数据位为1,否则为0	
				  	TL0=0xb7;
				  	TR0=1;
				  	while(flag_t0==0);
                   	flag_t0=0;
                 	flag_c=P32;
				  	while(P32==1);
				  	if(flag_c==1)
				  	save=save+0x80;//存储数据
                  	a[p]=save;     
				}
				save=0;
				p++;   				//读取4个字节32位数据
			    n=8;  				
			}    		               
		}
	}

	if(a[2]==~a[3])  
	{				                //判断传送数据是否正确
		b=a[2];
	}
  }
  	
 // 	delay(255);



  	flag=0;
	EX0=1;									//开中断,关定时器
	TR0=0;
	TR1=1;
}
//精确定时882中断
void  t0(void) interrupt 1 		//清T0溢出标志,使能溢出位,关定时器
{
	TR0=0;							
	TF0=0;
	flag_t0=1;
}
//显示程序
void  tt1(void) interrupt 3 using 0
{
	uchar ii,jj;
	ii=b&0xf0;
	ii=ii>>4;
	jj=b&0x0f;
	P0=getcode[ii];
	P27=0;
	delay(10);
	P27=1;
	P0=getcode[jj];
	P26=0;
	delay(10);
	P26=1;    
	TF1=0;
	TH1=0Xff;
	TL1=0Xff;
	TR1=1;	
} 
//主函数
void main(void)
{
	//while(1)     
 	//{
 		uchar n=9;
		P0=0xff;
		P2=0xff;
		P32=1;
		IE=0x83;
		ET1=1;
		TH0=0X00;
		TL0=0X00;
		TH1=0Xff;
		TL1=0Xff;
		IP=0x02;						//T0设置为高优先级
		TMOD=0x11;						//设置T0工作方式1
		IT0=1;							//下降沿触发
		while(1);
 //	}
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -