一共16个按键,一种是一个一个的测,也就是要使用16个GPIO
还有一种是分别进行列扫描与行扫描,再定位按下的按键
4*4矩阵键盘,按键检测通常使用循环检测;固定周期下去检测是否有按键按下
最好是将8个IO口接到一个Port口上,方便编程,方法是
(1)循环行输出高电平,其余为低电平
(2)检测列高电平,判断相应按键触发
行列反过来,或电平反过来都可以
成品的矩阵键盘一般都是8个端口或者12个端口或,要具体看手册,其上一般有扫描处理要求信息。这两种不同的类型扫描程序也不同。
用的最多的是8个端口的,一般4个行线,4个列线,分别行线输出状态,列线预拉到反状态进行接收;然后列线输出状态,行线预拉到反状态进行接收,两次接收情况综合就可以判断哪些键被按下(导通了),这种方法支持同时按下多个键检测,不过状态值就比较复杂、比较多啦,有16bit啦。
4*4按键矩阵扫描,分为四个行和四个列,四个行作为IO输入,并且上拉到VCC,四个列IO作为输出,默认输出低电平,当有按键按下是行和列交叉接通,按键按下的所在行变为低电平,此时就可以知道是哪一行被按下了。接下来在列输出三个高和一个低电平比如1110,如果此时读取行信息中有低电平,说明列输出的0所在列为按键所在列,这样就知道按键的列信息了。知道了行列信息就可以唯一确定按键了。
最好的方法就是加一片串行转并行的芯片,比如74HC595这种,然后用IO口模拟I2C去驱动,这样只需要两个IO口就可以扫描这个4*4矩阵键盘了
这样做唯一缺陷就是实时性不足,由于用的轮询方法,需要隔一段时间扫描一次,而且51的IO翻转速度比较慢,用模拟I2C也需要消耗时间