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

📄 key.h

📁 51单片机红外遥控解码程序
💻 H
字号:
//*********************************************
 //MCU:AT89S52 ,晶振频率:6 MHz
 //键盘接口:4*4行列式键盘
 //行线:P10,P11,P12,P13
 //列线:P14,P15,P16,P17
 //制作人:平顶山工学院计算机系,郭猛
//******************相应的按键扫描码:*******************

#define uchar unsigned char

uchar code Key1=0xEE,Key2=0xDE,Key3=0xBE,Key4=0x7E;
uchar code Key5=0xED,Key6=0xDD,Key7=0xBD,Key8=0x7D;
uchar code Key9=0xEB,Key10=0xDB,Key11=0xBB,Key12=0x7B;
uchar code Key13=0xE7,Key14=0xD7,Key15=0xB7,Key16=0x77;

sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;

uchar KbScan(bit IsUP);						//键盘扫描程序,如果按键未按下,不用等待
uchar KbScanUntilKeyDown(bit IsUP);		// IsUP=0,只要按下即可 IsUP=1,等待弹起			
void DelayuS(uchar DelayTimes);			//延时,单位uS
void Delay_1ms();						//延时1mS
void Delay(unsigned int DelayTimes);	//延时,DelayTimes是延时的ms数

//**************************************微秒级延时****************************************
void DelayuS(uchar DelayTimes)
{
    while(--DelayTimes);				//12Mhz下,延时DelayTimes*2+3微秒
}

//**************************************1毫秒延时****************************************
void Delay_1ms()
{
	DelayuS(248);
	//6 Mhz下延时1 ms
}

//*************************************较长时间,mS级延时(不精确)******************************
void Delay(unsigned int DelayTimes)	
{
	while(--DelayTimes) Delay_1ms();	//延时,DelayTimes是延时的ms数
}

//键盘扫描程序,如果按键未按下,不用等待
uchar KbScan(bit IsUP)
{
	uchar sccode,recode;
	P10=1;P11=1;P12=1;P13=1;			//行线为1,要输入
	P14=0;P15=0;P16=0;P17=0;			//列线为0
	Delay(1);sccode=0;
	recode=P1&0x0F;			//读取P1状态
	if(recode!=0 && recode!=0x0F)				//行线有变化,说明有按键按下
	{
		Delay(10);				//10mS延时去抖
		if(recode==(P1&0x0F))	//的确有按键按下
		{
			P10=recode&0x01;	//行线输出recode的状态
			P11=recode&0x02;
			P12=recode&0x04;
			P13=recode&0x08;
			P14=1;P15=1;P16=1;P17=1;	//列线为1,要输入
			Delay(1);
			sccode=P1&0xFF;		//读取按键扫描码	
			return sccode;
		}
		if(IsUP)
		while(recode==(P1&0x0F))		//直到按键弹起
		{
			P10=1;P11=1;P12=1;P13=1;			//行线为1,要输入
			P14=0;P15=0;P16=0;P17=0;			//列线为0
			Delay(1);
			recode=P1&0x0F;			//读取P1状态
			Delay(10);
		}
	}
	return sccode;
}

//键盘扫描程序,如果按键未按下,则一直等待,直到一个按键按下为止.
uchar KbScanUntilKeyDown(bit IsUP)				// IsUP=0,只要按下即可 IsUP=1,等待弹起			
{
	uchar sccode,recode;
	P10=1;P11=1;P12=1;P13=1;			//行线为1,要输入
	P14=0;P15=0;P16=0;P17=0;			//列线为0
	Delay(1);sccode=0;
	recode=P1&0x0F;			//读取P1状态
	if(recode!=0)				//行线有变化,说明有按键按下
	{
		Delay(10);				//10mS延时去抖
		if(recode==(P1&0x0F))	//的确有按键按下
		{
			P10=recode&0x01;	//行线输出recode的状态
			P11=recode&0x02;
			P12=recode&0x04;
			P13=recode&0x08;
			P14=1;P15=1;P16=1;P17=1;	//列线为1,要输入
			Delay(1);
			sccode=P1&0xFF;		//读取按键扫描码	
			return sccode;
		}
		if(IsUP)
		while(recode==(P1&0x0F))		//直到按键弹起
		{
			P10=1;P11=1;P12=1;P13=1;			//行线为1,要输入
			P14=0;P15=0;P16=0;P17=0;			//列线为0
			Delay(1);
			recode=P1&0x0F;			//读取P1状态
			Delay(10);
		}
	}
	return sccode;
}

⌨️ 快捷键说明

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