硬件连接
如图,4*4矩阵键盘需要接8个IO引脚。
通过行列分别扫描的方法,得出键值。
软件设计
/*******************************************************
* 函 数 名 : key_scan
* 函数功能 : 返回矩阵键盘被按下的键值
* 输 入 : 无
* 输 出 : 键值(1~16),无键按下时返回0
********************************************************/
unsigned char key_scan(void)
{
unsigned char hang = 0, lie = 0;
unsigned char keyvalue = 0;
// 第1回合第1步
KEY = 0x0f; // 从IO口输出,写IO口
if (KEY != 0x0f) // 从IO口输入,读IO口
{
// 读出的不是0x0f说明有按键被按下
// 第1回合第2步:读出端口从读出值来判断是哪一行
delay10ms();
// 第一回合中算出行号
switch (KEY)
{
case 0x0e: hang = 1; break;
case 0x0d: hang = 2; break;
case 0x0b: hang = 3; break;
case 0x07: hang = 4; break;
default: break;
}
// 第2回合第1步
KEY = 0xf0;
if (KEY != 0xf0)
{
switch (KEY)
{
case 0xe0: lie = 1; break;
case 0xd0: lie = 2; break;
case 0xb0: lie = 3; break;
case 0x70: lie = 4; break;
default: break;
}
// 经过2个回合后hang和lie都知道了,然后根据hang和lie去计算键值即可
keyvalue = (hang - 1) * 4 + lie;
return keyvalue;
}
}
return 0;
}
注:矩阵键盘不能同时按下两个按键。