📄 key.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 + -