177 lines
5.0 KiB
C
177 lines
5.0 KiB
C
/*
|
||
* 模块名称:ST7735S LCD驱动(底层)
|
||
* 模块功能:提供ST7735S屏幕的硬件SPI通信、初始化、填充、画点、方向控制等底层操作
|
||
* 绘图函数见 lcd.h
|
||
* 适用平台:STM32F103C8T6 + 硬件SPI2
|
||
* 作者:王建锋
|
||
* 创建日期:2026-07-13
|
||
* 修改记录:
|
||
* 2026-07-13 王建锋 创建初始版本
|
||
* 2026-07-14 王建锋 软件SPI -> 硬件SPI2
|
||
* 2026-07-14 王建锋 拆分:绘图函数移入 lcd.h
|
||
*/
|
||
|
||
#ifndef __ST7735S_H
|
||
#define __ST7735S_H
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#include "main.h"
|
||
#include <stdint.h>
|
||
|
||
/* 屏幕参数 */
|
||
#define LCD_WIDTH 128 /* 屏幕宽度 */
|
||
#define LCD_HEIGHT 160 /* 屏幕高度 */
|
||
|
||
/* 颜色定义 (RGB565) */
|
||
#define COLOR_BLACK 0x0000
|
||
#define COLOR_WHITE 0xFFFF
|
||
#define COLOR_RED 0xF800
|
||
#define COLOR_GREEN 0x07E0
|
||
#define COLOR_BLUE 0x001F
|
||
#define COLOR_YELLOW 0xFFE0
|
||
#define COLOR_CYAN 0x07FF
|
||
#define COLOR_MAGENTA 0xF81F
|
||
#define COLOR_ORANGE 0xFD20
|
||
#define COLOR_DARK_BLUE 0x0010
|
||
#define COLOR_DARK_GREEN 0x0200
|
||
#define COLOR_DARK_RED 0x8000
|
||
|
||
/* 颜色转换宏 */
|
||
#define RGB565(r, g, b) ((uint16_t)(((r) & 0xF8) << 8 | ((g) & 0xFC) << 3 | ((b) >> 3)))
|
||
|
||
/* LCD控制引脚定义 - 根据CubeMX配置修改 */
|
||
/* SCL(PB13)和SDA(PB15)由SPI2外设管理,无需GPIO定义 */
|
||
#define LCD_CS_PORT LCD_CS_GPIO_Port
|
||
#define LCD_CS_PIN LCD_CS_Pin
|
||
#define LCD_DC_PORT LCD_DC_GPIO_Port
|
||
#define LCD_DC_PIN LCD_DC_Pin
|
||
#define LCD_RST_PORT LCD_RST_GPIO_Port
|
||
#define LCD_RST_PIN LCD_RST_Pin
|
||
|
||
/* LCD命令定义 */
|
||
#define LCD_CMD_SWRESET 0x01 /* 软件复位 */
|
||
#define LCD_CMD_SLPOUT 0x11 /* 退出睡眠 */
|
||
#define LCD_CMD_DISPON 0x29 /* 显示开启 */
|
||
#define LCD_CMD_DISPOFF 0x28 /* 显示关闭 */
|
||
#define LCD_CMD_CASET 0x2A /* 列地址设置 */
|
||
#define LCD_CMD_RASET 0x2B /* 行地址设置 */
|
||
#define LCD_CMD_RAMWR 0x2C /* 写入显存 */
|
||
#define LCD_CMD_MADCTL 0x36 /* 存储器访问控制 */
|
||
#define LCD_CMD_COLMOD 0x3A /* 像素格式设置 */
|
||
#define LCD_CMD_FRMCTR1 0xB1 /* 帧率控制1 */
|
||
#define LCD_CMD_FRMCTR2 0xB2 /* 帧率控制2 */
|
||
#define LCD_CMD_FRMCTR3 0xB3 /* 帧率控制3 */
|
||
#define LCD_CMD_INVCTR 0xB4 /* 显示反转控制 */
|
||
#define LCD_CMD_PWCTR1 0xC0 /* 功率控制1 */
|
||
#define LCD_CMD_PWCTR2 0xC1 /* 功率控制2 */
|
||
#define LCD_CMD_PWCTR3 0xC2 /* 功率控制3 */
|
||
#define LCD_CMD_PWCTR4 0xC3 /* 功率控制4 */
|
||
#define LCD_CMD_PWCTR5 0xC4 /* 功率控制5 */
|
||
#define LCD_CMD_VMCTR1 0xC5 /* VCOM控制1 */
|
||
#define LCD_CMD_GMCTRP1 0xE0 /* Gamma正向校正 */
|
||
#define LCD_CMD_GMCTRN1 0xE1 /* Gamma反向校正 */
|
||
|
||
/* 外部变量 - LCD宽高,由旋转函数更新 */
|
||
extern uint16_t s_lcd_width;
|
||
extern uint16_t s_lcd_height;
|
||
|
||
/* === 底层SPI通信函数 === */
|
||
|
||
/*
|
||
* 函数功能:硬件SPI写一个字节
|
||
* 入口参数:data - 要发送的数据
|
||
* 返回值:无
|
||
*/
|
||
void st7735s_spi_write_byte(uint8_t data);
|
||
|
||
/*
|
||
* 函数功能:硬件SPI批量写数据
|
||
* 入口参数:data - 数据缓冲区
|
||
* len - 字节数
|
||
* 返回值:无
|
||
*/
|
||
void st7735s_spi_write_bulk(const uint8_t *data, uint32_t len);
|
||
|
||
/*
|
||
* 函数功能:写入命令(CS+DC管理,单字节)
|
||
* 入口参数:cmd - 命令字节
|
||
* 返回值:无
|
||
*/
|
||
void st7735s_write_cmd(uint8_t cmd);
|
||
|
||
/*
|
||
* 函数功能:写入数据(CS+DC管理,单字节)
|
||
* 入口参数:data - 数据字节
|
||
* 返回值:无
|
||
*/
|
||
void st7735s_write_data(uint8_t data);
|
||
|
||
/* === 驱动控制函数 === */
|
||
|
||
/*
|
||
* 函数功能:设置显示窗口
|
||
* 入口参数:x1 - 起始列
|
||
* y1 - 起始行
|
||
* x2 - 结束列
|
||
* y2 - 结束行
|
||
* 返回值:无
|
||
*/
|
||
void st7735s_set_window(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
|
||
|
||
/*
|
||
* 函数功能:LCD初始化
|
||
* 入口参数:无
|
||
* 返回值:无
|
||
*/
|
||
void st7735s_init(void);
|
||
|
||
/*
|
||
* 函数功能:全屏填充
|
||
* 入口参数:color - 填充颜色 (RGB565)
|
||
* 返回值:无
|
||
*/
|
||
void st7735s_fill_screen(uint16_t color);
|
||
|
||
/*
|
||
* 函数功能:填充矩形区域
|
||
* 入口参数:x1 - 起始列
|
||
* y1 - 起始行
|
||
* x2 - 结束列
|
||
* y2 - 结束行
|
||
* color - 填充颜色 (RGB565)
|
||
* 返回值:无
|
||
*/
|
||
void st7735s_fill_rect(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
|
||
|
||
/*
|
||
* 函数功能:画点
|
||
* 入口参数:x - 列坐标
|
||
* y - 行坐标
|
||
* color - 颜色 (RGB565)
|
||
* 返回值:无
|
||
*/
|
||
void st7735s_draw_pixel(uint16_t x, uint16_t y, uint16_t color);
|
||
|
||
/*
|
||
* 函数功能:设置屏幕方向
|
||
* 入口参数:rotation - 方向 (0-3)
|
||
* 返回值:无
|
||
*/
|
||
void st7735s_set_rotation(uint8_t rotation);
|
||
|
||
/*
|
||
* 函数功能:设置背光
|
||
* 入口参数:state - 1:开 0:关
|
||
* 返回值:无
|
||
*/
|
||
void st7735s_backlight(uint8_t state);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* __ST7735S_H */
|