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

📄 ht1621.c

📁 红外线遥控Proteus仿真电路 发射接收程序
💻 C
字号:
// STC 12T系列单片机红外接收NEC解码程序。适用于市场上用量最大的HT6121/6122及其兼容的IC编码。
// 使用外部中断0接收P3.2
//
#include <REGX52.H>
#include <intrins.h>
#define uchar unsigned char    
#define uint  unsigned int  

uchar code tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0xFF};

sbit	IR    = P3^2;		 

uchar	N[4];				 //识别码,操作码存放
uchar   X1,X2,X3,X4;

void XSQ(void);
void YS(uchar time);

/****************** 主函数 *******************/
void main(void)
{ 	
  X1=X2=X3=X4 = 0;
  
  IT0 = 1; 
  EX0 = 1;
  EA  = 1;

  while(1)
  {
   XSQ();
  }
}

/**********************数码管显示函数************************/
void XSQ(void)
{ 
	 P2_7=1;P0=tab[X1];P2_0=0;YS(1);	//识别码
     P2_0=1;P0=tab[X2];P2_1=0;YS(1);
     P2_1=1;P0=tab[16];P2_2=0;YS(1);
     P2_2=1;P0=tab[16];P2_3=0;YS(1);
     P2_3=1;P0=tab[16];P2_4=0;YS(1);
     P2_4=1;P0=tab[16];P2_5=0;YS(1);
     P2_5=1;P0=tab[X3];P2_6=0;YS(1);	//操作码
     P2_6=1;P0=tab[X4];P2_7=0;YS(1);
}

/********************** 外部中断函数************************/
void exint0() interrupt 0 
{ 	 
   uint cnt;
   uchar i;

   EX0 = 0;
   cnt = 0;	
	
   while(!IR) cnt++;                               //记录引导码时间 
   if(cnt < 1000){EX0=1;return;}                   //9ms的计数值(12MHz:1000< cnt <1500)
   	
   cnt = 0;			 
   while(IR) if(cnt++ > 400){EX0=1;return;}        //防卡死,超时保护(12MHz: > 300)    
   if(cnt < 200){EX0=1;return;}                    //(12MHz不分频: <260)  	  

   for(i=0; i<32; i++)                             //读取32位位码
       {
         cnt = 0;																		
         while(!IR);		       
         while(IR) if(cnt++ > 200){EX0=1;return;}  //超时保护(12MHz:>=200)
         N[i/8] >>= 1;
         if(cnt>60) N[i/8] |= 0x80;                //0和1的计数界线(12MHz:< 109)    
       }

	 if(N[0] == ~N[1] && N[2] == ~N[3])            //校验识别码,操作码	
	   {
	   	X1 = N[0]/16;
		X2 = N[0]%16;
		X3 = N[2]/16;
		X4 = N[2]%16;
	   }

	EX0 = 1;		 
} 

/***************************************************************
函数功能:按键消抖    延时程序
入口参数:1ms×time       (晶振=12MHz)
***************************************************************/
void YS(uchar time)
{
     uchar i,j;
	 for(i=0; i<time; i++)
     for(j=0; j<247; j++)_nop_();
} 

⌨️ 快捷键说明

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