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

📄 ir_lpc.c

📁 基于标准MCS-51 单片机的红外接收软件.RC-5码.可通过RS232将接收到的码发送给PC机,实现红外遥控功能.短小精悍,采用中断编写.
💻 C
字号:
#include <REG932.H>			// register definition

#define uchar unsigned char

/*
//#define XTAL_14M318

#ifdef XTAL_14M318
#define T102 0x1f
#define T205 0x3f
#define T820 0xfc
#else
#define T102 0x10
#define T205 0x20
#define T820 0x82
#endif
*/
#define T102 0x10
#define T205 0x20
#define T820 0xa3


bit F_RemoReady;
uchar data RemoSystem;
uchar data RemoCommand;
static uchar data RemoState;
uchar data temp[34];
uchar data counter;
///////////////////////////////////////////////////////////////

void delay (unsigned int cnt)
{
	while (--cnt);
}

void main()
{
	uchar i;

	P2M1 = 0;

	IE1 = 0;         /* no external interupt 1 detected              */
	IT1 = 1;         /* select transition-activated external int.    */
	EX1 = 1;         /* enable external interrupt 1                  */

	TMOD = 0x10;

	TL1 = 0;
	TH1 = 0;
	TR1 = 0;
	ET1 = 0;     	 /* 0=Disable Timer 1 interrupt 						 */

	EA = 1;			 /* enable all interrupt								 */

	RemoState=0;
	RemoSystem=0;
	RemoCommand=0;
	counter=0;

	for(;;)
	{
		for (i = 0x01; i; i <<= 1)
		{
			P2 = i;
			delay (10000);
		}
		for (i = 0x80; i; i >>= 1)
		{
			P2 = i;
			delay (10000);
		}
		if(F_RemoReady)
		{
			F_RemoReady = 0;
			P2 = RemoCommand+1;
			for (i=0; i<10; i++)
				delay(50000);
			P2 = 0x00;
		}
	}
}
//-----------Ir remo module-------------------
void remo_check(void) interrupt 2 
{
	static uchar data RemoBuffer0;
	static uchar data RemoBuffer1;
	uchar data CaptureTime;
	IE1 = 0;
	CaptureTime = TH1;
	temp[counter]=TH1;
	if(++counter>34)counter=0;
	TL1 = 0;
	TH1 = 0;

	if(++RemoState>34)
	{
		RemoState=0;
	}

	if( (CaptureTime>(T102-2))&&(CaptureTime<(T102+2))&&(RemoState>2) )
	{
		RemoBuffer0=(RemoBuffer0>>1)|0x00;
	}
	else if( (CaptureTime>(T205-2))&&(CaptureTime<(T205+2))&&(RemoState>2) )
	{
		RemoBuffer0=(RemoBuffer0>>1)|0x80;
	}
	else if( (CaptureTime>(T820-0x30))&&(CaptureTime<(T820+0x30)) )
	{
		RemoState=2;
	}
	else
	{
		RemoState=0;
	}

	switch(RemoState){
		//startt receive
		case 1:
			break;
		//receive reader
		case 2:	RemoBuffer0=0;
			break;
		//receive system0
		case 10: RemoBuffer1=RemoBuffer0;RemoBuffer0=0;
			break;
		//receive system1
		case 18:	//if(RemoBuffer0==~RemoBuffer1)
					//{
					//	RemoSystem=RemoBuffer1;
						RemoBuffer0=0;
					//}
					//else
					//{
					//	RemoState=0;
					//}
			break;
		//reveive command0
		case 26: RemoBuffer1=RemoBuffer0;RemoBuffer0=0;
			break;
		//the end bit
		case 34:	if(RemoBuffer0==~RemoBuffer1)
					{
						RemoCommand=RemoBuffer1;
						F_RemoReady=1;
					}
					RemoState=0;
			break;
		default:;
	} 

	TR1 = 1;
	ET1 = 1;
}

void remo_timer(void) interrupt 3 
{
	RemoState = 0;
	counter = 0;
	TR1 = 0;
	ET1 = 0;
}



⌨️ 快捷键说明

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