/****************************************************************************** * @file key.h * @brief 按键驱动模块头文件 * @details 本文件定义了按键驱动的接口和数据结构,包括按键类型枚举、 * 按键回调函数类型定义以及外部接口函数声明。 * @author 阜阳师范大学物电学院 * @version V0.1 * @date 2026.1.19 * @note 依赖库: MultiButton * 使用方式: * 1. 调用 Key_Init() 初始化按键硬件 * 2. 调用 Key_RegisterCallback() 注册按键回调函数 * 3. 在定时器中调用 Button_Ticks() 进行按键扫描 ******************************************************************************/ #ifndef __KEY_H__ #define __KEY_H__ #include "./SYSTEM/sys/sys.h" #include "MultiButton.h" /* ============================================================================ * 按键类型枚举定义 * ============================================================================ */ /** * @brief 按键类型枚举 * @details 定义了系统中所有支持的按键类型 */ typedef enum { KEY_NONE = 0, /**< 无按键按下 */ KEY_ENTER, /**< 确认键 */ KEY_UP, /**< 向上键 */ KEY_DOWN, /**< 向下键 */ KEY_ESC, /**< 取消键 */ KEY_ADD, /**< 加键 */ KEY_DEC, /**< 减键 */ KEY_LEFT, /**< 向左键 */ KEY_RIGHT, /**< 向右键 */ KEY_RESET, /**< 复位键 */ KEY_FACTORY, /**< 工厂模式键 */ } KEY_TYPE; /* ============================================================================ * 回调函数类型定义 * ============================================================================ */ /** * @brief 按键回调函数类型定义 * @param key_type 按键类型(KEY_TYPE 枚举值) * @note 业务逻辑层需要实现此类型的回调函数,用于处理按键事件 * 当检测到按键按下时,会调用注册的回调函数 * @retval 无 */ typedef void (*KeyCallback)(KEY_TYPE key_type); /* ============================================================================ * 外部接口函数声明 * ============================================================================ */ /** * @brief 按键硬件初始化函数 * @note 初始化所有按键的 GPIO 配置和 MultiButton 库 * 特殊处理:禁用 JTAG 以释放 PB3 等引脚 * 必须在系统初始化时调用一次 * @retval 无 */ void Key_Init(void); /** * @brief 注册按键回调函数(供业务逻辑层调用) * @param callback 按键回调函数指针,当检测到按键事件时会调用此函数 * @note 业务逻辑层通过此函数注册按键处理回调 * 如果传入 NULL,则取消已注册的回调函数 * @retval 无 */ void Key_RegisterCallback(KeyCallback callback); /** * @brief MultiButton 库的按键扫描函数宏定义 * @note 需要在定时器中周期性调用此函数(建议 5-10ms 调用一次) * 用于 MultiButton 库进行按键状态扫描和事件检测 * @retval 无 */ #define Button_Ticks() button_ticks() #endif /* __KEY_H__ */