# KeypadEngine **Repository Path**: laoma1245/KeypadEngine ## Basic Information - **Project Name**: KeypadEngine - **Description**: 单片机按键扫描检测通用库 - **Primary Language**: C - **License**: BSD-3-Clause-Clear - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-26 - **Last Updated**: 2025-01-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 按键扫描函数通用库介绍 ## 一、KeypadEngine介绍 KeypadEngine是基于事件触发的独立按键扫描框架,实现了按键的单击、多击、长按、长按保持、长按抬起的检测。此框架可以在单片机裸机或者RTOS环境下使用,按键检测的方式采用是扫描法,需要每10毫秒扫描一次,更新一次按键状态。 ## 二、移植和使用说明 #### 步骤一 定时扫描 此按键扫描程序需要定时扫描一次,更新按键状态,由此判断按键短按、长按等状态,扫描频率建议使用10毫秒。 如果是在RTOS下使用,要使用比较高优先级的任务进行扫描,保证实时性: ```c static void key_scan_task(void *arg) { while (1) { keypad_scan(); vTaskDelay(pdMS_TO_TICKS(10)); /* 10ms扫描一次 */ } } ``` 如果是在裸机下使用,需要在定时器中,周期性地调用,例如在10ms的`SysTick_Handler`定时器中断中调用`keypad_scan`函数: ```c void SysTick_Handler(void) { keypad_scan(); } ``` #### 步骤二 注册读引脚状态函数 ```c static uint8_t user_key_read(void *arg) { uint8_t value = 0; keypad_t *key = (keypad_t *)arg; /* 按键ID */ switch (key->id) { case KEYPAD_1: value = READ_KEY1(); /* 读取按键1引脚的状态 */ break; case KEYPAD_2: value = READ_KEY2(); /* 读取按键2引脚的状态 */ break; case KEYPAD_3: value = READ_KEY3(); /* 读取按键3引脚的状态 */ break; default: break; } return value; } ``` * READ_KEY1、READ_KEY2等函数是读取引脚状态的,按下状态为真,没有按下为假。 * key->id是注册时,用户自己初始化的,需要用户自己管理。 #### 步骤三 ## 特别声明 本软件(以下简称“软件”)是以开源形式发布,旨在促进技术交流与共享。我们鼓励用户自由下载、修改、分发及使用此软件,以期达到更广泛的应用和改进。然而,请注意以下几点重要声明: ‌**无保证声明‌**:软件的开发者(以下简称“我们”)不保证软件的功能完整性、稳定性、安全性或无任何错误。软件仅供参考和学习之用,我们不对因使用本软件而产生的任何直接或间接损失负责。 ‌**自行测试‌**:所有下载并使用本软件的用户(以下简称“您”)需自行承担测试软件正确性与适用性的责任。在使用前,请务必在合适的测试环境中进行全面的测试,以确保软件满足您的需求且不会对您的系统或数据造成损害。 ‌**修改与分发‌**:您有权对软件进行修改和再分发,但对于因修改或不当使用导致的任何问题,我们同样不承担任何责任。 **无技术支持义务‌**:虽然我们欢迎用户反馈和建议,但我们不承诺提供正式的技术支持服务。对于使用过程中遇到的问题,建议您参考社区论坛、文档或自行寻求解决方案。