Files
stc32g128k/Docs/50_module-breakdown/mod-lcd.md

34 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 模块拆分 - AMOLED 显示与无障碍渲染 (Docs/50_module-breakdown/mod-lcd.md)
本模块管理 Truly 0.95寸 AMOLED 屏的底层 SPI 通信、窗口控制、以及无障碍A11y超大字体和图标的渲染。
## 1. 模块职责说明
* **职责范围**
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)`:配置 `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 -->