开源! ! ! 轻量级多功能按键驱动-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中,配置可裁剪。

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

相关文章
|
存储 C语言 内存技术
专为MCU项目开发提速的代码框架BabyOS
专为MCU项目开发提速的代码框架BabyOS
227 0
|
7月前
|
存储 缓存 安全
【实战指南】轻松自研嵌入式日志框架,6大功能亮点一文读懂
本文介绍了如何自研一个嵌入式日志框架,涵盖了6大功能亮点:日志分级管理、异步处理与并发安全性、详尽上下文信息记录、滚动日志归档策略、高效资源利用和便捷API接口。设计上,通过日志过滤器、共享环形缓冲区和独立的日志管理进程实现日志管理。在并发环境下,使用信号量保证线程安全。日志文件按大小滚动并有序归档,同时考虑了资源效率。对外提供简洁的API接口,便于开发人员使用。文章还简述了实现细节,包括实时存储、日志滚动和共享内存管理。测试部分验证了日志回滚和实时打印功能的正确性。
224 4
|
8月前
|
开发工具 C语言 git
【嵌入式开源库】MultiButton的使用,简单易用的事件驱动型按键驱动模块
【嵌入式开源库】MultiButton的使用,简单易用的事件驱动型按键驱动模块
221 0
|
8月前
|
数据可视化 数据库 C++
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
1546 0
|
8月前
|
存储 传感器 缓存
面向嵌入式系统的轻量级框架分析
面向嵌入式系统的轻量级框架分析
150 1
|
8月前
|
开发框架 数据可视化 C#
C# | 上位机开发新手指南(三)框架
在上位机开发中,Windows Forms是使用最广泛的C#框架之一。Windows Forms是.NET Framework中的一个GUI框架,提供了丰富的GUI控件和易于使用的编程模型,可以快速开发Windows桌面应用程序。Windows Forms已经存在多年,并且在.NET Framework中得到广泛的支持和优化,因此在上位机开发中得到了广泛应用。除此之外,随着.NET Core的不断发展,越来越多的开发人员开始使用跨平台的C#框架进行上位机开发,例如使用Electron或Avalonia等框架开发基于Web技术的桌面应用程序。
458 0
C# | 上位机开发新手指南(三)框架
|
8月前
|
编解码 自然语言处理 C语言
嵌入式界面神器 littleVGL
嵌入式界面神器 littleVGL
82 0
|
传感器 编解码 缓存
实战贴:开源GUI LittlevGL在MCU上的移植
实战贴:开源GUI LittlevGL在MCU上的移植
260 2
|
设计模式 算法 开发者
嵌入式框架设计中的四种常用模式
嵌入式框架设计中的四种常用模式
163 0
|
传感器 C语言 芯片
「入门指南」轻松学习嵌入式 GPIO:从原理到应用一步到位
「入门指南」轻松学习嵌入式 GPIO:从原理到应用一步到位

热门文章

最新文章