手环端开发计划书 (V1.2)
STC32G12K128 核心手环系统开发及 UI 渲染方案说明(法语及单线 RGB 版)
手环系统硬件接口与数据流拓扑图
📊 代码逻辑运行流程图
主循环与 Timer1 中断、RF 双模解码流程
一、 硬件引脚映射与电气特性
| 硬件功能分类 |
端口别名 |
STC32G 引脚 |
驱动电气逻辑说明 |
| 🌈 单线制幻彩 RGB LED |
WS2812_DI |
P0.0 |
单线级联数据输入,800Kbps 归零码协议,推挽输出,上电初始化输出 0。 |
| 📳 振动驱动马达 |
MOTOR |
P2.5 |
直流控制,输出 1 开启马达,输出 0 停止。 |
| ▲ 方向按键 (上) |
KEY_UP |
P0.1 |
按下为 0,带内部上拉输入。 |
| ▼ 方向按键 (下) |
KEY_DOWN |
P0.3 |
按下为 0,带内部上拉输入。 |
| 🆘 紧急/对码按键 |
KEY_SOS |
P0.2 |
按下为 0,带内部上拉输入。 |
二、 核心设计决策 (Design Decisions)
💡 决策 1:纯法语语言包(French-Only UI)
由于系统调整为仅需要法语界面,因此移除了原本复杂的中文字库寻址及字库空间分配方案。全界面文案已替换为符合法语习惯的词汇。为了适应 120 像素宽的 OLED 屏幕边界,各短语的长度被严格控制在 15 个字符以内以防止屏幕溢出,并微调了各个关键界面的显示坐标(如 "DESARME" 页面图标与文字)实现完美居中。
📡 决策 2:单线制幻彩 RGB LED 驱动集成 (XL-2020RGBC-2812B)
原三路 GPIO 独立驱动的共阳极三色 LED 更换为内置 IC 的单线级联式幻彩 LED 珠。由于 STC32G 工作在 24MHz 1T 模式下(每周期 41.67ns),通过在软件上实现精准 NOP 指令延时的 bit-bang 驱动,通过 P0.0 引脚向 LED 发送符合 800Kbps 时序(T0H/T0L/T1H/T1L 归零码)的 24 位 GRB 数据流。为了不影响原有各状态下复杂的灯效和马达波形逻辑,我们仅将 LED_R/G/B 重新定义为内存中的虚拟 bit 变量。在 1ms 中断服务程序末尾,当检测到这些虚拟变量的数值发生改变时,自动触发一次单线数据发送,从而实现了上层逻辑的 100% 兼容。
三、 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] 的安全圆形范围内:
- 时钟待机页:右上角电池图标设在 $X=92, Y=27$,电量百分比文字 "85%" 设在 $X=62, Y=24$,留出 6 像素的安全间距。日期及星期 "JEU 07-02" 居中设在 $Y=155$。下方布防 "ARME" 位于 $X=52, Y=202$;撤防 "DESARME" 位于 $X=42, Y=202$。
- 配对菜单页:标题为 "MENU APPAI." 位于 $Y=30$。菜单项(如 "DETEC. PORTE")采用 3 行滚动布局,选中行($Y=110$)画出 $100 \times 28$ 边框,高亮显示。
- 告警与呼救页:本机 SOS 发射界面显示 "SOS EMIS" ($Y=125$)以及 "BRACELET ACTIF"($Y=155$)。接收普通传感器报警时,名称(如 "PORTE ENTREE")显示于 $Y=120$,下行显示 "ZONE X | ALARME" 位于 $Y=155$。
四、 验证任务清单 (Task Checklist)