#ifndef __LCD_H__ #define __LCD_H__ #include "../App/config.h" #include "stc32g.h" /* ====== Truly AMOLED RM69310 屏幕驱动 (RGB565格式) 常数定义 ====== */ // 16位 RGB565 颜色常量定义: // 格式为:Red(5位) Green(6位) Blue(5位) 拼接而成的 16 位整数值 #define COLOR_BLACK 0x0000 // 黑色 #define COLOR_WHITE 0xFFFF // 白色 #define COLOR_CYAN 0x073F // 青色/天蓝色 #define COLOR_RED 0xF800 // 红色 #define COLOR_GREEN 0x07E0 // 绿色 #define COLOR_BLUE 0x001F // 蓝色 #define COLOR_GRAY 0x5AEB // 灰色 #define COLOR_AMBER 0xFDC0 // 琥珀色/橙黄色 /* ====== 屏幕电源控制与基本驱动接口 ====== */ /** * @brief 通过脉冲序列为 SGM3833 屏幕负压供电芯片发送开启配置脉冲 * @param pulse_cnt 发送的脉冲个数 (例如 27 次脉冲开启并稳压屏幕输出) * @details 采用单线脉冲边沿计数调制技术,为 RM69310 控制芯片提供其正常显示所需的高质量偏置正负电压。 */ void SGM_SendPulse(u8 pulse_cnt); /** * @brief 执行 Truly AMOLED 屏幕的硬件复位 * @details 将 LCD_RST 引脚拉低保持一定时间后拉高,强制复位屏幕控制器,使其恢复到初始逻辑状态。 */ void LCD_Reset(void); /** * @brief 初始化 Truly AMOLED 屏幕控制器 RM69310 * @details 执行屏幕硬件复位,通过软件 SPI 总线依次向屏幕控制器写入寄存器偏置、显示周期、 * 通道选择、关闭休眠 (Sleep Out: 0x11)、开启显示 (Display On: 0x29) 等一系列 * 出厂初始化命令序列,使屏幕准备好接收显示像素帧。 */ void LCD_Init(void); /** * @brief 向屏幕写入 1 字节控制命令 * @param cmd 8 位命令字节 */ void WriteComm(u8 cmd); /** * @brief 设定屏幕的数据更新绘制窗口区域 (显存写入范围) * @param x_start X 轴起始坐标 (0 ~ 119) * @param x_end X 轴终止坐标 (0 ~ 119) * @param y_start Y 轴起始坐标 (0 ~ 239) * @param y_end Y 轴终止坐标 (0 ~ 239) * @details 限定后续的数据流写入范围,实现局部页面刷新或全部页面刷新。 */ void LCD_SetWindow(u16 x_start, u16 x_end, u16 y_start, u16 y_end); /** * @brief 以指定纯色清除整个屏幕显示内容 * @param color 16位 RGB565 颜色填充值 */ void LCD_Clear(u16 color); /* ====== 像素级图形几何算法与字符渲染接口 ====== */ /** * @brief 在屏幕指定位置绘制一个单色填充的实心矩形 * @param x 矩形左上角 X 轴坐标 * @param y 矩形左上角 Y 轴坐标 * @param w 矩形宽度 * @param h 矩形高度 * @param color 16位 RGB565 填充色彩值 */ void LCD_FillRect(u16 x, u16 y, u16 w, u16 h, u16 color); /** * @brief 绘制一个无填充的空心矩形边界框 * @param x 矩形左上角 X 轴坐标 * @param y 矩形左上角 Y 轴坐标 * @param w 边框总宽度 * @param h 边框总高度 * @param color 16位 RGB565 边框线条色彩 */ void LCD_DrawRectBorder(u16 x, u16 y, u16 w, u16 h, u16 color); /** * @brief 绘制渲染一个自定义宽高的单色单色位图 * @param x 绘制的左上角 X 轴坐标 * @param y 绘制的左上角 Y 轴坐标 * @param w 单色图宽度 (单位: 像素点数) * @param h 单色图高度 * @param bmp 单色位图所在的 FLASH code 区指针 (1位对应1像素:1画前景色,0画背景色) * @param color 位图前景色 (RGB565) * @param bg_color 位图背景色 */ void LCD_DrawMonoBitmap(u16 x, u16 y, u16 w, u16 h, unsigned char code *bmp, u16 color, u16 bg_color); /** * @brief 渲染显示一个 8x16 尺寸的普通英文 ASCII 字符 */ void LCD_ShowChar8x16(u16 x, u16 y, char ch, u16 color, u16 bg_color); /** * @brief 渲染显示一行普通的英文 ASCII 字符串 (左对齐) * @param x 绘制行起始 X 坐标 * @param y 绘制行 Y 坐标 * @param str 字符串头指针 * @param color 字符颜色 (RGB565) * @param bg_color 字符背景背景填充色 */ void LCD_ShowString(u16 x, u16 y, char *str, u16 color, u16 bg_color); /** * @brief 在指定 Y 轴高度上,水平居中对齐显示一行字符串 * @param y 渲染的 Y 轴高度 (0 ~ 239) * @param str 字符串内容 * @param color 颜色值 * @param bg_color 背景色 */ void LCD_ShowStringCentered(u16 y, char *str, u16 color, u16 bg_color); /** * @brief 渲染显示一个 16x32 大号特粗尺寸的英文/数字字符 */ void LCD_ShowChar16x32(u16 x, u16 y, char ch, u16 color, u16 bg_color); /** * @brief 显示大号特粗 16x32 规格的数字/英文字符串 (如时钟大字显示) */ void LCD_ShowString16x32(u16 x, u16 y, char *str, u16 color, u16 bg_color); /** * @brief 在指定 Y 轴高度上,居中显示 16x32 特大规格字体的字符串 * @param y 渲染的 Y 轴高度 (0 ~ 239) * @param str 大字字符串内容 * @param color 大字前景色 * @param bg_color 大字背景色 */ void LCD_ShowString16x32Centered(u16 y, char *str, u16 color, u16 bg_color); /* ====== 图标与点阵字模外部数据声明 ====== */ // 这些数据实体均定义在底层字库 lcd_font.h 文件中 extern unsigned char code FONT_8x16[95][16]; // 8x16 英文 ASCII 点阵字库 extern unsigned char code bmp_battery_20x10[]; // 20x10 电池电量指示位图 extern unsigned char code bmp_lock_16x16[]; // 16x16 闭合锁头位图 extern unsigned char code bmp_unlock_16x16[]; // 16x16 开启锁头位图 extern unsigned char code bmp_radar_32x32_f1[]; // 32x32 雷达扩散帧 1 extern unsigned char code bmp_radar_32x32_f2[]; // 32x32 雷达扩散帧 2 extern unsigned char code bmp_radar_32x32_f3[]; // 32x32 雷达扩散帧 3 extern unsigned char code bmp_confirm_lock_32x32[]; // 32x32 传感器类型锁头大图 extern unsigned char code bmp_checkmark_32x32[]; // 32x32 配对成功大对勾 extern unsigned char code bmp_cross_32x32[]; // 32x32 配对失败大红叉 extern unsigned char code bmp_door_32x32[]; // 32x32 门磁大警告图标 extern unsigned char code bmp_siren_32x32[]; // 32x32 烟感喇叭警示图标 #endif // __LCD_H__