开源! ! ! 轻量级多功能按键驱动-LiteButton

简介: 开源! ! ! 轻量级多功能按键驱动-LiteButton

[ 序 言 ]
   按键是大多项目上都有的外设模块,分独立按键和ADC按键。本篇文章介绍的时实现的独立按键的驱动,优点在于能快速的搭建框架,减少工程师的工作量,加速产品落地,模块化的安装LiteButton。进而实现多功能的按键需求。

[ 开 源 仓 库 地 址 ]
Gitee:https://gitee.com/one-hundred-and-twenty-three11/lite-button  
   欢迎大家测试提出bug,可以私信我解bug。各位也可以提交代码上去,供大家一起学习、改进LiteButton。最新的代码也会同步到master分支上。

[ LiteButton 功 能 ]
1、实现按键的按下、抬起、单击、双击、长按开始、长按保持、长按抬起事件的触发,并利用回调函数解耦。
2、实现按键的添加,多个按键时,只要使用lite_button_add添加即可。
3、某个按键的移除,移除之后该按键不会触发任何事件。
4、按键扫描的可控化,lite_button_run和lite_button_stop实现按键的扫描控制,便于在不需要触发任何按键事件的时候调用。且停止后可以再次启用。
5、销毁按键列表,回收内存空间。按键用完之后可以彻底销毁按键列表。

6、实现按键的连击功能

[ LiteButton API 接 口 ]

extern void lite_button_config(bsp_button_config button_config, uint16_t button_num);
extern void lite_button_add(Button *button, uint8_t active_level, read_gpio read_button, event_cb callback_fun);
extern void lite_button_remove(Button *button);
extern void lite_button_destroy(void);
extern void lite_button_run(void);
extern void lite_button_stop(void);
extern void lite_button_scan(void);

[ LiteButton 测试代码 ]

#include <stdio.h>
#include "LiteButton.h"
Button Button0, Button1, Button2;
void Button0_Callback(ButtonEvent event)
{
    switch(event)
    {
        case BUTTON_DOWN            : log_i("Button0 down.\r\n");               break;
        case BUTTON_UP              : log_i("Button0 up.\r\n");                 break;
        case BUTTON_PRESS_REPEAT    : log_i("Button0 repeat.\r\n");             break;
        case BUTTON_SINGLE_CLICK    : log_i("Button0 single click.\r\n");       break;
        case BUTTON_DOUBLE_CLICK    : log_i("Button0 double click.\r\n");       break;
        case BUTTON_LONG_PRESS_START: log_i("Button0 long press start.\r\n");   break;
        case BUTTON_LONG_PRESS_HOLD : log_i("Button0 long press hold.\r\n");    break;
        case BUTTON_LONG_PRESS_UP   : log_i("Button0 long press up.\r\n");      break;
        default: break;
    }
}
void Button1_Callback(ButtonEvent event)
{
  ...
}
void Button2_Callback(ButtonEvent event)
{
  ...
}
int main(void)
{
    /* bsp_button_config:硬件层初始化按键GPIO的接口  3:共有几个独立按键 */
    lite_button_config(bsp_button_config, 3);
    /* 添加独立按键 */
    lite_button_add(&Button0, 0, read_but0_gpio, but0_cb);
    lite_button_add(&Button1, 0, read_but1_gpio, but1_cb);
    lite_button_add(&Button2, 0, read_but2_gpio, but2_cb);
    .....
    /* 从按键列表中移除按键0,移除之后该按键无效 */
    lite_button_remove(&Button0);
    /* 停止运行按键扫描,停止之后可使用lite_button_run再启用 */
    lite_button_stop();
    /* 运行按键扫描,默认lite button初始化就运行 */
    lite_button_run();
    /* 该函数调用后所有的按键都无法使用,且按键列表被摧毁让系统回收,重新使用只能重新lite_button_config再添加按键 */
    lite_button_destroy();
    for(;;)
    {   
        /* 每隔5ms调用一次 */
        if(!(ticks % 5))
            lite_button_scan();
    }
    return 0;
}

  测试代码中使用滴答定时器每隔5ms运行一次lite_button_scan函数,扫描按键列表中的所有按键。使用RTOS的可以在任务中直接调用处理,类似这样:

void KeyScan_Task(void *pvParameters)
{
    Button button0;
    /* Button initialization */
    lite_button_config(bsp_KeyConfig, 2);
    /* Add button */
    lite_button_add(&button0, 0, bsp_ReadButton0, Button0_Callback);
    for(;;)
    {
        /* Key processing */
        lite_button_scan();
        vTaskDelay(SCAN_CYCLE);     
    }    
}

   SCAN_CYCLE是由LiteButton.h中提供的,默认是5ms

[ 结 语 ]
   文章至此就结束啦,项目代码在Gitee上拉取测试,拉代码的时候也记得顺带star下哦,也欢迎各位大佬提交优化代码,和我一起完善LiteButton吧,文章反馈不错的话就把ADC按键也集成进LiteButton中,配置可裁剪。

   如果觉得本篇文章多少有点帮助的话,求赞、关注、评论、转发,创作不易!你们的支持是小编创作最大动力。

相关文章
|
存储 缓存 安全
10款轻量型的嵌入式GUI库分享
10款轻量型的嵌入式GUI库分享
1996 1
|
边缘计算 安全 中间件
软件体系结构 - 嵌入式系统(4)- 嵌入式中间件
软件体系结构 - 嵌入式系统(4)- 嵌入式中间件
853 0
|
安全 C语言
snprintf的用法
简要介绍了snprintf的常用方法,能大大的简化我们的代码
|
8月前
|
传感器 监控 安全
STM32直流充电桩主控方案【源程序+原理图+PCB】
STM32直流充电桩主控方案【源程序+原理图+PCB】
551 0
|
开发工具 git
git fetch和 pull的区别
`git fetch`和 `git pull`在Git中扮演着不同的角色,了解它们的区别和使用场景对于高效管理代码库至关重要。通过合理使用这两个命令,可以更好地控制代码合并过程,减少冲突,提高团队协作效率。
1156 97
|
IDE 开发工具 C++
JetBrains CLion 2025.1 发布 - C 和 C++ 跨平台 IDE
JetBrains CLion 2025.1 (macOS, Linux, Windows) - C 和 C++ 跨平台 IDE
669 0
|
开发工具 C语言 git
【嵌入式开源库】MultiButton的使用,简单易用的事件驱动型按键驱动模块
【嵌入式开源库】MultiButton的使用,简单易用的事件驱动型按键驱动模块
1064 0
|
C语言
【STM32 CubeMX】移植u8g2(一次成功)
【STM32 CubeMX】移植u8g2(一次成功)
3444 0
2节串联锂电池充电管理芯片,有5V升压,9-12V降压,快充升降压
2节串联锂电池供电电压范围为6V-8.4V,标称7.4V。根据输入电压不同,需选择不同模式的充电管理芯片。5V输入需升压型,9V、12V输入需降压型,5V-20V输入需升降压型。推荐PW4284、PW4084、PW4203等型号,适用于各种应用场景。
基于级联H桥的多电平逆变器PWM控制策略的simulink建模与仿真
级联H桥(CHB)多电平逆变器通过多个H桥单元级联实现高电压和高质量输出波形,广泛应用于风力发电、光伏并网等高压大功率领域。每个H桥包含两个开关管,级联后输出电压电平数为2N+1,采用空间矢量脉宽调制(SVPWM)控制策略,通过合理切换开关器件生成所需的正弦波形。系统仿真基于MATLAB2022a。