矩阵键盘是单片机入门绕不开的外设。4x4键盘16个键,要是每个键单独接一个IO口得占16个脚,太奢侈。矩阵接法把按键排成4行4列,行线4个脚、列线4个脚,8个IO就能管16个键,8x8矩阵能管64个键,IO利用率一下子上去了。代价是要靠扫描来识别按键,弄懂扫描原理,后面学键盘驱动、外部中断都轻松。
扫描的基本思路是行线做输出、列线做输入(反过来也行)。先把所有行线拉低,读列线,如果某列变成低电平,说明这一列上有键按下,但还不知道是哪一行;接着逐行输出低电平、其余行保持高,每输出一行读一次列线,哪一轮某列变低了,行号列号就都齐了,按键位置就是行列交点。整个过程几微秒一轮,主循环里轮询着跑就行。
实际写代码要处理两个经典问题。一个是抖动,机械按键按下瞬间触点会弹跳几毫秒,扫描到抖动会误判成多次按键,软件消抖就是检测到按键后延时10到20毫秒再确认一次,状态没变才算数,或者用状态机记按键的按下、消抖、保持、释放几个阶段,更稳。另一个是等待释放,按住不放要处理成长按还是只触发一次,得根据需求定,否则按一下可能连续输入一串字符。
进阶一点的玩法是中断加扫描。平时不让CPU轮询,把列线接外部中断,按键按下触发中断,中断里再启动扫描流程,这样主程序可以安心干别的,低功耗场景还能顺便让CPU睡觉。电脑键盘、PS/2键盘的逻辑也是相通的,学会矩阵扫描,看看协议手册就能上手。
硬件上还有几个细节。IO口要配置成上拉输入,或者外部加上拉电阻,悬空的输入脚电平不定,一按就乱跳。长线连接的矩阵键盘要考虑干扰,行线列线上串小电阻、软件里加二次确认都有帮助。商业产品里的薄膜键盘、电容触摸键盘把矩阵思想发扬光大了,触摸IC把扫描和消抖全做了,直接输出键值,但原理跟自己拿单片机扫4x4键盘是一脉相承的,入门练手非常合适。
上一篇:电感式接近开关怎么选:检测距离、频率和安装方式的工程经验
下一篇:没有了