Files
stc32g128k/Drivers/lcd.h

161 lines
6.2 KiB
C
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.

#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__