找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6732|回复: 2
打印 上一主题 下一主题
收起左侧

用一个单片机IO口实现两个按键功能

[复制链接]
跳转到指定楼层
楼主
年前去到一个朋友那里,提到现在客户对成本要求非常之高,尤其是玩具行业,已经是一分一厘的去计算产品成本。朋友感慨为了省成本,方案商是绞尽脑汁地去想各种实现方法,说遇到过为了节省成本,硬是用单片机一条IO实现了两个按键的功能,让他颇为诧异,好久都没想明白原理。
一条IO实现两个按键,听上去确实挺新奇,既然别人能够实现,我想我也应该可以做到,看来得找找实现的方法。我有一个习惯,遇到某些问题的时候,会在睡觉前想解决方法,想着想着就会睡着了,问题的答案有没有找到则不一定。
我知道有用一条IO实现多个按键的方法,这样的方法大多是选用的IO支持ADC功能,用电阻分压后通过读电压判断键值。如果IO不支持ADC功能,也不是不行,可以用电容充放电的方法实现ADC,从而用普通IO间接进行测量
这样用一条IO实现两个按键给我的第一感觉是可能需要利用到电容充放电原理,于是在半梦半醒之中找到了实现的方法。先看下图左边部分,如果MCU_IO1为双向IO口,假设单片机程序按以下流程处理,看看会得到什么样的结果?
1.MCU_IO1
设定为输出,输出高电平一段时间,此时电容C1会充电,最后C1上的电压接近电源电压。
2.MCU_IO1
设定为输入,如果J1J2均不按下,此时MCU_IO1可以理解成一个阻值很大的电阻接地,电容C1上的电荷会通过这个电阻逐渐释放掉,这样C1上的电压会逐渐降低到零。因为C1上的电压下降需要一个过程,当MCU_IO1设为输入后马上读一下MCU_IO1的状态,此时会读到什么结果?显然是高电平状态1
3.
再将MCU_IO1设定为输出,输出低电平一段时间,显然不管电容C1处于什么状态,只要MCU_IO1输出低电平时间足够长,最后C1上的电压应该接近零。
4.
再将MCU_IO1设定为输入,如果J1J2同样不按下,MCU_IO1读到的是低电平状态0
如果J1按下,再来看看这四步,此时电容C1已经被强制接到电源上,MCU_IO1对其的充放电已经不起作用,在步骤2MCU_IO1读到的状态依然是1,但在步骤4MCU_IO1读到的状态就不再是0,而是变为1
如果J2按下,同样看这四步,此时电容C1被强制接到地,MCU_IO1对其充放电也失去作用,在步骤2MCU_IO1读到的状态变为0,但在步骤4MCU_IO1读到的状态保持为1
到这里我想大家应该已经明白了实现方法,根据此四步中读到的MCU_IO1状态,就可以判断出J1J2是否按下。
既然已经找到方法,是不是就万事大吉了呢?不然,我们还得回过头去看看此方法是不是足够可靠。如果J1按下,电容C1直接接到电源上,当MCU_IO1输出低时,MCU_IO1输出的低电平直接与电源短路,弄不好就会烧坏MCU_IO1,同理当J2按下时MCU_IO1输出高也存在同样的问题。
还有比这更严重的问题,如果用户同时按下J1J2,哈!居然是电源和地直接短路,这样的后果很可能就是整个产品的电源部分一股青烟了事,就别想产品还能不能工作了。
不用担心,看一看前面电路图中的右半部分,在开关J3J4上分别串联了一个220欧的电阻,这个电路不管J3J4如何按,都不会出现短路的情况,按前面的四个步骤即可判断出J3J4有没有按下,不过如果J3J4同时按下并不能进行识别判断。

按键.jpg (6.76 KB, 下载次数: 74)

按键.jpg

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:142059 发表于 2018-6-29 23:35 | 只看该作者
其实你只要选择一个内部带adc的mcu,一个io可以扩展无数个按键

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:358093 发表于 2018-7-17 19:13 | 只看该作者
Angle145 发表于 2018-6-29 23:35
其实你只要选择一个内部带adc的mcu,一个io可以扩展无数个按键

主要是基于成本的考虑,有时客户会为了2分钱,对整个电路的架构做大幅度的改动.何况带AD的芯片每个AD口会增加0.1元左右的成本.对于玩具这种超大量的消耗类电子产品,能降低0.1元成本是很可观的.

评分

参与人数 1黑币 +70 收起 理由
admin + 70 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表