"); //-->
在单片机的按键检测中,我们常用的方法有单个按键识别、矩阵键盘识别、专用芯片识别。那么能不能使用单个 IO口检测多个按键呢?答案是肯定的,下面分别描述。
1、单个按键识别
每个按键需要一个 IO口,此方式非常浪费单片机的 IO口。
图1.1 单个按键识别原理图
对于纯硬件电路,请增加按键去抖电路,有关内容移步: 。
2、采用矩阵键盘
当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。
M*N阵矩阵式按键至少也需(M+N)个I/O口,比如 4*4 共 16个按键的矩阵共需 8个 I/O口。
图2.1 矩阵键盘识别原理图
3、采用专用芯片
比如 TM1638,这款芯片使用的比较广泛,占用单片机的三个 IO口。除了可以检测按键外,还可以用来控制发光二极管。
图3.1 TM1638按键识别原理图
4、通过AD口识别按键
我们完全可以通过单片机的 AD口检测电压的不同,用来识别不同的按键,这种方法简单有效。
如下图4.1 所示,C1 用于消除按键的抖动。为了识别更多的按键,电阻的精度需达到 1% 或更高。无任何按键按下,AD口电压为 3.3V。
检测到某个按键的电压范围后,并不是马上响应,只有再次恢复到 3.3V 时再作响应,用于防止按键贴连。
图4.1 AD口采样原理图
不同的按键对应的 AD电压值如下表:
按键编号 | S1 | S2 | S3 | S4 | S5 |
电压值 | 2.533V | 2.269V | 1.65V | 1.115V | 0.3V |
对于没有 AD 转换功能的单片机,可采用一个 AD 转换器或者也可以考虑通过识别占空比的方法。
就是通过检测外中断的形式计算占空比,不再需要 ADC。这种按键后端电路处理与编程都被复杂化了,故不推荐使用,只是作为一种想法。
图4.2 通过占空比识别按键
道阻且长,行则将至。行而不辍,未来可期。觉得不错,动动发财的小手点个赞哦!也可以前往公众号获取更多资料,全网同号。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。