新闻  |   论坛  |   博客  |   在线研讨会
单个IO口检测多个按键
liht1634 | 2025-10-02 08:53:20    阅读:59   发布文章

在单片机的按键检测中,我们常用的方法有单个按键识别矩阵键盘识别专用芯片识别。那么能不能使用单个 IO口检测多个按键呢?答案是肯定的,下面分别描述。

1、单个按键识别

每个按键需要一个 IO口,此方式非常浪费单片机的 IO口。

1.png

图1.1 单个按键识别原理图

对于纯硬件电路,请增加按键去抖电路,有关内容移步:按键的弹跳与去抖动电路

2、采用矩阵键盘

当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。

M*N阵矩阵式按键至少也需(M+N)个I/O口,比如 4*4 共 16个按键的矩阵共需 8个 I/O口。

2.png

图2.1 矩阵键盘识别原理图

3、采用专用芯片

比如 TM1638,这款芯片使用的比较广泛,占用单片机的三个 IO口。除了可以检测按键外,还可以用来控制发光二极管。

3.png

图3.1 TM1638按键识别原理图

4、通过AD口识别按键

我们完全可以通过单片机的 AD口检测电压的不同,用来识别不同的按键,这种方法简单有效

如下图4.1 所示,C1 用于消除按键的抖动。为了识别更多的按键,电阻的精度需达到 1% 或更高。无任何按键按下,AD口电压为 3.3V。

检测到某个按键的电压范围后,并不是马上响应,只有再次恢复到 3.3V 时再作响应,用于防止按键贴连。

4.gif

图4.1 AD口采样原理图

不同的按键对应的 AD电压值如下表:

按键编号S1S2S3S4S5
电压值2.533V2.269V1.65V1.115V0.3V

对于没有 AD 转换功能的单片机,可采用一个 AD 转换器或者也可以考虑通过识别占空比的方法。

就是通过检测外中断的形式计算占空比,不再需要 ADC。这种按键后端电路处理与编程都被复杂化了,故不推荐使用,只是作为一种想法。

5.gif

图4.2 通过占空比识别按键


道阻且长,行则将至。行而不辍,未来可期。觉得不错,动动发财的小手点个赞哦!也可以前往公众号获取更多资料,全网同号。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
分享硬件电路设计(原理图分析、PCB绘制、模拟仿真),电子元件,EMC整改,单片机与PLC等,以及与此相关的工科知识。
推荐文章
最近访客