Files
2026-07-14 17:51:39 +08:00

177 lines
5.0 KiB
C
Raw Permalink 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.
/*
* 模块名称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 */