[经验分享] 只用一个IO口就可以检测多个按键

[复制链接]
4697|65
 楼主| macpherson 发表于 2025-5-14 11:01 | 显示全部楼层 |阅读模式
但是在一些场合,单片机的管脚有限的情况下(出于成本上考虑),并没有那么多的管脚去检测多个独立按键,那该怎么办?
采用ADC的方式,利用单片机内置的ADC来实现多个按键的检测,当然了,前提是单片机得内置ADC,实现原理图如下:
R1为限流电阻,R2,R3,R4为不同阻值的电阻,当相对应的按键被按下时,R1就和R2,R3,R4中的其中一个组成电阻分压,从而使ADC输出不同的电压值,这时候程序里面就可以通过采集回来的电压去判断那个按键被按下了。

kmzuaz 发表于 2025-5-15 10:59 | 显示全部楼层
通过在每个按键上串联不同阻值的电阻,当不同的按键被按下时,会在I/O口产生不同的电压值。
dspmana 发表于 2025-5-15 11:45 | 显示全部楼层
需要单片机有内置的ADC,电阻的精度要求较高。
ulystronglll 发表于 2025-5-15 12:25 | 显示全部楼层
TM1638等专用芯片              
1988020566 发表于 2025-5-15 12:57 | 显示全部楼层
将多个按键的一端共同连接到一个IO口(如P0),另一端分别通过二极管(防止按键短路)连接到不同的分压电阻。
minzisc 发表于 2025-5-15 13:44 | 显示全部楼层
通过串口或少量IO口与单片机通信,芯片内部完成多键检测和编码
beacherblack 发表于 2025-5-15 14:52 | 显示全部楼层
受电阻精度和AD分辨率限制              
deliahouse887 发表于 2025-5-15 15:35 | 显示全部楼层
通过按键产生不同数量的脉冲信号,单片机通过读取脉冲数量来判断哪个按键被按下
febgxu 发表于 2025-5-15 16:34 | 显示全部楼层
当不同的按键被按下时,I/O口会检测到不同的电压值,这些电压值可以通过ADC(模数转换器)读取并区分不同的按键。
i1mcu 发表于 2025-5-15 18:21 | 显示全部楼层
需精确计算分压电阻值,避免电平重叠;按键数量受ADC分辨率限制。
qiufengsd 发表于 2025-5-15 19:27 | 显示全部楼层
简单有效,不需要复杂的硬件。              
olivem55arlowe 发表于 2025-5-15 20:33 | 显示全部楼层
在IO口上并联电容,不同按键按下时电容充放电时间不同,通过检测充放电状态判断按键
backlugin 发表于 2025-5-15 22:38 | 显示全部楼层
通过不同电阻分压,将每个按键映射为不同的电压值。单片机通过AD采样IO口的电压,根据预设的电压范围判断按键状态
geraldbetty 发表于 2025-5-16 12:17 | 显示全部楼层
专用芯片法              
ulystronglll 发表于 2025-5-16 12:48 | 显示全部楼层
虽然通常用于多于一个IO口的情况,但在特定配置下也可用于仅用一个IO口进行操作。
updownq 发表于 2025-5-16 13:19 | 显示全部楼层
使用移位寄存器或多路复用器等              
pmp 发表于 2025-5-16 13:43 | 显示全部楼层
选择矩阵键盘              
everyrobin 发表于 2025-5-16 14:15 | 显示全部楼层
通过电阻分压网络,不同的按键按下会产生不同的电压值。单片机的ADC可以读取这些不同的电压值,从而判断哪个按键被按下。
usysm 发表于 2025-5-16 15:24 | 显示全部楼层
对电容和按键的稳定性要求高,易受干扰
nomomy 发表于 2025-5-16 16:15 | 显示全部楼层
矩阵键盘扫描的              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

1944

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部