打印
[MCU]

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

[复制链接]
3311|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
这是种比较常用的IO复合使用方案,最近看了很多电路都出现过,刚开始的时候还以为是通过中断方式检测的,最近认真看了下竟然不太像,于是想了很多种可能,通过AD,还是扫描,,,最终都觉的不太靠谱,,各位同仁谁知道的,不不妨讨论下

360截图20141102201853718.jpg (18.15 KB )

LED跟按键复合使用

LED跟按键复合使用

相关帖子

沙发
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 | 只看该作者
方法肯定有,需要修改硬件设计

使用特权

评论回复
5
coody| | 2014-11-3 11:03 | 只看该作者
LZ这个 两个灯两个按键要用3个IO,而我一般用两个,就是一个IO驱动一个LED,读一个键。

使用特权

评论回复
6
zenghua520|  楼主 | 2014-11-3 11:40 | 只看该作者
ayb_ice 发表于 2014-11-3 11:02
方法肯定有,需要修改硬件设计

我是说不改的前提,就是搞不懂是通过什么方法实现的

使用特权

评论回复
7
zenghua520|  楼主 | 2014-11-3 11:42 | 只看该作者
coody 发表于 2014-11-3 11:03
LZ这个 两个灯两个按键要用3个IO,而我一般用两个,就是一个IO驱动一个LED,读一个键。 ...

呵呵不是的有好多个按键的,我只是画了部分,

使用特权

评论回复
8
zenghua520|  楼主 | 2014-11-3 11:53 | 只看该作者
zenghua520 发表于 2014-11-3 11:40
我是说不改的前提,就是搞不懂是通过什么方法实现的

难道只有使用AD功能了吗,有没有那种可以检测电压变动的产生中断的单片机,不是外部边沿触发的那种,因为不可能有那么多外中断,而且电路不合理10K太大了,

使用特权

评论回复
9
受不了了| | 2014-11-3 11:53 | 只看该作者
以前有网友弄过就几个口子实现几十个按键的,通过各种组合,好几年前的帖子,不好找了

使用特权

评论回复
10
zenghua520|  楼主 | 2014-11-3 12:00 | 只看该作者
受不了了 发表于 2014-11-3 11:53
以前有网友弄过就几个口子实现几十个按键的,通过各种组合,好几年前的帖子,不好找了 ...

那些方法我知道,有通过电容冲放电的,有通过琢级排除的,但那些真正用的比较少的。我主要想了解这种方法是怎么实现的。

使用特权

评论回复
11
zwz7219| | 2014-11-3 14:15 | 只看该作者
就是普通的IO口,需要检测按键时,PA2置高电平,PA1和PA3由推挽输出改为输入端口,同时打开内部上拉(或者内部上拉自动打开),内部上拉电阻一般为100K至200K左右,因此按下S1或S2时,PA1或PA3将变成低电平,由此鉴别出哪个按键被按。检测按键完成后,PA2输出低电平,然后,恢复PA1和PA3的推挽输出方式,根据需要输出高电平或低电平,执行LED驱动任务。

使用特权

评论回复
12
ayb_ice| | 2014-11-3 14:38 | 只看该作者
改进一下

按键.PNG (21.49 KB )

按键.PNG

使用特权

评论回复
13
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为输出;



使用特权

评论回复
14
ayb_ice| | 2014-11-3 14:54 | 只看该作者
LZ的图应该也是可行的

因为现在的MCU一般都有内部上拉,而且一般也在几十K左右

使用特权

评论回复
15
lu50211| | 2014-11-3 14:58 | 只看该作者
ayb_ice 发表于 2014-11-3 14:38
改进一下

这个电路有一个问题,在公共端接限流电阻,当两个灯同时亮和只有一个灯亮时,灯的亮度不一致。

使用特权

评论回复
16
ayb_ice| | 2014-11-3 15:23 | 只看该作者
lu50211 发表于 2014-11-3 14:58
这个电路有一个问题,在公共端接限流电阻,当两个灯同时亮和只有一个灯亮时,灯的亮度不一致。 ...

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

如果需要同时控制,稍修改下就可以了

使用特权

评论回复
17
zenghua520|  楼主 | 2014-11-3 15:29 | 只看该作者
zwz7219 发表于 2014-11-3 14:15
就是普通的IO口,需要检测按键时,PA2置高电平,PA1和PA3由推挽输出改为输入端口,同时打开内部上拉(或者内部上 ...

上拉电阻有那么大吗,如果有就可以呵呵

使用特权

评论回复
18
zenghua520|  楼主 | 2014-11-3 15:34 | 只看该作者
ayb_ice 发表于 2014-11-3 14:38
改进一下

嗯嗯,记得上拉电阻都是十K的吧,电压是5V的,我是想问按我的那个图他是怎么实现按键检测的:P

使用特权

评论回复
19
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输入低,否则输入高

我前面的方法是错的

使用特权

评论回复
20
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

粉丝