前言:
按键作为常用的输入部分,是常用的单片机外接模块。如密码锁,计算器,等。常用的独立按键和矩阵按键,编程原理很简单,只需要普通的单片机IO口即可实现。如果要输入数字,字母,用独立按键就需要较多IO,此时就是矩阵按键的领域了。最常用的矩阵按键是4X4矩阵按键,需要8个IO口,能检测出16个按键,每个按键对应一个按键值,或者按键值可以切换(某个按键设为切换按键)但是切换次数过多,不利于使用体验。升级一点,把矩阵按键当成普通按键,可以检测单击,双击,长按等操作,实现输入多值。
回归主题,本文章讨论的是3个IO口检测21个按键

10年前的帖子
3IO检测21按键原理图

原理图
电路图是以二极管为中心,21个按键,一部分是接在GND和三极管节点之间,另一部分按键两端均接在二极管节点之间。
特别说明L1,L3,L5为3个IO口连接点。
要区分出不同的按键,这些按键肯定是不同的。上图也是按照按键按下后的效果进行分类的。
大体上分两种,
第一种(直接检测)
按下某个按键,使某个IO口为低电平,使某两个IO口为低电平,(3个IO口低电平,本图暂未使用,不划算,需要再加三个二极管)
第二种(主动拉低检测)
一个IO口写0,拉低另外一个,
两个IO口通过按键短接
一个IO口拉低两个IO口
两个IO口均拉低一个IO口
程序代码截图
定义变量
前6个按键检测
后15个按键的检测
后15个按键区分
主要扫描函数