docs: 根据1.14寸屏幕、5按键与可编程RGB新规格更新项目文档

This commit is contained in:
2026-07-09 10:49:15 +08:00
parent 17a90ff7dc
commit fdf0c5ed1b
15 changed files with 174 additions and 113 deletions

View File

@@ -1,15 +1,18 @@
# 模块拆分 - 按键扫描与事件判定 (docs/50_module-breakdown/mod-key.md)
# 模块拆分 - 按键扫描与事件判定 (Docs/50_module-breakdown/mod-key.md)
本模块描述按键状态消抖、长按计时判定以及组合按键识别。
本模块描述按键状态消抖、长按计时判定以及组合按键识别。支持 5 个物理按键到手环事件的映射。
## 1. 模块职责说明
* **职责范围**
1. 在 1ms 定时器中断中建立 10ms 扫描计时周期。
2.个物理按键KEY_UP SW1, KEY_SOS SW3, KEY_DOWN SW2进行状态扫描
2. 5 个物理按键进行引脚电平扫描
* 侧边:`KEY_UP` SW1 (▲), `KEY_DOWN` SW2 (▼), `KEY_CONFIRM` (■)
* 上部:`KEY_SOS1` (SOS 1), `KEY_SOS2` (SOS 2)
3. 实现消抖检测(连续 20ms 检测到电平稳定才认定按键动作)。
4.按住不放的行为进行计时累加,判定长按(如长按 SOS 达 5 秒触发对码;长按 ▲+▼ 达 3 秒触发配对模式)
5. 将按键判定结果转换为 `KeyEvent` 枚举,并注入按键事件缓冲区 `key_event_buf` 供主循环异步读取
4.上部双 SOS 按键进行逻辑并联处理,保证按下任意一个均能触发求救
5. 对按住不放的行为进行计时累加,判定长按(如长按 SOS 达 5 秒触发对码;长按 ▲+▼ 达 3 秒触发配对模式)
6. 将按键判定结果转换为 `KeyEvent` 并注入按键事件缓冲区 `key_event_buf`
## 2. 数据结构定义
@@ -21,9 +24,10 @@ typedef enum {
KEY_UP_LONG,
KEY_DOWN_SHORT,
KEY_DOWN_LONG,
KEY_SOS_SHORT,
KEY_SOS_LONG,
KEY_COMB_LONG // ▲ + ▼ 组合长按事件
KEY_CONFIRM_CLICK, // ■ 确认键短按
KEY_SOS_SHORT, // SOS键短按 (SOS1 或 SOS2)
KEY_SOS_LONG, // SOS键长按5秒 (SOS1 或 SOS2)
KEY_COMB_LONG // ▲ + ▼ 组合长按事件
} KeyEvent;
```
@@ -31,9 +35,11 @@ typedef enum {
* `void Key_Scan_Process(void)`
在 Timer 1 ISR 中每 10ms 调度一次。
* 读取 `KEY_UP`, `KEY_DOWN`, `KEY_SOS` 的 GPIO 逻辑电平。
* 读取 `KEY_UP`, `KEY_DOWN`, `KEY_CONFIRM`, `KEY_SOS1`, `KEY_SOS2` 的 GPIO 逻辑电平。
* 计算并联 SOS 状态:`is_sos_pressed = (KEY_SOS1 == 0) || (KEY_SOS2 == 0)`
* 如果发现按键电平状态改变,进行计数消抖。
* 如果按住不放,累加计时计数器(`key_up_hold`, `key_down_hold`, `key_sos_hold`)。
* 如果按住不放,累加计时计数器(`key_up_hold`, `key_down_hold`, `key_confirm_hold`, `key_sos_hold`)。
* 检测到 `key_up_hold >= 300``key_down_hold >= 300` 达 3 秒时,注入 `KEY_COMB_LONG` 事件。
* 检测到 `key_sos_hold >= 500` 达 5 秒时,注入 `KEY_SOS_LONG` 事件;若释放时未达 5 秒但大于 20ms注入 `KEY_SOS_SHORT`
* 检测到确认键释放,注入 `KEY_CONFIRM_CLICK`
* 事件解析完毕后存入 `key_event_buf`

View File

@@ -1,6 +1,6 @@
# 模块拆分 - LCD 显示与字模驱动 (docs/50_module-breakdown/mod-lcd.md)
# 模块拆分 - LCD 显示与字模驱动 (Docs/50_module-breakdown/mod-lcd.md)
本模块管理 AMOLED 屏幕引脚、SGM3833 电源使能、SPI 传输和界面图文渲染
本模块管理 1.14寸 TFT LCD 屏幕引脚、电平控制、SPI 传输和界面图文渲染(分辨率为 135x240 像素)
## 1. 模块职责说明
@@ -9,11 +9,11 @@
2. 控制 SGM_CTRL 供电管脚。
3. 支持屏幕窗口配置,实现底层清屏与局部像素写入。
4. 读取 `lcd_font.h` 库,在指定坐标绘制 8x16 字符与自定义大小位图。
5. 实现各业务状态屏幕画面绘制
5. 实现各业务状态屏幕135x240 分辨率)画面绘制与文字对齐
## 2. 底层显示接口
* `void LCD_Init(void)`:初始化 LCD 引脚,置 `SGM_CTRL = 1` 使能正负高压供电,并发送 RM69310 的初始化 SPI 寄存器序列。
* `void LCD_Init(void)`:初始化 LCD 引脚,置 `SGM_CTRL = 1` 使能供电,并发送屏幕控制器的初始化 SPI 寄存器序列。
* `void LCD_WriteCmd(u8 cmd)`:拉低 `LCD_RS` 发送 SPI 命令。
* `void LCD_WriteData(u8 dat)`:拉高 `LCD_RS` 发送 SPI 数据。
* `void LCD_SetWindow(u16 x1, u16 y1, u16 x2, u16 y2)`:设置局部像素绘制范围(强制处理 X 轴偏量 `+4`)。
@@ -23,7 +23,10 @@
* `void LCD_ShowChar(u16 x, u16 y, char c, u16 fc, u16 bc)`:在 (x, y) 坐标处绘制 ASCII 字符 `c`
* `void LCD_ShowString(u16 x, u16 y, char *s, u16 fc, u16 bc)`:循环打印字符串。
* `void LCD_ShowStringCentered(u16 y, char *str, u16 fc, u16 bc)`:在 135 像素宽屏幕上水平居中绘制 8 像素宽的字符串,水平起始坐标算法为 `(135 - len * 8) / 2`
* `void LCD_ShowString16x32Centered(u16 y, char *str, u16 fc, u16 bc)`:在 135 像素宽屏幕上水平居中绘制双倍大小 (16x32px) 的字符串,水平起始坐标算法为 `(135 - len * 16) / 2`
* `void LCD_ShowImage(u16 x, u16 y, u16 w, u16 h, const u8 *img, u16 fc, u16 bc)`:在指定区域绘制单色位图。
* `void UI_ShowClockPage(SystemState state, u8 hour, u8 min)`:渲染时钟待机页面,并根据布撤防状态在状态栏绘制相应锁状态图标。
* `void UI_ShowClockPage(SystemState state, u8 hour, u8 min)`:渲染时钟待机页面135 宽布局),并根据布撤防状态在状态栏绘制相应锁状态图标。
* `void UI_ShowAlarmPage(char *sensor_name, u8 zone)`:渲染防区告警页面,显示对应的传感器位图和法语名称。
* `void UI_ShowPairMenuPage(u8 selected_index)`:渲染对码选择菜单。

View File

@@ -1,4 +1,4 @@
# 模块拆分 - 低功耗电源管理 (docs/50_module-breakdown/mod-power.md)
# 模块拆分 - 低功耗电源管理 (Docs/50_module-breakdown/mod-power.md)
本模块描述手环待机情况下的屏幕休眠与单片机停机唤醒机制,用于降低日常静态电流消耗。
@@ -6,18 +6,18 @@
* **职责范围**
1. 在系统无物理按键按下且无射频信号输入达 **10 秒** 后,触发低功耗睡眠动作。
2.RM69310 屏幕控制器发送 Sleep In(命令 `0x10`)使 AMOLED 内部关闭
3. 拉低 `SGM_CTRL = 0` 彻底切断 SGM3833 的正负压与 VAVDD 供电,将屏幕静态电流降至微安级。
4. 将按键引脚(KEY_UP P0.1, KEY_SOS P0.2, KEY_DOWN P0.3配置为外部中断源。
2.LCD 屏幕控制器发送 Sleep In 指令使屏幕进入休眠
3. 拉低 `SGM_CTRL = 0` 彻底切断 LCD 背光与驱动供电,将屏幕静态电流降至微安级。
4. 5 个按键引脚(P0.1, P0.2, P0.3, P0.4, P0.5)全部配置为端口外部中断源。
5. 调用单片机 PD 停机控制寄存器,关闭主时钟进入 Power-Down 停机状态。
6. 在用户按压任意键时通过引脚电平下降沿产生外部中断,瞬时唤醒主控时钟并恢复供电。
6. 在用户按压任意键时通过引脚电平下降沿产生外部端口中断,瞬时唤醒主控时钟并恢复供电。
## 2. 接口与函数设计
* `void Enter_Deep_Sleep(void)`
1. 通过 SPI 通道写指令 `0x10`
2. 设置 `SGM_CTRL = 0`
3. 清除外部中断标志,使能 P0 口外部中断输入
1. 通过 SPI 通道写 Sleep In 指令。
2. 设置 `SGM_CTRL = 0` 关闭背光和供电
3. 清除外部中断标志,使能 P0 口P0.1~P0.5的端口中断输入P0INTE = 0x3E
4. 设置单片机的 `PCON` 寄存器使 `PD = 1`。主时钟停止。
* `void Key_Wakeup_Isr(void)`
按键外部中断服务函数,唤醒后拉高 `SGM_CTRL = 1` 恢复屏幕高压供电,并发送 Wake Up 指令 `0x11` 重建屏幕显示。
按键外部中断服务函数,唤醒后拉高 `SGM_CTRL = 1` 恢复屏幕与背光供电,并发送 Wake Up 指令重建屏幕显示。

View File

@@ -1,6 +1,6 @@
# 模块拆分 - 自适应 RF 解码与发射 (docs/50_module-breakdown/mod-rf.md)
# 模块拆分 - 自适应 RF 解码与发射 (Docs/50_module-breakdown/mod-rf.md)
本模块管理射频芯片 GPIO 初始化、433MHz EV1527 解调接收(宽限时序比值算法)与射频打包主动发射。
本模块管理射频芯片 GPIO 初始化、433MHz EV1527 解调接收(宽限时序比值算法)与射频打包主动发射。已确认此模块与新的 1.14寸屏幕/5按键物理变更兼容。
## 1. 模块职责说明

View File

@@ -1,6 +1,6 @@
# 模块拆分 - 系统核心控制与存储 (docs/50_module-breakdown/mod-sys.md)
# 模块拆分 - 系统核心控制与存储 (Docs/50_module-breakdown/mod-sys.md)
本模块定义手环系统的生命周期、时间计数器、定时中断调度器以及断电保存数据库模块。
本模块定义手环系统的生命周期、时间计数器、定时中断调度器以及断电保存数据库模块。只涉及手环本地代码实现。
## 1. 模块职责说明