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

📄 key.c

📁 采用1*4,4*4键盘同时控制,带有8位数码显示的数控直流电源驱动及应用程序(Keil c51)
💻 C
字号:
//#include "reg51.h"

#define LED_BIT P3 
#define LED_SEG P0

#define KeyIO P2    //p2口接4mul4键盘

sbit ScanIO = P3^3;	//p3.3为附加扫描线扩展1mul8键盘
unsigned char Key_Vlue[25] = {0x77,0xb7,0xd7,0xe7,0x7b,0xbb,0xdb,0xeb,
						    // 0     1    2    3	4	 5 	  6	   7
						      0x7d,0xbd,0xdd,0xed,0x7e,0xbe,0xde,0xee,
						    // 8    9    10   11   12   13   14   15
							  0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
							
//附加1mul8键盘扫描子程序
unsigned char Scan_Key1mul8()
{
	unsigned char i;
	unsigned char scancode,keycode;
	ScanIO = 0;
	scancode = 0xff;//P2口输出全1则无键闭合
	KeyIO = scancode;	
	keycode = KeyIO;
	if(keycode!=0xff)
	{
		for(i=16;i<24;i++)
		{
			if(keycode == Key_Vlue[i])
				return (i);//返回的是键值的相对位置16~23				
		}		
	}
	return 0xff;//无键按下时返回值为0xff	
}
//线反转法4mul4键盘扫描子程序
unsigned char Scan_Key4mul4()
{
	unsigned char i;
	unsigned char scancode,keycode,keycode_line,keycode_row;

	scancode = 0xf0;//列置低,行置高
	KeyIO = scancode;//输入扫描码,扫描行
	keycode_line = KeyIO;

	scancode = 0x0f;//列置高,行置低
	KeyIO = scancode;//输入扫描码,扫描列
	keycode_row = KeyIO;

	keycode = ((keycode_line&0xF0)|(keycode_row&0x0F));
	for(i=0;i<16;i++)
	{
		if(keycode==Key_Vlue[i])
			return (i);//返回的是键值的相对位置0~15
	}
	return 0xff;//无键按下时返回值为0xff
}
//读键值
unsigned char Key(void)
{
	unsigned char temp;
	temp=Scan_Key1mul8();
	if(temp!=0xff)
		return temp;
	else
    {
		temp=Scan_Key4mul4();
		if(temp!=0xff)
			return temp;
	}
	return 0xff;
}

⌨️ 快捷键说明

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