【MCU】用精妙方案解决按键端口太少问题

1、聊一聊

     青春的味道,便一直在自己的歌单中!

2、正文部分

1

需求 

    对于一些小型低成本的产品所使用的的MCU都会选用较少管脚的封装,一方面可以缩小产品的体积,同时还可以减低产品的成本。

    所以这样的产品对MCU资源的压榨就尤为体现工程师们的经验和能力了,但是一款好的产品随着时间和市场的检验,终究逃不掉功能上的升级和客户需求的增加。

    而按键作为一种与用户交互的重要部分,在进行产品升级换代中难免会遇到按键资源不够的问题,那么如何扩展按键资源就成为了一个比较常见的问题,目前常用的有如下两种方案 : 

2

外部扩展芯片

    这种算是最容易想到的一种IO扩展的方案,通过串行线与扩展芯片通信,从而控制扩展芯片多个输入输出口。

    比如远程IO扩展芯片CH423,该芯片可以支持8 个双向输入输出引脚和 16 个通用输出引脚,并且还支持输入电平变化中断。

此图源于CH423 中文手册

    我们只需要通过MCU的IIC外设或者模拟IIC与CH423进行通信,从而对该芯片进行写入与读取即可完成IO口的读写,实现了IO的扩展需求。

    使用CH423外扩主要的缺点是成本太高,对于低端产品或许用一块这样的芯片就可以换一块更好的主控芯片。

    另外一种比较便宜点的方法是采用串转并,并转串的移位芯片,比如74HC165(数据从并转串)、74HC595(数据从串转并);当然如果需要数据锁存就需要锁存器来进行搭建如74HC574等等。

    采用芯片扩展终究还是会使得电路板的体积变大,甚至还需要硬件工程师花更多的时间设计电路等,当然芯片扩展也是有其优点的,能让主控MCU与外界隔离,从而起到保护MCU的作用等等。

3

AD按键

    一个好的思想往往能够解决一系列的问题,对于MCU而言按键的变化无非就是改变了电平的状态,如果我们把按键看成一个整体,对于MCU而言其就相当于一个传感器,所以我们可以把按键进一步抽象成一个整体,通过设计电路使得按键的状态变化体现在一个模拟量上来,MCU通过AD转换从而形成一一映射关系得以检测。

分析一下:

以上通过按键按下改变电路,从而形成不同的阻值的下拉电阻,比如当K1按下ADC直接到地,从而检测为0V,当K2按下R1和R2形成串联分压,从而此时ADC检测出来为3.3V/2,依次类推即可检测出各个按键的状态。

然而细心的读者应该会想到,这样的电路似乎不支持多个按键按下的检测吧。比如当K1和K2同时按下,这样ADC直接链接到地,从而无论如何检测出来还是0V。于是bug菌画了如下电路,供大家参考:

3、结束语

    好了,这里是公众号:“最后一个bug”,一个为大家打造的技术知识提升基地,您的"点赞""转发"都是对我最大的支持。

推荐好文  点击蓝色字体即可跳转

【开源】bug菌把"动态数字显示"开源了!

【MCU】可怕,别人把我MCU固件给反汇编了!(逆向)

☞ 【神器】这三款网络抓包工具在手,同事想甩锅都难!

☞ 【典藏】自制小型GUI界面框架(设计思想篇)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值