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

📄 remote_pro.c

📁 实用红外遥控接收
💻 C
字号:
#include<REG51.H>
#include<INTRINS.H>
#include<STRING.H>
#include<STDIO.H>
#include<math.h>

#define uchar unsigned char


/***********************************************************************
						遥控接收程序
/**********************************************************************/
//
//global:	keynumb, ct_pulse, ct_press, remstep
//input:	ct_pulse, ct_press,
//ouput:	keynumb<g.>

	  bit	F_rempress;
uchar data	ct_pulse, ct_press, remstep;
uchar data  remdat, remdat1, remkey;

uchar data	keynumb;


const uchar REMOTEIDA0=0x00;
const uchar REMOTEIDA1=0xff;
const uchar REMOTEIDB0=0x00;
const uchar REMOTEIDB1=0xff;

const uchar REM200US0L=2,	REM200US0H=8;
const uchar REM200US1L=9,	REM200US1H=16;


uchar code	list_remkey[]={	0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
							0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						  };


//********************************************************************
//程序声明

void RemKeyAna(uchar x);
void RemProcess();


//********************************************************************

main()
{
	uchar i;

	P0=0xEE;
	P1=0x00;
	P2=0xFF;
	P3=0xFF;
	TH0=0xFF;
	TL0=0x37;		//200US
	TCON=0x11;		//TF1 TR1 | TF0 TR0 | IE1 IT1 | IE0 IT0
	TMOD=0x01;		//GATA C/T M1 M0 | GATA C/T M1 M0
	IP=0x00;		//.. .. .. PS PT1 PX1 PT0 PX0
	IE=0x83;		//EA .. .. ES ET1 EX1 ET0 EX0


/*	while(1)
	{	RemProcess();
	}
*/
	for (i=0; i<10; i++)
	{	switch(i)
		{	case 0:
				{ break; break;}
			default:
				break;
		}

		ACC=2;
	}

	while(1)
	ACC=1;
}



//********************************************************************
//遥控中断
//
//********************************************************************

void int0() interrupt 0 using 1
{
	uchar x;
	x=ct_pulse; 
	ct_pulse=0;

	switch(remstep)
	{	case 0:
			remstep++;
			break;
		case 1:
		{	if (x>=60 && x<=75)	remstep++;	}
			break;
		default:
		{	if (remstep>=34)	remstep=0;
			else
			{	if (x<REM200US0L || x>REM200US1H)
					remstep=0;
				else
				{	F0=( (x>=REM200US0L && x<=REM200US0H) ? 0 : 1);
					remdat= remdat>>1;			//CY 不参与移位
					if (F0)
					{	remdat=remdat | 0x80;}


					switch(remstep)
				    {	case 9:
							if(remdat != REMOTEIDA0 && remdat != REMOTEIDB0)
								remstep=0;
							break;

						case 17:
							if(remdat != REMOTEIDA1 && remdat != REMOTEIDB1)
								remstep=0;
							break;

						case 25:
							remdat1=remdat;
							break;

						case 33:
							{	remstep = -1;
								if ( (remdat1 & remdat)==0 )
									RemKeyAna(remdat1);
							}
							break;
						default:
							break;
					}
					remstep++;
				}
			}
			break;
		}
	}

}

//---------------------------------------------------------------------
//遥控键速控制

void RemKeyAna(uchar x)
{
	if (list_remkey[x] != remkey)
	{	keynumb=remkey=list_remkey[x]; ct_press=0; F_rempress=0;	}
	else
	{	if (!F_rempress)
		{	if (ct_press > 4)	// >400ms
				{	F_rempress=1; ct_press=0; keynumb=remkey;	}
		}
		else
			switch (remkey)
			{	case 1:					// 连发键可以控制按键速度
				case 2:
				case 3:
				case 4:
					break;
				default:
					ct_press=0;			// 单发键, 连续按不响应
					break;
			}
	}
}


//--------------------------------------------------------------------
//定时中断相关处理

void RemProcess()
{
	ct_pulse++;		// +1/200us

	if (ct_pulse > 240)
	{	ct_pulse=0; remstep=0; remkey=0; F_rempress=0;	}
	
	ct_press++; 	// +1/100ms
}

⌨️ 快捷键说明

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