经典ADC按键电路,多个按键一个IO

注:如下内容学习于“电路啊”公众号!

一、电路原理

原理很简单,使用有ADC功能的CPU,用ADC侦测电压的大小来判断。

二、成品电路

经过量产验证的电路
以一个IO连接4个按键为例:
在这里插入图片描述
静电防护

  1. 用TVS管来做静电防护,见图中的D1、D2(图中实际使用的是比TVS管更便宜的压敏电阻,料号ICVL0518030FR),静电会被D1、D2导到地;
  2. 串接电阻R2、R8,阻止静电传导到主控芯片(由于ADC的输入阻抗很高,R2、R8对ADC电压侦测的影响可以忽略不计);

高频滤波、消抖
加入小容量电容来消除按键的抖动,滤除高频干扰;

三、进阶电路

以下的按键电路方案也是批量使用的方案,1个ADC连接8个按键:
在这里插入图片描述
这个电路的巧妙之处在于,按键具有优先级之分。假设按下了按键SW1,那么再按下SW2-SW8中的任何一个都是不起作用的,即SW1的优先级最高,SW2次之,以此类推。

在STM32单片机上,可以通过ADC(模数转换器)外部通道实现一个IO多个按键功能的程序。以下是一个实现示例: 首先,我们需要配置ADC的外部通道。使用STM32的外设库函数,将需要用作按键输入的IO引脚配置为模拟输入,并选择一个合适的ADC外部通道进行映射。 接下来,我们需要初始化ADC模块。设置ADC的工作模式、采样时间、转换分辨率等参数,并使能ADC模块。 在主循环中,我们可以使用ADC的外设库函数来进行模数转换。通过读取ADC的转换结果,我们可以得到IO引脚的模拟值。根据不同的模拟值,我们可以判断按键的当前状态。 例如,如果ADC转换结果为0~1000之间的值,我们可以将其定义为按键1按下的状态。如果转换结果为1000~2000之间的值,我们可以将其定义为按键2按下的状态,以此类推。 根据实际情况,我们可以通过增加额外的条件判断,来实现更复杂的按键功能。例如,可以设置一个超时计时器,当某个按键持续按下一段时间后,执行特定的操作。 最后,将按键状态对应的控制动作写入程序中,例如控制LED灯的开关、触发其他外设等。 需要注意的是,由于ADC是模数转换器,其转换精度和稳定性可能受到一些干扰。为了提高系统的稳定性和准确性,我们可以采取一些措施,如加入外部电源滤波电路、校准ADC输入电压等。 综上所述,通过配置ADC的外部通道,并利用ADC的转换结果来判断IO引脚的模拟值,我们可以实现单片机上的一个IO多个按键功能的程序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值