0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用到电容充放电原理实现一条IO实现两个按键

0BFC_eet_china 来源:未知 作者:李倩 2018-03-26 08:39 次阅读

年前去到一个朋友那里,提到现在客户对成本要求非常之高,尤其是玩具行业,已经是一分一厘的去计算产品成本。朋友感慨为了省成本,方案商是绞尽脑汁地去想各种实现方法,说遇到过为了节省成本,硬是用单片机一条IO实现了两个按键的功能,让他颇为诧异,好久都没想明白原理。一条IO实现两个按键,听上去确实挺新奇,既然别人能够实现,我想我也应该可以做到,看来得找找实现的方法。

我有一个习惯,遇到某些问题的时候,会在睡觉前想解决方法,想着想着就会睡着了,问题的答案有没有找到则不一定。我知道有用一条IO实现多个按键的方法,这样的方法大多是选用的IO支持ADC功能,用电阻分压后通过读电压判断键值。如果IO不支持ADC功能,也不是不行,可以用电容充放电的方法实现ADC,从而用普通IO间接进行测量。(参见我之前关于键盘扫描的文章)这样用一条IO实现两个按键给我的第一感觉是可能需要利用到电容充放电原理,于是在半梦半醒之中找到了实现的方法。

先看上图左边部分,如果MCU_IO1为双向IO口,假设单片机程序按以下流程处理,看看会得到什么样的结果?

1.MCU_IO1设定为输出,输出高电平一段时间,此时电容C1会充电,最后C1上的电压接近电源电压。

2.MCU_IO1设定为输入,如果J1、J2均不按下,此时MCU_IO1可以理解成一个阻值很大的电阻接地,电容C1上的电荷会通过这个电阻逐渐释放掉,这样C1上的电压会逐渐降低到零。因为C1上的电压下降需要一个过程,当MCU_IO1设为输入后马上读一下MCU_IO1的状态,此时会读到什么结果?显然是高电平状态1。

3.再将MCU_IO1设定为输出,输出低电平一段时间,显然不管电容C1处于什么状态,只要MCU_IO1输出低电平时间足够长,最后C1上的电压应该接近零。

4.再将MCU_IO1设定为输入,如果J1、J2同样不按下,MCU_IO1读到的是低电平状态0。如果J1按下,再来看看这四步,此时电容C1已经被强制接到电源上,MCU_IO1对其的充放电已经不起作用,在步骤2中MCU_IO1读到的状态依然是1,但在步骤4中MCU_IO1读到的状态就不再是0,而是变为1。如果J2按下,同样看这四步,此时电容C1被强制接到地,MCU_IO1对其充放电也失去作用,在步骤2中MCU_IO1读到的状态变为0,但在步骤4中MCU_IO1读到的状态保持为1。到这里我想大家应该已经明白了实现方法,根据此四步中读到的MCU_IO1状态,就可以判断出J1、J2是否按下。

既然已经找到方法,是不是就万事大吉了呢?不然,我们还得回过头去看看此方法是不是足够可靠。如果J1按下,电容C1直接接到电源上,当MCU_IO1输出低时,MCU_IO1输出的低电平直接与电源短路,弄不好就会烧坏MCU_IO1,同理当J2按下时MCU_IO1输出高也存在同样的问题。还有比这更严重的问题,如果用户同时按下J1和J2,哈!居然是电源和地直接短路,这样的后果很可能就是整个产品的电源部分一股青烟了事,就别想产品还能不能工作了。

不用担心,看一看前面电路图中的右半部分,在开关J3和J4上分别串联了一个220欧的电阻,这个电路不管J3和J4如何按,都不会出现短路的情况,按前面的四个步骤即可判断出J3和J4有没有按下,不过如果J3和J4同时按下并不能进行识别判断。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IO
    IO
    +关注

    关注

    0

    文章

    396

    浏览量

    38508
  • adc
    adc
    +关注

    关注

    95

    文章

    5648

    浏览量

    539413

原文标题:用一条IO口实现两个按键功能

