原创 多功能按键嵌入式程序设计

2020-9-2 14:40 5144 33 11 分类: MCU/ 嵌入式 文集: 嵌入式程序设计

1. 按键算法简介

这是一种多功能按键的嵌入式程序设计算法,它支持按键检测规则可配、多种按键事件和最大32数量的按键检测,该算法首先是通过读取芯片管脚IO电平的变化,再经过滤波和自定义规则算法输出按键事件,最终达到用户所需要功能的目的。如在单一按键中,可以有单击、双击、三击、短按、长按和超长按等事件,不同的事件可以自定义不同的功能。用户通过简单的初始化GPIO再加上按键检测算法,就容易实现按键多功能。它的应用场合,如TWS耳机、助听器、电子手表、单按键智能插座和智能灯控面板等。

1.1. 按键规则设计

按键检测规则如下:

名称

英文

范围(ms)

设置值

长按

Long press

0-12000

1500

超长按

Long Long press

0-12000

4000

超超长按

Long Long Long press

0-12000

8000

双击

Double Press

0-1000

600

三击

Triple Press

0-1000

800

重复时间间隔

repeat rate

0-1000

400

滤波次数

Number Of Filter

0-255

2

检测周期

Checks Cycle

0-255

20

按键执行

Key Active

LOW:低电平有效,需要配置成上拉

HIGHT: 高电平有效,需要配置成下拉

LOW低电平有效

1.2. 按键事件类型

按键事件类型如下:

名称

英文

备注

单击

KEY_TYPE_SINGLE

 

双击

KEY_TYPE_DOUBLE

 

三击

KEY_TYPE_TRIPLE

 

短按

KEY_TYPE_LONG

 

短按_释放

KEY_TYPE_LONG

 

长按

KEY_TYPE_LONG

 

长按_释放

KEY_TYPE_LONG_RELEASE

 

超长按

KEY_TYPE_VLONG

 

超长按_释放

KEY_TYPE_VLONG_RELEASE

 

超超长按

KEY_TYPE_VVLONG

 

超超长按_释放

KEY_TYPE_VVLONG_RELEASE

 

 

 

 

2. 程序展示

按键检测首先要对按键进行编号,按键序号码:第一个按键为KEY1,第二个按键为KEY2,第三个按键为KEY3,若需要有更多按键可以往上加KEY4KEY5...KEYnn<=31。按键序号在按键输入和输出事件启到指定按键。在程序设计中做一个枚举结构如下:

enum

{

    KEY1=0,

    KEY2,

    KEY3

};

2.1. 按键检测初始化

初始化需要预先初始化mark,告诉算法需要检测按键的序号,检测规则需改变,可以使用规则参数配置的结构体赋值,调用void Button_SetKeyConfig(BUT_cfg_t KeyConfig)函数,将参数传递进去。如果按照默认参数,就不需要重新初始化。

2.2. 按键GPIO高低电平采样 

tKey_code0-31(bit),其中KEY1为第0bit,它的值是BUTTON1_DIO管脚高低电平的值,0为低电平,1为高电平。所以表达式为tKey |= 管脚电平状态?(1UL<同理第二管脚,第三管脚都是一样的表达式,只需向后累加既可,tKey的值为最终采样的值。

2.3. 按键检测处理 

按键检测处理函数,按照流程:读取按键值----->自定义规则检测---->读取按键事件BUFF---->压入消息队列----->长时间没有操作按键处理。长时间没有操作按键标志位为true,这种可以配合按键外部GPIO电平变化唤醒+按键按键检测启停,减少检测带来的功耗。

2.4. 按键消息

typedef struct

{

    BUT_TYPE_e but_type;

uint8_t  but_code;   

}BUT_message_t;

but_type为按键输出类型

but_code为按键序号

 

算法的运行环境:

8bit32bit单片机,OS级芯片,算法占用RAM大小为320B,占用程序code大小<800B。亲们若在多功能按键嵌入式设计开发中有遇到问题,欢迎加我微信号18350299276进行探讨。备注信息:多功能按键。

 

 

 

作者: 志与智, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3905966.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论5条评论)

登录后参与讨论

商业资讯 2021-7-29 15:05

不错

wxd123com_970479604 2020-9-7 11:53

短按与长按的事件类型定义成一样的?

pidaneng 2020-9-3 22:04

很不错。

T.b.K 2020-9-3 08:45

不错。
相关推荐阅读
志与智 2020-10-17 17:28
【2020意法半导体开发大赛】基于ST25R3916 NFC芯片在嵌入式门禁的应用(001)
简介 基于ST25R3916 NFC芯片在嵌入式门禁的应用,广泛应用在楼宇对讲门口机,小区IC门禁和出租房门禁等场所。 1.  门禁硬件资源 本次NCF开发设计大赛,ST官方提供硬...
志与智 2020-07-15 09:12
【富芮坤物联网开发板评测】基于富芮坤FR801xHA蓝牙从机评测
1.      蓝牙从机模组设计需求 1.1.    蓝牙从机模组端口 ...
我要评论
5
33
关闭 站长推荐上一条 /2 下一条