# lwbtn **Repository Path**: lealeeming/lwbtn ## Basic Information - **Project Name**: lwbtn - **Description**: lwbtn 是什么? lwbtn(Lightweight button manager)其实就是一套用 C(C11)写的按钮库,专门帮你把各种按键的去抖、单击、双击、长按全搞定。它不依赖任何操作系统,只要你能提供一个毫秒级的计时函数,就能跑。最关键的是——零动态内存分配,所以在资源紧张的 MCU 上也毫无压力。 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-25 - **Last Updated**: 2025-09-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ![输入图片说明](0ff520e7a953deb3ce65352b465a7c97.png) 安装 & 使用步骤 1. 拉代码git clone https://github.com/MaJerle/lwbtn.git 2. 在工程里加入 lwbtn.h / lwbtn.c,把它们编进你的编译链。 3. 实现两段必备回调(下面给个最简例子): // 读取硬件按键状态,返回 1=按下,0=松开 uint8_t btn_get_state(struct lwbtn *lw, struct lwbtn_btn *btn) {     // 这里自行读取 GPIO,假设低电平有效     return (GPIO_ReadPin(btn->arg) == 0); } // 按键事件回调,统一在这里处理业务 void btn_event(struct lwbtn *lw, struct lwbtn_btn *btn, lwbtn_evt_t evt) {     switch (evt) {         case LWBTN_EVT_ONPRESS:   /* 按下 */   /* … */ break;         case LWBTN_EVT_ONRELEASE: /* 松开 */   /* … */ break;         case LWBTN_EVT_ONCLICK:   /* 单击 */   /* … */ break;         case LWBTN_EVT_KEEPALIVE: /* 长按期间 *//* … */ break;         default: break;     } } 4. 定义按钮数组(每个按钮可以挂个自定义 arg,常用来存 GPIO 引脚号): static lwbtn_btn_t btns[] = {     {.arg = (void*)PIN_KEY1},     {.arg = (void*)PIN_KEY2},1. 这里是列表文本     // … 根据实际按键数目添加 }; 5. 初始化库: lwbtn_init_ex(NULL, btns, sizeof(btns)/sizeof(btns[0]),btn_get_state, btn_event); 6. 在主循环或定时中调用(传入当前毫秒计时): while (1) {     lwbtn_process_ex(NULL, get_tick_ms());     // 其它业务代码... } 大概就是这么几步,几乎没有坑。 ![输入图片说明](image.png)