文章出处:【微信号:eet-china,微信公众号:电子工程专辑】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    示波器如何观察电容充放电慢过程

    如题,不知道该如何使用示波器观察电容充放电时候其端电压的大小变化,使用自动测量的时候,在屏幕上只显示一条直线,从小到大或者从大到小的上下升降。  不知道该改如何设定示波器
    发表于 05-05 22:16

    一条IO实现两个按键功能

    功能,也不是不行,可以用电容充放电的方法实现ADC,从而用普通IO间接进行测量。(参见我之前关于键盘扫描的文章)这样用一条
    发表于 08-29 10:41

    片机检测电容充放电

    如何利用单片机检测电容充放电的时间啊?单片机给端口固定输出方波,端口连接块铜片,摸上去就会
    发表于 07-12 15:19

    如何设计脉冲信号来控制2电容交替充放电的电路,通过绕线线圈放电两个电容放电的电流方向相反

    如图:Y1输出脉冲信号通过高低电平信号分别控制2电容交替充放电,当E1充电时,E2进行放电,电流从A1流向A2;当E2充电时,E1进行放电
    发表于 08-20 00:21

    开关电源如何利用电容充放电实现降压呢

    开关电源中利用电容充放电实现降压。在这里如果直使开关闭合会发现输出电压为6V,但是如果我们要使这种输出电压始终为5V,应该怎么做呢?其实在实际的开关电源电路中,真正用的不是这种手
    发表于 10-28 07:15

    电容充放电原理

    最近搭建了简单的振荡电路,直没有弄清楚其原理,就是因为对电容充放电没有弄清楚,电容
    发表于 11-12 07:32

    按键硬件消抖原理

    按键硬件消抖原理:利用电容充放电特性来实现,因为电容为储能元件。它端的电压不能出现突变,即有
    发表于 12-07 12:47

    如何实现两个按键控制系统呢

    ,浪费IO口,占据大量体积。所以,需要量才而用,买足系统需求的前提下,越精简越好。本篇将在上按键中断的基础上,实现两个
    发表于 01-19 07:57

    用TIM5去实现简单的电容触摸按键

    电容触摸按键实验——物联网创新实验室 2021.3.30Dashai’s products must be excellent实验目标:用 TIM5 的通道 2(PA1)来做输入捕获,并实现
    发表于 03-02 07:02

    基于充放电原理实现的微电容测量电路

    具有抗分布电容以及简单实用等特性的充放电电路是目前微电容测量中广泛采用的一种测量电路, 本文对基于充放电原理的微电容测量电路进行了深入研究,
    发表于 07-13 12:01 134次下载

    电容充放电 (详解教程)

    电容充放电电容经电阻充电,电容经电阻放电,RC电路的天然惰性时间常数,电容两端电压不能突变,
    发表于 09-22 09:36 693次下载

    基于充放电原理的电容式触摸按键设计

     为降低触摸按键的硬件成本, 设计了一种简易的触摸按键电路,其基本原理是通过检测RC回路的充放电时间来判断有无按键被按下,当未触碰按键
    发表于 11-24 18:46 190次下载
    基于<b class='flag-5'>充放电</b>原理的<b class='flag-5'>电容</b>式触摸<b class='flag-5'>按键</b>设计

    基于充放电原理的检测电路与电容式触摸按键的设计

    单片机的每两个1/0引脚构成一个充放电回路对,并为按键充放电,充电时引脚检测上升沿中断,放电时引脚检测下降沿中断,求出平均值,记录
    发表于 12-07 08:50 21次下载
    基于<b class='flag-5'>充放电</b>原理的检测电路与<b class='flag-5'>电容</b>式触摸<b class='flag-5'>按键</b>的设计

    一条IO实现两个按键功能

    ADC功能,用电阻分压后通过读电压判断键值。如果IO不支持ADC功能,也不是不行,可以用电容充放电的方法实现ADC,从而用普通IO间接进行测
    的头像 发表于 10-24 11:24 1.2w次阅读

    电容如何实现充放电、整流、滤波的功能?

    电容如何实现充放电、整流、滤波的功能? 电容是一种被广泛应用于电子电路中的被动元件,具有很多重要的功能,包括充放电、整流和滤波功能。在本文中
    的头像 发表于 02-03 17:50 1066次阅读