2026-07-15 15:57:37 +08:00
|
|
|
|
#ifndef __LCD_H__
|
|
|
|
|
|
#define __LCD_H__
|
|
|
|
|
|
|
|
|
|
|
|
#include "../App/config.h"
|
|
|
|
|
|
#include "stc32g.h"
|
|
|
|
|
|
|
2026-07-16 17:52:52 +08:00
|
|
|
|
/* ====== 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 控制芯片提供其正常显示所需的高质量偏置正负电压。
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void SGM_SendPulse(u8 pulse_cnt);
|
2026-07-16 17:52:52 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 执行 Truly AMOLED 屏幕的硬件复位
|
|
|
|
|
|
* @details 将 LCD_RST 引脚拉低保持一定时间后拉高,强制复位屏幕控制器,使其恢复到初始逻辑状态。
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void LCD_Reset(void);
|
2026-07-16 17:52:52 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 初始化 Truly AMOLED 屏幕控制器 RM69310
|
|
|
|
|
|
* @details 执行屏幕硬件复位,通过软件 SPI 总线依次向屏幕控制器写入寄存器偏置、显示周期、
|
|
|
|
|
|
* 通道选择、关闭休眠 (Sleep Out: 0x11)、开启显示 (Display On: 0x29) 等一系列
|
|
|
|
|
|
* 出厂初始化命令序列,使屏幕准备好接收显示像素帧。
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void LCD_Init(void);
|
2026-07-16 17:52:52 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 向屏幕写入 1 字节控制命令
|
|
|
|
|
|
* @param cmd 8 位命令字节
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void WriteComm(u8 cmd);
|
2026-07-16 17:52:52 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @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 限定后续的数据流写入范围,实现局部页面刷新或全部页面刷新。
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void LCD_SetWindow(u16 x_start, u16 x_end, u16 y_start, u16 y_end);
|
2026-07-16 17:52:52 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 以指定纯色清除整个屏幕显示内容
|
|
|
|
|
|
* @param color 16位 RGB565 颜色填充值
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void LCD_Clear(u16 color);
|
|
|
|
|
|
|
2026-07-16 17:52:52 +08:00
|
|
|
|
|
|
|
|
|
|
/* ====== 像素级图形几何算法与字符渲染接口 ====== */
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 在屏幕指定位置绘制一个单色填充的实心矩形
|
|
|
|
|
|
* @param x 矩形左上角 X 轴坐标
|
|
|
|
|
|
* @param y 矩形左上角 Y 轴坐标
|
|
|
|
|
|
* @param w 矩形宽度
|
|
|
|
|
|
* @param h 矩形高度
|
|
|
|
|
|
* @param color 16位 RGB565 填充色彩值
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void LCD_FillRect(u16 x, u16 y, u16 w, u16 h, u16 color);
|
2026-07-16 17:52:52 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 绘制一个无填充的空心矩形边界框
|
|
|
|
|
|
* @param x 矩形左上角 X 轴坐标
|
|
|
|
|
|
* @param y 矩形左上角 Y 轴坐标
|
|
|
|
|
|
* @param w 边框总宽度
|
|
|
|
|
|
* @param h 边框总高度
|
|
|
|
|
|
* @param color 16位 RGB565 边框线条色彩
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void LCD_DrawRectBorder(u16 x, u16 y, u16 w, u16 h, u16 color);
|
2026-07-16 17:52:52 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @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 位图背景色
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void LCD_DrawMonoBitmap(u16 x, u16 y, u16 w, u16 h, unsigned char code *bmp, u16 color, u16 bg_color);
|
2026-07-16 17:52:52 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 渲染显示一个 8x16 尺寸的普通英文 ASCII 字符
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void LCD_ShowChar8x16(u16 x, u16 y, char ch, u16 color, u16 bg_color);
|
2026-07-16 17:52:52 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 渲染显示一行普通的英文 ASCII 字符串 (左对齐)
|
|
|
|
|
|
* @param x 绘制行起始 X 坐标
|
|
|
|
|
|
* @param y 绘制行 Y 坐标
|
|
|
|
|
|
* @param str 字符串头指针
|
|
|
|
|
|
* @param color 字符颜色 (RGB565)
|
|
|
|
|
|
* @param bg_color 字符背景背景填充色
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void LCD_ShowString(u16 x, u16 y, char *str, u16 color, u16 bg_color);
|
2026-07-16 17:52:52 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 在指定 Y 轴高度上,水平居中对齐显示一行字符串
|
|
|
|
|
|
* @param y 渲染的 Y 轴高度 (0 ~ 239)
|
|
|
|
|
|
* @param str 字符串内容
|
|
|
|
|
|
* @param color 颜色值
|
|
|
|
|
|
* @param bg_color 背景色
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void LCD_ShowStringCentered(u16 y, char *str, u16 color, u16 bg_color);
|
2026-07-16 17:52:52 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 渲染显示一个 16x32 大号特粗尺寸的英文/数字字符
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void LCD_ShowChar16x32(u16 x, u16 y, char ch, u16 color, u16 bg_color);
|
2026-07-16 17:52:52 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 显示大号特粗 16x32 规格的数字/英文字符串 (如时钟大字显示)
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void LCD_ShowString16x32(u16 x, u16 y, char *str, u16 color, u16 bg_color);
|
2026-07-16 17:52:52 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 在指定 Y 轴高度上,居中显示 16x32 特大规格字体的字符串
|
|
|
|
|
|
* @param y 渲染的 Y 轴高度 (0 ~ 239)
|
|
|
|
|
|
* @param str 大字字符串内容
|
|
|
|
|
|
* @param color 大字前景色
|
|
|
|
|
|
* @param bg_color 大字背景色
|
|
|
|
|
|
*/
|
2026-07-15 15:57:37 +08:00
|
|
|
|
void LCD_ShowString16x32Centered(u16 y, char *str, u16 color, u16 bg_color);
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-07-16 17:52:52 +08:00
|
|
|
|
/* ====== 图标与点阵字模外部数据声明 ====== */
|
|
|
|
|
|
// 这些数据实体均定义在底层字库 lcd_font.h 文件中
|
2026-07-15 15:57:37 +08:00
|
|
|
|
|
2026-07-16 17:52:52 +08:00
|
|
|
|
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 烟感喇叭警示图标
|
2026-07-15 15:57:37 +08:00
|
|
|
|
|
2026-07-16 17:52:52 +08:00
|
|
|
|
#endif // __LCD_H__
|