引言
- 最近用ESP32S3 的 IDF写 ST7735S的小项目,但用组件管理器有点问题,干脆手动移植一下
代码内容
头文件:
#ifndef _LCD_ST7735S_H_
#define _LCD_ST7735S_H_
///设备选择
#define ESP32_SPI 1
#define STM32 0 ///需要自己添加GPIO SPI 代码
///屏幕参数
#define LCD_DIR_VAERTICAL1 0 ///<竖屏1
#define LCD_DIR_VAERTICAL2 1 ///<竖屏2
#define LCD_DIR_TRANSVERSET1 2 ///<横屏1
#define LCD_DIR_TRANSVERSET2 3 ///<横屏2
#define LCD_DIR LCD_DIR_VAERTICAL2 ///<显示方向
#if (LCD_DIR==LCD_DIR_VAERTICAL1||LCD_DIR==LCD_DIR_VAERTICAL2)
#define LCD_ROW_SIZE 128 ///<屏幕行像素
#define LCD_COLUMN_SIZE 160 ///<屏幕列像素
#else
#define LCD_ROW_SIZE 160 ///<屏幕行像素
#define LCD_COLUMN_SIZE 128 ///<屏幕列像素
#endif
#define LCD_DELAY(t) vTaskDelay(t) ///<延时函数
///spi
#define LCD_HARDWARE_CS 1 ///< 1选择 硬件CS 0选择 软件gpio CS
#if ESP32_SPI
#define LCD_SPI_HOST SPI2_HOST ///< 哪个 spi
#define LCD_SPI_MODE 1 ///<spi模式 4种 0~3
#define LCD_PIN_CS GPIO_NUM_15 ///< 片选
#define LCD_PIN_RES GPIO_NUM_2 ///< 复位
#define LCD_PIN_A0 GPIO_NUM_3 ///< 命令/数据
#define LCD_PIN_SDA GPIO_NUM_13 ///< MOSI
#define LCD_PIN_SCL GPIO_NUM_14 ///< spi CLK
/*io操作*/
#define SET_LCD_CS gpio_set_level(LCD_PIN_CS, 1)
#define SET_LCD_RES gpio_set_level(LCD_PIN_RES, 1)
#define SET_LCD_A0 gpio_set_level(LCD_PIN_A0, 1)
#define SET_LCD_SDA gpio_set_level(LCD_PIN_SDA, 1)
#define SET_LCD_SCL gpio_set_level(LCD_PIN_SCL, 1)
#define CLR_LCD_CS gpio_set_level(LCD_PIN_CS, 0)
#define CLR_LCD_RES gpio_set_level(LCD_PIN_RES, 0)
#define CLR_LCD_A0 gpio_set_level(LCD_PIN_A0, 0)
#define CLR_LCD_SDA gpio_set_level(LCD_PIN_SDA, 0)
#define CLR_LCD_SCL gpio_set_level(LCD_PIN_SCL, 0)
#endif
#if STM32
#define LCD_PORT GPIOE
#define LCD_PIN_CS GPIO_Pin_11
#define LCD_PIN_RES GPIO_Pin_8
#define LCD_PIN_A0 GPIO_Pin_10
#define LCD_PIN_SDA GPIO_Pin_12
#define LCD_PIN_SCL GPIO_Pin_9
#define SET_LCD_CS GPIO_SetBits(LCD_PORT, LCD_PIN_CS)
#define SET_LCD_RES GPIO_SetBits(LCD_PORT, LCD_PIN_RES)
#define SET_LCD_A0 GPIO_SetBits(LCD_PORT, LCD_PIN_A0)
#define SET_LCD_SDA GPIO_SetBits(LCD_PORT, LCD_PIN_SDA)
#define SET_LCD_SCL GPIO_SetBits(LCD_PORT, LCD_PIN_SCL)
#define CLR_LCD_CS GPIO_ResetBits(LCD_PORT, LCD_PIN_CS)
#define CLR_LCD_RES GPIO_ResetBits(LCD_PORT, LCD_PIN_RES)
#define CLR_LCD_A0 GPIO_ResetBits(LCD_PORT, LCD_PIN_A0)
#define CLR_LCD_SDA GPIO_ResetBits(LCD_PORT, LCD_PIN_SDA)
#define CLR_LCD_SCL GPIO_ResetBits(LCD_PORT, LCD_PIN_SCL)
#endif
/*--颜色--*/
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕红色
#define GRAY 0X8430 //灰色
#define DARKBLUE 0X01CF //深蓝色
#define LIGHTBLUE 0X7D7C //浅蓝色
#define GRAYBLUE 0X5458 //灰蓝色
void LcdGpioSpiInit(void);
/// @brief 屏幕初始化
/// @param None
void lcdInit(void);
void lcdSetAddress(unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2);
/// @brief 清屏
/// @param color 填充颜色
void lcdClear(unsigned short color);
/// @brief 画点
/// @param x 位置
/// @param y 位置
/// @param color 颜色
void LCD_DrawPoint(unsigned short x, unsigned short y, unsigned short color);
void LCD_DisplayOn(void); //开显示
void LCD_DisplayOff(void); //关显示
void LCD_Draw_Circle(unsigned short x0, unsigned short y0, unsigned char r, unsigned short color); //画圆
void LCD_DrawFullCircle(unsigned short Xpos, unsigned short Ypos, unsigned short Radius, unsigned short Color);
void LCD_Fill(unsigned short sx, unsigned short sy, unsigned short ex, unsigned short ey, unsigned short color); //填充区域
void LCD_DrawLine(unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, unsigned short color); //画线
void LCD_DrawRectangle(unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, unsigned short color); //画矩形
// void LCD_ShowChar(unsigned short x, unsigned short y, unsigned char num, unsigned char size, unsigned char mode, unsigned short pen_color, unsigned short back_color); //写ASCII字符
// void LCD_ShowString(unsigned short x, unsigned short y, unsigned short width, unsigned short height, unsigned char size, unsigned char *p, unsigned short pen_color, unsigned short back_color); //写ASCII字符串