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

📄 sy.c

📁 本程序能实现一定距离的红外遥控
💻 C
字号:
#include<reg51.h>

//------字表------------------------------
unsigned char code tab[]=
{ 0x3F,0x06,0x5B,0x4F,    //"0","1","2","3"
  0x66,0x6D,0x7D,0x07,    //"4","5","6","7"
  0x7F,0x6F,0x77,0x7c,    //"8","9","A","B" 
  0x39,0x5e,0x79,0x71,    //"C","D","E","F"
};

unsigned char yk_flag;	
unsigned int a,b; 
int n ;
unsigned char ch,ch_1;
unsigned char key_code,key_press;
sbit rec=P2^4;	   //红外接收

//接收遥控器信号--------------------------------------
void yaokong()
{  unsigned char i;
   TR0=1 ;
	n=0;
	if(yk_flag==0)
	  {	  
	while(rec)
	{if(n>400)	break; }		  	
	 n=0;	           		     
	while(!rec);		
    if(n>470) 
	{ //buff[0]=1;		      
	  n=0;			  
	  while(rec);			  
	  if((n>175)&&(n<290))		  
		{//buff[1]=1;			  
		 n=0;
		 for(i=0;i<8;i++)
		  {	while(!rec);
			n=0;
			while(rec);
			if((n>16)&&(n<58))
			  {ch=ch<<1;n=0;}
			else if((n>70)&&(n<118))
				{ch=(ch<<1)|0x01;n=0;}						    
		   }
        // buff[2]=ch>>4;
  	    // buff[3]=ch&0x0f;
	     while(!rec);
	     n=0;
	     while(rec);
	     if((n>168)&&(n<282))
	        {  for(i=0;i<8;i++)
		        { while(!rec);
			      n=0;
			      while(rec);
			      if((n>16)&&(n<58))
			       {ch_1=ch_1<<1;n=0;}
				  else if((n>70)&&(n<118))
				    {ch_1=(ch_1<<1)|0x01;n=0;}
			    }
		     // buff[4]=ch_1>>4;
		     // buff[5]=ch_1&0x0f;
						   
		     }
			yk_flag=2;			 						 					   	
		}
		if(ch==0x43)
		 { switch(ch_1)
			 {	 
			   case  0x08 :key_code=1;key_press=1;break;
			   case  0x88 :key_code=2;key_press=1;break;
			   case  0x48 :key_code=3;key_press=1;break;
			   case  0xc8 :key_code=4;key_press=1;break;
			   case  0x28 :key_code=5;key_press=1;break;
			   case  0xa8 :key_code=6;key_press=1;break;
			   case  0x68 :key_code=7;key_press=1;break;
			   case  0xe8 :key_code=8;key_press=1;break;
			   case  0x18 :key_code=9;key_press=1;break;
			   case  0x98 :key_code=0;key_press=1;break;	
			   case  0x58 :key_code=0x0a;key_press=1;break;
		  	   case  0xd8 :key_code=0x0b;key_press=1;break;
			   case  0x40 :key_code=0x0c;key_press=1;break;
			   case  0x80 :key_code=0x0d;key_press=1;break;
		       case  0x2c :key_code=0x0e;key_press=1;break;
			   case  0x70 :key_code=0x0f;key_press=1;break;
			   default    :break;//buff[1]=0x0f;		  	  				  
		      }
		  }		  	
	}
		
    n=0;
	}
	TR0=0 ;
 }
 
 
 void main()
{
  TMOD=0x02;
  TR0=1;
  ET0=1;
  EA=1;
  TH0=0xfa; 
  TL0=0xfa; 
  while(1)
  {
   yaokong();  
   P1=tab[key_code];
   yk_flag=0;
   }  
}

void to(void) interrupt 1 using 0
 {
   n++;
 } 	 	

⌨️ 快捷键说明

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