[MCU] 大家知道这类复合按键是通过什么方式检测按键的吗

[复制链接]
4205|27
 楼主| zenghua520 发表于 2014-11-2 20:42 | 显示全部楼层 |阅读模式
这是种比较常用的IO复合使用方案,最近看了很多电路都出现过,刚开始的时候还以为是通过中断方式检测的,最近认真看了下竟然不太像,于是想了很多种可能,通过AD,还是扫描,,,最终都觉的不太靠谱,,各位同仁谁知道的,不不妨讨论下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ayb_ice 发表于 2014-11-3 08:07 | 显示全部楼层
输出就不用说了,都设置成推挽就可以了

按键输入:
PA2输入,PA1,PA3分别分时输出高,有键按下则PA2输入低,

但感觉这个下拉电阻10K大了点

 楼主| zenghua520 发表于 2014-11-3 10:32 | 显示全部楼层
ayb_ice 发表于 2014-11-3 08:07
输出就不用说了,都设置成推挽就可以了

按键输入:

我也是这么想的,但10K的肯定不合适逻辑,得出电压有点高,还有没有其他方法
ayb_ice 发表于 2014-11-3 11:02 | 显示全部楼层
方法肯定有,需要修改硬件设计
coody 发表于 2014-11-3 11:03 | 显示全部楼层
LZ这个 两个灯两个按键要用3个IO,而我一般用两个,就是一个IO驱动一个LED,读一个键。
 楼主| zenghua520 发表于 2014-11-3 11:40 | 显示全部楼层
ayb_ice 发表于 2014-11-3 11:02
方法肯定有,需要修改硬件设计

我是说不改的前提,就是搞不懂是通过什么方法实现的
 楼主| zenghua520 发表于 2014-11-3 11:42 | 显示全部楼层
coody 发表于 2014-11-3 11:03
LZ这个 两个灯两个按键要用3个IO,而我一般用两个,就是一个IO驱动一个LED,读一个键。 ...

呵呵不是的有好多个按键的,我只是画了部分,
 楼主| zenghua520 发表于 2014-11-3 11:53 | 显示全部楼层
zenghua520 发表于 2014-11-3 11:40
我是说不改的前提,就是搞不懂是通过什么方法实现的

难道只有使用AD功能了吗,有没有那种可以检测电压变动的产生中断的单片机,不是外部边沿触发的那种,因为不可能有那么多外中断,而且电路不合理10K太大了,
受不了了 发表于 2014-11-3 11:53 | 显示全部楼层
以前有网友弄过就几个口子实现几十个按键的,通过各种组合,好几年前的帖子,不好找了
 楼主| zenghua520 发表于 2014-11-3 12:00 | 显示全部楼层
受不了了 发表于 2014-11-3 11:53
以前有网友弄过就几个口子实现几十个按键的,通过各种组合,好几年前的帖子,不好找了 ...

那些方法我知道,有通过电容冲放电的,有通过琢级排除的,但那些真正用的比较少的。我主要想了解这种方法是怎么实现的。
zwz7219 发表于 2014-11-3 14:15 | 显示全部楼层
就是普通的IO口,需要检测按键时,PA2置高电平,PA1和PA3由推挽输出改为输入端口,同时打开内部上拉(或者内部上拉自动打开),内部上拉电阻一般为100K至200K左右,因此按下S1或S2时,PA1或PA3将变成低电平,由此鉴别出哪个按键被按。检测按键完成后,PA2输出低电平,然后,恢复PA1和PA3的推挽输出方式,根据需要输出高电平或低电平,执行LED驱动任务。
ayb_ice 发表于 2014-11-3 14:38 | 显示全部楼层
改进一下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
lu50211 发表于 2014-11-3 14:49 | 显示全部楼层
本帖最后由 lu50211 于 2014-11-3 14:54 编辑

其实不用,做输出时PA2输出低电平,PA1,PA2输出高电平,当做输入时,把PA1,PA3设置成带上拉输入,PA2不动,但是要输出高电平,这样才能使LED灯不不会在PA1,PA3的上拉电压点亮。检测完按键后,再恢复为PA1-PA3设置为输出。不过PA1,PA3的电阻用4。7K有点大,可以改成470-1K左右的电阻就OK了


设置pa2为输出;
使能pa2 = 1;
设置pa1,pa3为上拉输入;
清临时键值;

假如pa1为低电平,则K1键按下,保存临时键值,
假如pa3为低电平,则K2键按下,保存临时键值,

设置pa1,pa3为输出;



ayb_ice 发表于 2014-11-3 14:54 | 显示全部楼层
LZ的图应该也是可行的

因为现在的MCU一般都有内部上拉,而且一般也在几十K左右
lu50211 发表于 2014-11-3 14:58 | 显示全部楼层
ayb_ice 发表于 2014-11-3 14:38
改进一下

这个电路有一个问题,在公共端接限流电阻,当两个灯同时亮和只有一个灯亮时,灯的亮度不一致。
ayb_ice 发表于 2014-11-3 15:23 | 显示全部楼层
lu50211 发表于 2014-11-3 14:58
这个电路有一个问题,在公共端接限流电阻,当两个灯同时亮和只有一个灯亮时,灯的亮度不一致。 ...

本来是考虑不同时控制的,

如果需要同时控制,稍修改下就可以了
 楼主| zenghua520 发表于 2014-11-3 15:29 | 显示全部楼层
zwz7219 发表于 2014-11-3 14:15
就是普通的IO口,需要检测按键时,PA2置高电平,PA1和PA3由推挽输出改为输入端口,同时打开内部上拉(或者内部上 ...

上拉电阻有那么大吗,如果有就可以呵呵
 楼主| zenghua520 发表于 2014-11-3 15:34 | 显示全部楼层
ayb_ice 发表于 2014-11-3 14:38
改进一下

嗯嗯,记得上拉电阻都是十K的吧,电压是5V的,我是想问按我的那个图他是怎么实现按键检测的:P
ayb_ice 发表于 2014-11-3 15:48 | 显示全部楼层
本帖最后由 ayb_ice 于 2014-11-3 15:55 编辑
zenghua520 发表于 2014-11-3 15:34
嗯嗯,记得上拉电阻都是十K的吧,电压是5V的,我是想问按我的那个图他是怎么实现按键检测的 ...

中间输出高,关闭LED

PA1,PA3输入上拉,有按键按下则PA1,PA3输入低,否则输入高

我前面的方法是错的
 楼主| zenghua520 发表于 2014-11-3 15:49 | 显示全部楼层
lu50211 发表于 2014-11-3 14:49
其实不用,做输出时PA2输出低电平,PA1,PA2输出高电平,当做输入时,把PA1,PA3设置成带上拉输入,PA2不动 ...

按这样说4.7K也不是关键点,主要还是10K电阻,如果10K改小也许可以,但我不是考虑怎么改电路,方法肯定很多的,呵呵,大家都可能没明白我的意思,这是个通过了的方案,都投产成千上万了的产品了,当然这是电路中的一部分,我只是搞不清楚这个电路是通过什么方式检测按键的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

26

帖子

0

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