8 x 8 (或A x B?) 矩阵按键 按键处理 单击&长按
目录:【虹星宝典】记录单片机学习之旅——目录
注:从本例程起,使用USB-CDC模式进行程序下载。
矩阵按键原理

以这个8x8的矩阵按键为例:

如何实现64个按键的扫描?
试想一下,当我们给KA通电时,对K1-K8的状态进行读取,如果有按键按下,那么对应的端口就会由低电平变成高电平,由此即可判断哪一个按键按下了。
如此反复对K1-KH端口置高电平,读取K1-K8端口的状态,便可以实现8x8矩阵按键的扫描,一般会对置高电平的端口配置为推挽输出模式,对读取的端口设置为高阻输入+下拉的模式。
如此便可写一个扫描按键是否按下的函数,对与N x N的矩阵按键原理也是大同小异的。


如何实现按键状态的判断?
一般的,按键分为 ”未按下“ ”消抖“ ”单击“ ”长按“等多种状态,为了更好的区分当按键按下时处于什么状态,确定一个时基便十分重要了,例如我以10ms为一次扫描时间间隔基准,即每10ms扫描一次按键状态,并保存这个按键按下的时长,通过判断按下的时长,即可推断出按键为何种状态。
案例中以按下到松开的时长在2s内时,判断为单击动作。按下超过2s时,判断为长按动作。

实例展示(仅展示部分代码)
这里以10ms作为扫描时基,如果A1为单击操作则打印“A1 Press!”,其他按键同理。

演示视频: