📄 4ⅹ4矩阵键盘-查表法(c语言.txt
字号:
标题:小键盘的输入函数
版本:1.0
Target:89S51
函数描述: char gotkey(void)
从4ⅹ4小键盘输入数据,返回0至15
小键盘的连接方式:(可以修改为自己的连接方式)
1 P2.7(7) -----15---14---13---12
十六进制: 77 7B 7D 7E
| | | |
2 P2.6(B) -----11---10---9----8
十六进制: B7 BB BD BE
| | | |
3 P2.5(D) -----7----6----5----4
十六进制: D7 DB DD DE
| | | |
4 P2.4(E) -----3----2----1----0
十六进制: E7 EB ED EE
| | | |
5 P2.3(7) ------ | | |
| | |
6 P2.2(B) ----------- | |
| |
7 P2.1(D) ---------------- |
|
8 P2.0(E) ---------------------
**********************************************************/
#include <REGX51.H>
/*组合键值码,每个值对应一个键按下*/
unsigned char code key_code[16]={
0xEE,0xED,0xEB,0xE7,
0xDE,0xDD,0xDB,0xD7,
0xBE,0xBD,0xBB,0xB7,
0x7E,0x7D,0x7B,0x77};
/*P2_4-P2_7扫描码*/
unsigned char code ksp[4]={0xEF,0xDF,0xBF,0x7F};
/* 时间延迟函数 */
void delay (void)
{
unsigned char i,j;
for (i=0;i<5;i++)
for(j=0;j<255;j++);
}
/**********************************************************
*键盘扫描函数
**********************************************************/
unsigned char keypad_scan()
{
unsigned char key,i;
P2=0xF0; //P2赋值11110000
while (P2!=0xF0); //如果P2不等于11110000,就说明有键按下.(等待按键按下)
do
{
for(i=0;i<=3;i++) //循环扫描4次
{
P2=ksp[i]; //依次赋值扫描码11101111,11011111,10111111,01111111
if(P2!=ksp[i]) //P2不等于以上4种状态就说明有键按下
{
delay(); //延时去抖动
key=P2; //读入P2的状态
if(key!=ksp[i]) //确定键是否真的按下
{
return(key); //返回扫描码
}
}
}
} while(1);
}
/**********************************************************
* 检查是否有按键按下
**********************************************************/
unsigned char gotkey()
{
unsigned char temp,i;
temp=keypad_scan();
for (i=0;i<=15;i++) //与键值码逐一比较直到相等就返回键的ID号(i),
{ //不相等就说明没有键按下,返回16.
if(temp==key_code[i])
return(i);
}
return(16);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -