3.8 数码管显示4×4键盘矩阵按键 |
|
当按键较多时会占用更多的控制器端口,为减少对端口的占用,图3-8所示电路中使用了4×4键盘矩阵,大大减少了对单片机端口的占用,但识别按键的代码比独立按键的代码要复杂一些。程序运行过程按下不同按键时,其键值将显示在数码管上。
图3-8 数码管显示4×4键盘矩阵按键电路
图中键盘矩阵行线R0~R3连接P1.4~P1.7,列线C0~C3连接P1.0~P1.3,扫描过程如下:
程序首先判断是否有键按下。为判断16个按键中是否有键按下,程序首先在4条行线输出0000,4条列线上输出1111,即P1端口输出0x0F。如果有任意一个键按下,则4条列线上的1111中必有一位变为0,P1端口读取的值将由0x0F,即00001111变成0000XXXX,X中有1个为0,3个仍为1,所有4种可能的值为0x0E、0x0D、0x0B、0x07,由这四个不同的值可知按键分别发生的0~3列。
得到列号后,再执行相反的操作,在4条列线输出0000,4条行线上输出1111,即P1端口输出0xF0。如果有任意一个按键按下,则4条行线上的1111中必有一位变为0,P1端口读取的值将由0xF0,即11110000变成XXXX0000,X中有1个为0,3个仍为1,所有4种可能的值为0xE0、0xD0、0xB0、0x70,由这4个不同的值可知按键分别发生的0~3行。
根据当前按键操作所在的列号及行号即可很容易得到按键值0~F。
① 将键盘矩阵改接在P2端口,编程实现矩阵扫描及键值显示。
② 将键盘矩阵行线连接端口低4位,列线连接高4位,编程实现矩阵扫描及键值显示。