手环端开发计划书 (V1.1)

STC32G12K128 核心手环系统开发及 UI 渲染方案说明
手环系统硬件接口与数据流拓扑图
INPUTS / 探测与按键 按键输入 (▲ / ▼ / SOS) P0.1: KEY_UP (▲) P0.3: KEY_DOWN (▼) P0.2: KEY_SOS LR690L 433MHz 接收 P2.1: RF_RX_DATA P2.2: SHUT (低使能) P3.7: RF_RX 开关 MCU / 核心业务逻辑 主程序状态机 ● STATE_IDLE (时钟待机) ● STATE_PAIR (对码配对) ● STATE_ALARM (告警响应) 时间片调度与存储 Timer 1: 1ms 按键消抖 PWM LED / 马达振动定时 IAP Flash: 保存 16组对码 OUTPUTS / 交互显示 OLED 局部刷新渲染 RM69310 (CS/RST/DCX/SPI) ASCII 8x16 英文 256字节 汉字点阵写屏 物理声光警报输出 RGB LED (共阳极 P0.0/P2.7/P2.6) PWM 呼吸灯控制 P2.5: 马达振动警报
📊 代码逻辑运行流程图
主循环与 Timer1 中断、RF 双模解码流程
主程序运行流程 main() 系统初始化 (时钟/GPIO/Timer1/OLED) 读取 IAP/EEPROM 传感器对码表 进入 STATE_NORMAL 并开启接收管 while(1) 轮询 有按键事件触发? 处理按键 (状态切换/对码/SOS) 有RF信号输入? 解析协议 (报警触发 / 主机广播) 执行 OLED 局部增量刷新渲染 Timer 1 中断 (1ms 软件调度) 定时器中断服务程序 (ISR) 1. 系统软件时钟累加 (维护 毫秒/秒/分钟 时钟滴答) 2. 按键检测与软件消抖 (每10ms) (检测单击、长按3秒/5秒组合事件) 3. RGB LED 呼吸灯 PWM 翻转 (20ms软件占空比发生器,控制亮度) 4. 警报马达振动时序控制 (控制振动/暂停毫秒脉宽计数器) 中断退出 (RETI) RF 双模解码流程 RF_Decode() 检测引脚 P2.1 (RF_RX_DATA) 为高电平 是否为 EV1527 同步头脉宽? -> 解调 24 位传感器 ID -> 校验前导0x55/同步0xA55A
📊 代码逻辑运行流程图
主循环与 Timer1 中断、RF 双模解码流程
主程序运行流程 main() 系统初始化 (时钟/GPIO/Timer1/OLED) 读取 IAP/EEPROM 传感器对码表 进入 STATE_NORMAL 并开启接收管 while(1) 轮询 有按键事件触发? 处理按键 (状态切换/对码/SOS) 有RF信号输入? 解析协议 (报警触发 / 主机广播) 执行 OLED 局部增量刷新渲染 Timer 1 中断 (1ms 软件调度) 定时器中断服务程序 (ISR) 1. 系统软件时钟累加 (维护 毫秒/秒/分钟 时钟滴答) 2. 按键检测与软件消抖 (每10ms) (检测单击、长按3秒/5秒组合事件) 3. RGB LED 呼吸灯 PWM 翻转 (20ms软件占空比发生器,控制亮度) 4. 警报马达振动时序控制 (控制振动/暂停毫秒脉宽计数器) 中断退出 (RETI) RF 双模解码流程 RF_Decode() 检测引脚 P2.1 (RF_RX_DATA) 为高电平 是否为 EV1527 同步头脉宽? -> 解调 24 位传感器 ID -> 校验前导0x55/同步0xA55A
一、 硬件引脚映射与电气特性
硬件功能分类 端口别名 STC32G 引脚 驱动电气逻辑说明
🔴 三色指示灯 (红) LED_R P0.0 共阳极,输出 0 点亮,输出 1 关闭。
🟢 三色指示灯 (绿) LED_G P2.7 共阳极,输出 0 点亮,输出 1 关闭。
🔵 三色指示灯 (蓝) LED_B P2.6 共阳极,输出 0 点亮,输出 1 关闭。
📳 振动驱动马达 MOTOR P2.5 直流控制,输出 1 开启马达,输出 0 停止。
▲ 方向按键 (上) KEY_UP P0.1 按下为 0,带内部上拉输入。
▼ 方向按键 (下) KEY_DOWN P0.3 按下为 0,带内部上拉输入。
🆘 紧急/对码按键 KEY_SOS P0.2 按下为 0,带内部上拉输入。
二、 核心设计决策 (Design Decisions)
💡 决策 1:安防常用汉字精简本地字库法 (优化首选方案 C)
由于手环 Flash(128KB)存不下全套字库(216KB),我们采用“常用安防汉字精简字库法”:手环本地代码空间固化约 200 个高频汉字(如:客厅、厨房、前门、阳台等,仅需 6.4KB 空间)。对码命名时,IPC 仅需通过射频向手环发送 16 字节的汉字 GBK/Unicode 编码即可,不需要发 256 字节点阵。手环在本地字库查表后显示。该方案使 433MHz 射频包缩减了 16 倍,极大提高了传输成功率和防干扰能力。如果出现极个别不在常用列表中的汉字,手环将显示 fallback 符号(如“□”)。
📡 决策 2:433MHz 射频双模解码器
手环的接收部分需要同时兼容普通遥控器报警数据(标准 24 位 EV1527 协议)和自研的 IPC 状态/名字同步数据(含 CRC8 校验的自定义射频协议)。我们将通过对 LR690L 输出的脉冲宽度进行动态测量与匹配,实现一套软件高效率的非阻塞双模解码器。
三、 UI 渲染引擎细节与坐标规划

1. 直流流式送数驱动 (`LCD_DrawMonoBitmap`)

基于硬件 SPI 接口,在写图前设置矩形窗口 (x, y) -> (x+w-1, y+h-1),然后从 Flash 字模中逐 Bit 扫描:如果是 1 则流式送入前景色,0 则送入背景色。此方案**零显存开销**,完全避开了单片机 RAM 资源瓶颈,且写屏速度极快。

2. 圆形视口安全区域划分

由于屏幕物理切边,有效显示区收拢在 X 坐标 [10, 110],Y 坐标 [30, 210] 的安全圆形范围内:

四、 验证任务清单 (Task Checklist)