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

📄 hongwai.c

📁 红外遥控器控制单片机红外遥控器控制单片机红外遥控器控制单片机
💻 C
字号:
#include <at89x52.h>

#define  DAT P2_1                   //模拟串口数据发送端
#define  CLK P2_0                   //模拟时钟控制端  

unsigned char code                  //数码管显示段码
tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//0-9,-,全灭 
 
unsigned char HongwaiCommand;
unsigned char DaiMa;
unsigned char HongwaiInt;
unsigned char BiaoZhi1,BiaoZhi2;

void SysConfig(void);
bit  HongwaiDecode(void);
void sendbyte(unsigned char byte);
void putnum(unsigned char i);
void KeyAction(unsigned char key);

void main(void)
{
	SysConfig();
	putnum(123);
	while(1)
		{
		 if(BiaoZhi1 == 1)
		 	{
			 BiaoZhi1 = 0;
			 if(HongwaiDecode())
			 	{
				 if(BiaoZhi2 == 1)
				     {		   					  
					  KeyAction(HongwaiCommand);
					  BiaoZhi2 = 0;
					  }
				}
			}
		}		 
}

void SysConfig(void)
{
	TMOD = 0x11;
	IT1  = 1;
	EX1  = 1;
	ET0  = 0;
	EA   = 1;
}

bit HongwaiDecode(void) 
{
	static idata unsigned char INTCount = 0;
	static unsigned long idata HongwaiData = 0;
	unsigned char HongwaiData1,HongwaiData2,HongwaiData3,HongwaiData4;
	if(HongwaiInt)
		{
		 if((DaiMa>0x32)&&(DaiMa<0x36))
		 	{
			 HongwaiData = 0;
			 INTCount = 0;
		 	}
		 	else if((DaiMa>0x07)&&(DaiMa<0x09))
		 	{
			 HongwaiData = (HongwaiData<<1)+1;
			 INTCount++;
			}
		 	else if((DaiMa>0x03)&&(DaiMa<0x05))
		 	{
			 HongwaiData = (HongwaiData<<1)+0;
			 INTCount++;
			}
		 	else if((DaiMa>0x2a)&&(DaiMa<0x2c))
		 	{
			 HongwaiInt = 0;
			 HongwaiData = 0;
		//	 HongwaiCommand = 0xff;
			 return 0;
			}
		 	else
		 	{
			 INTCount = 33;
			 HongwaiData = 0;
			}
		HongwaiInt = 0;
		if(INTCount == 32)
			{
			 HongwaiData1 = (unsigned char)(HongwaiData>>24);
			 HongwaiData2 = (unsigned char)(HongwaiData>>16);
			 HongwaiData3 = (unsigned char)(HongwaiData>>8);
			 HongwaiData4 = (unsigned char)(HongwaiData);
			 HongwaiData = 0;
			 if(HongwaiData3 = ~HongwaiData4)
			 	{
				 HongwaiCommand = HongwaiData3;
				 BiaoZhi2 = 1;
				 return 1;
				}
			 	else return 0;
			}
		 else return 0;
		}

	else return 0;
}

void sendbyte(unsigned char byte)
{    
 unsigned char num,c; 
 num=tab[byte];
 for(c=0;c<8;c++)
 {
 CLK=0;
 DAT=num&0x80; 
 CLK=1;
 num<<=1;       
  }	   
}


void putnum(unsigned char i)
{
 unsigned char a,b,c;

 a = i/100;
 b = (i%100)/10;
 c = i%10;
 sendbyte(c);
 sendbyte(b);
 sendbyte(a);
}

void KeyAction(unsigned char key)
{
	switch(key)
		{
		 case 144:
			key = 0;
		 	putnum(1);
			break;
		 case 184:
		    key = 0;
		 	putnum(2);
			break;
		 case 248:
		    key = 0;
		 	putnum(3);
			break;
		 case 176:
		    key = 0;
		 	putnum(4);
			break;
		 case 152:
		    key = 0;
		 	putnum(5);
			break;
		 case 216:
		    key = 0;
		 	putnum(6);
			break;
		 case 136:
		    key = 0;
		 	putnum(7);
			break;
		 case 168:
		    key = 0;
		 	putnum(8);
			break;
		 case 232:
		    key = 0;
		 	putnum(9);
			break;
		 case 128:
		    key = 0;
		 	putnum(10);
			break;
		 case 72:
		    key = 0;
		 	putnum(11);
			break;
		 case 240:
		    key = 0;
		 	putnum(12);
			break;
		 case 192:
		    key = 0;
		 	putnum(13);
			break;
		 case  88:
		    key = 0;
		 	putnum(15);
			break;
		 case 112:
		    key = 0;
		 	putnum(16);
			break;
		 default :
		    key = 0;
			break;
		}  
}

void Int1(void) interrupt 2 using 2
{
 EX1 = 0;
 TR0 = 0;
 BiaoZhi1 = 1;
 HongwaiInt = 1;
 DaiMa = TH0;
 TH0 = 0;
 TL0 = 0;
 TR0 = 1;
 EX1 = 1;
} 

⌨️ 快捷键说明

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