矩阵按键扫描的实现原理

描述

之前做过很多仿真仪表盒,经常遇到盒子上既有大量LED指示灯,又有很多按键的情况,主芯片使用的SiliconLabs的一款单片机,管脚资源有限,如何应对如此多的指示灯和按键呢?当时选用了max7219来实现多个LED灯的控制,而按键则是通过矩阵扫描实现的。

所谓“矩阵扫描”,可以想象成是把几路IO横竖交叉形成网格状,然后把按键放置在网格的交叉点上。这种电路应用很广泛,可以由较少的IO口实现较多的按键控制。比如,6根IO按照3行3列排列,就可以实现接入9个按键;8根IO按照4行4列排列,就可以实现接入16个按键。来看下面这个3*3的矩阵按键原理图:

矩阵按键

3*3矩阵按键1

注意,中间那四个行、列交叉地方的线是分离的,并没有短接:
 

矩阵按键

3*3矩阵按键2

还要注意的是,我们要给行或列IO加上上拉电阻,以保证它们的默认状态是高电平。

矩阵按键扫描的实现原理是这样的:把属于列的IO口设置为输入状态,这时由于上拉电阻的作用,当按键没有动作时,程序就会读到高电平;这时开始按行进行扫描,先把行1的IO设置为输出状态,然后设置输出为低电平,接着依次读取列IO口的状态,如果有按键被按下,那么列IO口的读入电平就变成低电平,这时就可以根据行和列判断出动作按键的位置了。行1的扫描完成后,把行1的IO置高,然后按照上面步骤依次进行行2和行3的扫描,确认有动作按键的位置就可以了。下面是程序的简单流程图(没有包含去抖等处理):

矩阵按键

简单扫描按键流程图

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分