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

📄 ir6122.c

📁 一个51单片机下编写红外遥控接收程序
💻 C
字号:


#include  "headfiles\headfiles.h"

/////////////////////////////////////////
//								/////////
//	  晶体:18.432MHz           /////////
//								/////////
/////////////////////////////////////////


void init_timer0(void)  //初始化
{
	TMOD &= 0XF0;
	TMOD  |= 0X1;
	TL0 = 0x50;
	TH0 = 0xFF;
	TR0 = 1;
	PT0 = 1;
    ET0 = 1; 
	EA = 1;
	P3 = 0xFF;
}





void timer_isr() interrupt 1  //中断函数
{
//   DISABLE; 
    EA = 0; 
//    test_IO_Flag = ~test_IO_Flag;
//    P1 = test_IO_Flag;
    IR_decode(); 
           
	TL0 = 0x50;
	TH0 = 0xFF;
//  ENABLE;
    EA = 1;
}


sbit  Ir_line = P3^5;


bit  High_Flag;

bit  Rcv_OK;

#define  data_code_long    12
#define  data_code_short   4

unsigned char  Ir_timer;
unsigned char  Rcv_bit_cnt;
unsigned char  Rcv_Byte_cnt;

unsigned char  Rcv_Code[2];



#define  data_code_long    12
#define  data_code_short   4  

void Rcv_bit_Deal(bit bt)
{
   if((Ir_timer > data_code_short-3)&&(Ir_timer < data_code_short+4))
	 {
	   if(Rcv_bit_cnt&0x01)
		{
			Rcv_Code[Rcv_Byte_cnt] <<= 1;
			Rcv_Code[Rcv_Byte_cnt] |=  bt;  
		}
	   Rcv_bit_cnt++;
	   if(Rcv_bit_cnt==10)
		{
		    Rcv_Byte_cnt++;    
		}					
	   else if(Rcv_bit_cnt>25)
		{
			Rcv_OK = 1;
			Rcv_bit_cnt = 0;
			Rcv_Byte_cnt = 0;	
		}
	   else
		{
		}
	  }
	else if((Ir_timer > data_code_long-4)&&(Ir_timer < data_code_long+5))
	  {
		 Rcv_Code[Rcv_Byte_cnt] <<= 1;
		 Rcv_Code[Rcv_Byte_cnt] |=  bt;
		 Rcv_bit_cnt += 2;
		 if(Rcv_bit_cnt==11)
		   {
			  Rcv_Byte_cnt++;    
		   }
		 else if(Rcv_bit_cnt>25)
		  {
			  Rcv_OK = 1;
			  Rcv_bit_cnt = 0;
			  Rcv_Byte_cnt = 0;	
		  }
		 else
		  {

		  }				 					 			   
		}
	  else
	   {
		   Rcv_bit_cnt = 0;
		   Rcv_Byte_cnt = 0;			    
	   }
}



void IR_decode(void)
{
  if(Ir_line)
   {
     if(High_Flag)
       {
          Ir_timer++;
          if(Ir_timer>180)
           {
             Ir_timer = 180;			 				    				                  
           } 	   	 	   
	   }
	  else
	   {
	      Rcv_bit_Deal(0);
		  Ir_timer = 0;
	   }
	  High_Flag = 1;
	}
  else
   {
      if(High_Flag)
	    {
		  Rcv_bit_Deal(1);
		  Ir_timer = 0;	 	     
	    }
	  else
	    {
		   Ir_timer++;
		}
	   High_Flag = 0;       	   
	}
}


void  Rcv_IRKey(void)
{
    if(Rcv_OK == 1)
	 {
	    Send_Str("Head code:  \0");
		Send_HEX_char(Rcv_Code[0]);
		Send_Str("     \0");
		Send_Str("Key code:  \0");
		Send_HEX_char(Rcv_Code[1]);
		Send_Str("\r\n\0");
		Rcv_OK = 0;
	 }
}



⌨️ 快捷键说明

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