标题: 单片机IO口识别按键的接线方法 [打印本页]

作者: zhangwenan    时间: 2022-3-8 16:46
标题: 单片机IO口识别按键的接线方法
如题所示:打算用STM32单片机的IO口去识别按键是否被按下,按键如图所示:3个按键串联为1组,总共4组12个按键。要求用尽量少的IO口和外围器件去识别按键动作。我自己现在是要用8个按键,感觉还可以再减少,但是想不出来更好的方法了。

bc1eb823e664d3c4174833ef0180c0d.jpg (117.22 KB, 下载次数: 71)

bc1eb823e664d3c4174833ef0180c0d.jpg

作者: wulin    时间: 2022-3-8 21:13
12个按键3*4矩阵需要7个IO口
作者: lkc8210    时间: 2022-3-9 23:56
不加二极管只需6个IO



加二极管只需4个IO,但要消耗12颗二极管,不合算

原理是每次单片机只拉低一根脚
然后测量其它脚有没有被拉低


作者: glinfei    时间: 2022-3-10 08:56
lkc8210 发表于 2022-3-9 23:56
不加二极管只需6个IO

当年数理逻辑肯定学的好。
作者: lhomme    时间: 2022-3-10 09:32
矩阵扫描键盘 3*4 但不是你这样的接法
作者: hei512020    时间: 2022-3-10 14:33
如果按你图上画的3个一组,必须是4组的话,就可以用4个ADC口线引脚;每一组接一个STM32的ADC口线,每个按键上加上不同的电阻,根据采样电压不同,区分不同的按键;理论上一个ADC口线就可以接多个按键(理论上1个ADC口线就可以做出12个按键;当然要看看AD采样的精度和键与键之间的电压余量,尽可能的键与键之间余量多些,这样就不至于把键采集错误);
作者: 名字不是重点    时间: 2022-3-10 14:41
wulin 发表于 2022-3-8 21:13
12个按键3*4矩阵需要7个IO口

确切的说是3*(3+gnd),只要6个IO
作者: rundstedt    时间: 2022-3-10 17:50
串电阻用ADC识别,8个键用两个IO口就能实现。
作者: 铭鑫99    时间: 2022-3-11 14:32
矩阵键盘四乘三,这样不对

作者: chen_天天来    时间: 2022-3-11 17:43
用上个ADC口扫描,可以串到你不想要

Y8FPWR9A24@CJB@)Y%`USLP.png (50.17 KB, 下载次数: 58)

Y8FPWR9A24@CJB@)Y%`USLP.png

作者: wearefamily    时间: 2022-3-12 18:23
矩阵键盘四乘三
作者: 188610329    时间: 2022-3-13 15:04
在任何一个实际项目中, 按键应该都是最后考虑的东西, 因为实现方法太多了,应该根据实际有的资源,最后决定按键方案,你其他东西都设计好了,
还剩 12个以上IO 就什么都不要想,直接通通独立按键。
如果 还剩 4~6个IO 就用 板凳的方法,
如果 还剩 1个IO 并且,可以ADC 那么就用10楼的方法。
如果 没有剩余IO, 但是有用 TM1650 之类的 LED 驱动芯片,那么直接用 TM16系列LED芯片自带的 按键识别功能,就可以了。
包括IO复用方案,单IO无DAC,电容充放电方案,等等等等,方法很多很多,单纯的讨论按键实现方法,不考虑应用场景,来确定哪个方案好,没有太大的实际意义。
作者: 学mcu的菜鸡    时间: 2022-3-13 16:14
lkc8210 发表于 2022-3-9 23:56
不加二极管只需6个IO

大哥牛逼
作者: 学mcu的菜鸡    时间: 2022-3-13 16:15
188610329 发表于 2022-3-13 15:04
在任何一个实际项目中, 按键应该都是最后考虑的东西, 因为实现方法太多了,应该根据实际有的资源,最后决定 ...

长见识了!!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1