1.8 KiB
1.8 KiB
模块拆分 - 按键输入与事件产生 (Docs/50_module-breakdown/mod-key.md)
本模块描述物理按键输入引脚的检测、消抖、长短按事件封包,以及其作为事件产生者向事件队列投递的过程。
1. 模块职责说明
- 职责范围:
- 事件产生者 (Event Producer):物理按键
KEY_UP(P0.1),KEY_DOWN(P0.3),KEY_CONFIRM(P0.2),KEY_SOS(P2.6) 被按下触发低电平,按键模块负责定义物理端口输入并将物理信号翻译为KeyEvent事件。 - 移位消抖:在 Timer1 10ms 中断分频中读取 IO 状态,连续 3 次检测一致则确认电平状态,过滤物理抖动。
- 推入事件队列:当确认有物理键沿跳变时,调用
Event_Queue_Push()将对应的KeyEvent压入独立的事件队列缓冲区中,避免因主逻辑繁忙丢失按键。 - 长短按时序:确认键长按 3 秒产生长按事件,▼ 键长按 2 秒产生长按事件,SOS 键按下即刻产生最高优先级的
KEY_SOS_ACTIVE抢占求救事件。
- 事件产生者 (Event Producer):物理按键
2. 接口与函数说明
void Key_Init(void):将 Pin 30, 31, 32, 27 配置为高阻输入并开启内部上拉电阻 (P0PU |= 0x0E,P2PU |= 0x40)。void Key_Scan_Process(void): 在 Timer1 的 10ms 定时周期中回调。- 读取
KEY_UP,KEY_DOWN,KEY_CONFIRM,KEY_SOS引脚。 - 累加按键维持计数器以判定长按与短按。
- 将结果转换为
KeyEvent传入事件队列。
- 读取
bit Event_Queue_Push(KeyEvent evt):将产生的按键事件压入系统事件环形队列。若溢出返回 0。KeyEvent Event_Queue_Pop(void):分发循环调用该接口读出排队事件。若空返回KEY_EVENT_NONE。