1. 按键算法简介 这是一种多功能按键的嵌入式程序设计算法,它支持按键检测规则可配、多种按键事件和最大 32 数量的按键检测,该算法首先是通过读取芯片管脚 IO 电平的变化,再经过滤波和自定义规则算法输出按键事件,最终达到用户所需要功能的目的。如在单一按键中,可以有单击、双击、三击、短按、长按和超长按等事件,不同的事件可以自定义不同的功能。用户通过简单的初始化 GPIO 再加上按键检测算法,就容易实现按键多功能。它的应用场合,如 TWS 耳机、助听器、电子手表、单按键智能插座和智能灯控面板等。 1.1. 按键规则设计 按键检测规则如下: 名称 英文 范围 ( ms ) 设置值 长按 Long p ress 0 -12000 1 500 超长按 Long Long p ress 0 -12000 4 000 超超长按 Long Long Long p ress 0 -12000 8 000 双击 D ouble Press 0-1000 6 00 三击 Triple P ress 0-1000 800 重复 时间间隔 repeat rate 0-1000 4 00 滤波次数 Number Of F ilter 0 -255 2 检测周期 C hecks Cycle 0 -255 2 0 按键执行 Key A ctive L OW: 低电平有效,需要配置成上拉 H IGHT: 高电平有效,需要配置成下拉 L OW 低电平有效 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 ,若需要有更多按键可以往上加 KEY4 、 KEY5...KEYn , n<=31 。按键序号在按键输入和输出事件启到指定按键。 在程序设计中做一个枚举结构如下: enum { KEY1=0, KEY2, KEY3 }; 2.1. 按键检测初始化 初始化需要预先初始化 mark ,告诉算法需要检测按键的序号,检测规则需改变, 可以使用规则参数配置的结构体赋值,调用 void Button_SetKeyConfig(BUT_cfg_t KeyConfig) 函数,将参数传递进去。如果按照默认参数,就不需要重新初始化。 2.2. 按键 GPIO 高低电平采样 tKey_code 有 0-31(bit) ,其中 KEY1 为第 0bit ,它的值是 BUTTON1_DIO 管脚高低电平的值, 0 为低电平, 1 为高电平。所以表达式为 tKey |= 管脚电平状态? (1UL<