基于C语言的机械按键模块化软件开发(1)

前言

本系列是针对产品中机械按键模块功能的开发。拥有获取单次按下、获取单次释放、获取按键状态、获取按键故障状态等功能!

模块化程度高,移植性极强,只需修改相关配置项即可完成按键的开发。按键配置项包括个数配置、滤波时间配置等!

虽是针对机械按键的软件模块,软件也适用于其他类型的按键,比如触摸。只要提供获取按键的电平接口,此模块就适用!

本模块代码已经实现在多个产品上量产,用于国产上汽、长城、北汽等SUV的车型!整个项目的产品经过严格的测试,包括鲁棒性、一致性等软件性能!

(模块全代码获取方式,关注微信公号,发送switch)

关注微信公众号 (airX嵌入式),获取更多项目经验!

一、按键结构原理

 

按键其实就是个开关,按下去连通,释放就断开!

一般,有4个引脚的话,内部分为两组,两两相连,如下图右侧,引脚1、2内部相连,称为A侧;引脚3、4内部相连,称为B侧。正常情况下,A、B两侧是断开的,当按键按下时,A、B两侧导通。(至于为什么要4个脚不用2个脚这个可能跟结构有关,因为按键需要自动释放,可能需要结构的支持,本人不是学结构的只是猜测!哈哈)

                

下边以电阻上拉的接法为例,来分析下一个完整的按键动作。理想情况下,我们按下按键时,电平由高电平变为低电平;松开时,由低电平变为高电平,如下图所展示的波形。

 

而实际上,按键所用的开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,实际波形示意如下:

如果我们按键处理过程中,直接把高电平变为低电平作为一次有效按键的话,会引起一次按键被误读多次。

为了避免这种情况出现而作的措施称为按键消抖。抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。

按键消抖的方式,可以分为软件消抖和硬件消抖。

咱不管硬件消抖!软件滤波,有很多种,但是万变不离其宗就是一定时间内按键持续保持稳定就判定为稳定状态!

网上很多大都都是延时滤波,就是等段时间,然后再判断电平,个人觉得这个的很law,而且占cpu资源!此文给大家滤波方法可不用死等!

就是使用计数器来实现!

三、电路设计原理

在实际的应用中,按键最常用的接法,如下图,按键通过电阻拉高,按键所连接的IO引脚的输入为高电平,当有按键动作时,接地,引脚输入变为低电平。

注:关于上拉电阻R16:如果GPIO口支持内部上拉,那么可以直接使用内部上拉电阻。如果不支持,那么需要外部再焊电阻器件。要特别注意,如果使用单片机的内部上拉,在初始化时,要记得配置!

(模块全代码获取方式,关注微信公号,发送switch)

关注微信公众号 (airX嵌入式),获取更多项目经验!

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值