docs: optimize all module breakdown files with architect-level details
This commit is contained in:
@@ -1,37 +1,33 @@
|
||||
# 模块拆分 - AMOLED 显示与字模驱动 (Docs/50_module-breakdown/mod-lcd.md)
|
||||
# 模块拆分 - AMOLED 显示与无障碍渲染 (Docs/50_module-breakdown/mod-lcd.md)
|
||||
|
||||
本模块管理 0.95寸 Truly AMOLED 屏幕引脚、电平控制、SPI 传输和无障碍大字/大图标渲染(分辨率为 120x240 像素)。
|
||||
本模块管理 Truly 0.95寸 AMOLED 屏的底层 SPI 通信、窗口控制、以及无障碍(A11y)超大字体和图标的渲染。
|
||||
|
||||
## 1. 模块职责说明
|
||||
|
||||
* **职责范围**:
|
||||
1. 提供底层的 SPI 单向命令/数据通道。
|
||||
2. 控制 `SGM_CTRL` 供电管脚以使能 SGM3833 PMIC。
|
||||
3. 支持屏幕窗口配置,实现底层清屏与局部像素写入。
|
||||
4. 读取 `lcd_font.h` 库,在指定坐标绘制 16x32 大字符、32x64 超大字符与 48x48/64x64 超大单色位图。
|
||||
5. 实现各业务状态屏幕无障碍(A11y)画面绘制与水平垂直居中对齐。
|
||||
1. 管理 RM69310 控制器通信,提供单向 SPI 指令/数据写操作。
|
||||
2. 提供 `SGM_CTRL`(引脚 `P3.4`)控制,配合低功耗模块实现屏幕 PMIC 的上电与彻底断电。
|
||||
3. **物理窗口偏置处理**:Truly 120x240 AMOLED 屏的 GRAM X 轴起始位置有 **+4 像素的偏置**,设置显示窗口时必须进行偏移修正:`LCD_SetWindow(x1 + 4, x2 + 4, y1, y2)`。
|
||||
4. **无障碍大字排版(A11y)渲染**:
|
||||
* 取消任何小于 16x32px 的微缩文本。
|
||||
* 时间显示使用 **32x64px** 超大点阵。
|
||||
* 防区图标使用 **48x48px** 或 **64x64px** 超大单色位图。
|
||||
* 在 120 像素宽的屏幕内,应用水平居中公式:`X_start = (120 - len * char_width) / 2`。
|
||||
5. **单页集中展示逻辑**:控制各菜单页面和子修改页面在屏幕中只显示单焦点,避免多行小字杂乱堆叠。
|
||||
|
||||
## 2. 底层显示接口
|
||||
---
|
||||
|
||||
* `void LCD_Init(void)`:初始化 LCD 引脚,置 `SGM_CTRL = 1` 使能 SGM3833 供电,并发送 RM69310 AMOLED 控制器的初始化寄存器配置序列。
|
||||
* `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)`:设置局部像素绘制范围,适配 Truly 120x240 竖屏对齐(处理 X 轴偏移量 +4)。
|
||||
* `void LCD_Clear(u16 color)`:将整块屏幕刷写为特定背景色。
|
||||
## 2. 接口与函数说明
|
||||
|
||||
## 3. 图文绘制与 UI 渲染
|
||||
|
||||
* `void LCD_ShowChar(u16 x, u16 y, char c, u16 fc, u16 bc)`:绘制字符。
|
||||
* `void LCD_ShowStringCentered(u16 y, char *str, u16 fc, u16 bc)`:在 120 像素宽屏幕上水平居中绘制 16x32px 宽的大字符串。
|
||||
* `void LCD_ShowString32x64Centered(u16 y, char *str, u16 fc, u16 bc)`:在 120 像素宽屏幕上水平居中绘制超大 (32x64px) 数字。
|
||||
* `void LCD_ShowImage(u16 x, u16 y, u16 w, u16 h, const u8 *img, u16 fc, u16 bc)`:在指定区域绘制单色位图(支持 32x32, 48x48, 64x64 格式)。
|
||||
* `void UI_ShowClockPage(SystemState state, u8 hour, u8 min)`:渲染时钟待机页面(120 宽大字版布局,32x64 走时时间,电量大图标)。
|
||||
* `void UI_ShowMenuPage(u8 selected_item)`:渲染无障碍主选择菜单,单页单大图标(48x48px)与大文字(16x32px)。
|
||||
* `void UI_ShowSetTimePage(u8 editing_field, u16 current_value)`:渲染大字单参数设定页面(如调整 `HEURE` 时的超大数值显示)。
|
||||
* `void UI_ShowArmDisarmSelectPage(u8 current_selection)`:渲染大图文布撤防手动切换界面。
|
||||
* `void UI_ShowAlarmPage(char *sensor_name, u8 zone)`:渲染防区告警页面,显示 64x64px 超大传感器图标、16x32px 闪烁文字与 4px 粗警告边框。
|
||||
* `void UI_ShowPairSearchPage(void)`:渲染对码等待搜索状态(含 64x64px 雷达图标)。
|
||||
* `void UI_ShowPairConfirmPage(u8 type, u8 selected_suffix)`:渲染对码序号微调页。类型与 48x48px 图标只读,序号 `[ selected_suffix ]` 以 32x64px 超大字模闪烁显示。
|
||||
* `void UI_ShowBindingPage(void)`:渲染与 IPC 绑定对码界面,含 48x48px 摄像头大图标与 16x32px 发送提示,底部显示 Factory ID。
|
||||
* `void LCD_Init(void)`:配置 `P1.1~P1.6` 控制线为推挽输出模式,并在拉高 `SGM_CTRL` 稳定后,发送 RM69310 初始化寄存器指令序列。
|
||||
* `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 像素。
|
||||
* `void LCD_Clear(u16 color)`:清屏为指定底色(常态使用全黑以节省功耗)。
|
||||
* `void LCD_ShowChar16x32(u16 x, u16 y, char c, u16 fc, u16 bc)`:在指定坐标绘制标准无障碍大字符(16x32点阵)。
|
||||
* `void LCD_ShowChar32x64(u16 x, u16 y, char c, u16 fc, u16 bc)`:在指定坐标绘制超大数字字符(32x64点阵)。
|
||||
* `void LCD_ShowImage(u16 x, u16 y, u16 w, u16 h, const u8 *img, u16 fc, u16 bc)`:渲染指定单色位图(支持 32x32/48x48/64x64/80x80 图标规格)。
|
||||
* `void LCD_ShowStringCentered(u16 y, char *str, u16 fc, u16 bc)`:16x32 规格字符串居中渲染,单行限制最多 7 个字符。
|
||||
* `void LCD_ShowString32x64Centered(u16 y, char *str, u16 fc, u16 bc)`:32x64 规格超大字符串居中渲染(如时钟显示)。
|
||||
|
||||
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V2 -->
|
||||
|
||||
Reference in New Issue
Block a user