240x400:stm32 HAL S6D041C 3寸液晶屏驱动

最近得到了这个3寸分辨率240x400的液晶屏, 通过看手册写了驱动程序, 使用cubmex来配置的

先放初始化代码, 默认是RGB 横屏

整体代码为

#include "driver_LCD_S6D04D1.h"#include "delay.h"/*** 生长方向//------> Y 480||||X320***/#define LCD_PIX_WIDTH 400#define LCD_PIX_HEIGHT 240#define LCD_SET_X_CMD 0X2A#define LCD_SET_Y_CMD 0X2B#define LCD_WRITE_GRAM_CMD 0X2Cstatic LCDTypedef *g_mlcd;static void lcd_config(LCDTypedef *lcd);static void lcd_init(void);//----------- start---------// 初始化void driver_LCD_S6D04D1_init(LCDTypedef *lcd){g_mlcd = lcd;// 配置初始化lcd_config(lcd);// 初始化液晶屏lcd_init();}// 写命令static void lcd_write_reg(uint16_t value){FSMC_LCD->REG = value;}// 写数据static void lcd_write_data(uint16_t value){FSMC_LCD->RAM = value;}// 写颜色static void lcd_write_color(uint16_t value){#if USE_8080_16BITFSMC_LCD->RAM = value;#elseFSMC_LCD->RAM = value>>8;FSMC_LCD->RAM = value&0xff;#endif}// 读取数据static uint16_t lcd_read_data(void){volatile uint16_t value = FSMC_LCD->RAM;return value;}static void lcd_write_gram_pre(void){FSMC_LCD->REG = LCD_WRITE_GRAM_CMD;}// 写窗口static void lcd_set_windows(uint16_t start_x,uint16_t start_y,uint16_t end_x,uint16_t end_y){uint16_t msx = 0;uint16_t msy = 0;uint16_t mex = 0;uint16_t mey = 0;#if LCD_USE_HARD_DIR msx =start_x; msy =start_y; mex =end_x; mey =end_y;#else // 竖屏 if(g_mlcd->dir== LCD_DIR_VERTICAL) { // 原生分辨率 msx = start_y;msy = LCD_PIX_HEIGHT - end_x -1;mex = end_y,mey = LCD_PIX_HEIGHT - start_x -1; } else { // 横屏 msx =start_x; msy =start_y; mex =end_x; mey =end_y; }#endiflcd_write_reg(LCD_SET_X_CMD); lcd_write_data(msx>>8);lcd_write_data(msx&0xff);lcd_write_data(mex>>8);lcd_write_data(mex&0xff);lcd_write_reg(LCD_SET_Y_CMD); lcd_write_data(msy>>8);lcd_write_data(msy&0xff);lcd_write_data(mey>>8);lcd_write_data(mey&0xff);lcd_write_reg(LCD_WRITE_GRAM_CMD); }// 写窗口static void lcd_set_cursor(uint16_t x,uint16_t y){uint16_t mx = 0;uint16_t my = 0;#if LCD_USE_HARD_DIRmx = x;my = y;#else// 竖屏if(g_mlcd->dir == LCD_DIR_VERTICAL) {mx = y;my = LCD_PIX_HEIGHT - x -1;} else { // 横屏mx = x;my = y;}#endiflcd_write_reg(LCD_SET_X_CMD); lcd_write_data(mx>>8);lcd_write_data(mx&0xff);lcd_write_data(mx>>8);lcd_write_data(mx&0xff);lcd_write_reg(LCD_SET_Y_CMD); lcd_write_data(my>>8);lcd_write_data(my&0xff);lcd_write_data(my>>8);lcd_write_data(my&0xff);lcd_write_reg(LCD_WRITE_GRAM_CMD); }// ----------- end -----------// 配置初始化static void lcd_config(LCDTypedef *lcd){lcd->width = LCD_PIX_WIDTH;lcd->height = LCD_PIX_HEIGHT;lcd->lcd_8080.set_x_cmd = LCD_SET_X_CMD;lcd->lcd_8080.set_y_cmd = LCD_SET_Y_CMD;lcd->lcd_8080.w_ram_cmd = LCD_WRITE_GRAM_CMD;lcd->lcd_8080.set_set_windows = lcd_set_windows;lcd->lcd_8080.set_set_cursor = lcd_set_cursor;lcd->lcd_8080.write_reg = lcd_write_reg;lcd->lcd_8080.write_data = lcd_write_data;lcd->lcd_8080.read_data = lcd_read_data;lcd->lcd_8080.write_color = lcd_write_color;lcd->lcd_8080.write_gram_pre = lcd_write_gram_pre;}// 液晶初始化static void lcd_init(void){// VCOM 3.3Vlcd_write_reg(0xf4);lcd_write_data(0x59);lcd_write_data(0x59);lcd_write_data(0x52);lcd_write_data(0x52);lcd_write_data(0x11);// Source Output Control Registerlcd_write_reg(0xf5);lcd_write_data(0x12);lcd_write_data(0x00);lcd_write_data(0x0b);lcd_write_data(0xf0);lcd_write_data(0x00);delay_ms(10);// Power Control Registerlcd_write_reg(0xf3);lcd_write_data(0xff);lcd_write_data(0x2a);lcd_write_data(0x2a);lcd_write_data(0x0a);lcd_write_data(0x22);lcd_write_data(0x72);lcd_write_data(0x72);lcd_write_data(0x20);// Interface Pixel Formatlcd_write_reg(0x3a);lcd_write_data(0x55);// Display Control Registerlcd_write_reg(0xf2);lcd_write_data(0x10);lcd_write_data(0x10);lcd_write_data(0x01);lcd_write_data(0x08);lcd_write_data(0x08);lcd_write_data(0x08);lcd_write_data(0x08);lcd_write_data(0x00);lcd_write_data(0x00);//04lcd_write_data(0x1a);lcd_write_data(0x1a);// Interface Control Registerlcd_write_reg(0xf6);lcd_write_data(0x48);lcd_write_data(0x88);//88lcd_write_data(0x10);// Positive Gamma Control Register for Redlcd_write_reg(0xf7);lcd_write_data(0x0d);lcd_write_data(0x00);lcd_write_data(0x03);lcd_write_data(0x0e);lcd_write_data(0x1c);lcd_write_data(0x29);lcd_write_data(0x2d);lcd_write_data(0x34);lcd_write_data(0x0e);lcd_write_data(0x12);lcd_write_data(0x24);lcd_write_data(0x1e);lcd_write_data(0x07);lcd_write_data(0x22);lcd_write_data(0x22);// Negative Gamma Control Register for Redlcd_write_reg(0xf8);lcd_write_data(0x0d);lcd_write_data(0x00);lcd_write_data(0x03);lcd_write_data(0x0e);lcd_write_data(0x1c);lcd_write_data(0x29);lcd_write_data(0x2d);lcd_write_data(0x34);lcd_write_data(0x0e);lcd_write_data(0x12);lcd_write_data(0x24);lcd_write_data(0x1e);lcd_write_data(0x07);lcd_write_data(0x22);lcd_write_data(0x22);// Positive Gamma Control Register for Green lcd_write_reg(0xf9);lcd_write_data(0x1e);lcd_write_data(0x00);lcd_write_data(0x0a);lcd_write_data(0x19);lcd_write_data(0x23);lcd_write_data(0x31);lcd_write_data(0x37);lcd_write_data(0x3f);lcd_write_data(0x01);lcd_write_data(0x03);lcd_write_data(0x16);lcd_write_data(0x19);lcd_write_data(0x07);lcd_write_data(0x22);lcd_write_data(0x22);// Negative Gamma Control Register for Greenlcd_write_reg(0xfA);lcd_write_data(0x0D);lcd_write_data(0x11);lcd_write_data(0x0A);lcd_write_data(0x19);lcd_write_data(0x23);lcd_write_data(0x31);lcd_write_data(0x37);lcd_write_data(0x3f);lcd_write_data(0x01);lcd_write_data(0x03);lcd_write_data(0x16);lcd_write_data(0x19);lcd_write_data(0x07);lcd_write_data(0x22);lcd_write_data(0x22);// Positive Gamma Control Register for Bluelcd_write_reg(0xfB);lcd_write_data(0x0D);lcd_write_data(0x00);lcd_write_data(0x03);lcd_write_data(0x0E);lcd_write_data(0x1C);lcd_write_data(0x29);lcd_write_data(0x2D);lcd_write_data(0x34);lcd_write_data(0x0E);lcd_write_data(0x12);lcd_write_data(0x24);lcd_write_data(0x1E);lcd_write_data(0x07);lcd_write_data(0x22);lcd_write_data(0x22);// Negative Gamma Control Register for Bluelcd_write_reg(0xfC);lcd_write_data(0x0D);lcd_write_data(0x00);lcd_write_data(0x03);lcd_write_data(0x0E);lcd_write_data(0x1C);lcd_write_data(0x29);lcd_write_data(0x2D);lcd_write_data(0x34);lcd_write_data(0x0E);lcd_write_data(0x12);lcd_write_data(0x24);lcd_write_data(0x1E);lcd_write_data(0x07);lcd_write_data(0x22);lcd_write_data(0x22);// Gate Control Registerlcd_write_reg(0xFD);lcd_write_data(0x11);lcd_write_data(0x01);// Memory Data Access Control --RGB 和BRG切换 和刷图方向控制 262页 bit3控制RGB BGR, 0为RGBlcd_write_reg(0x36);#if LCD_USE_HARD_DIR// 竖屏if(g_mlcd->dir == LCD_DIR_VERTICAL) {lcd_write_data(0x00);} else { // 横屏lcd_write_data(0x60);}#elselcd_write_data(0x60);#endif// RGB// BRG// lcd_write_data(0x08);// // Tearing Effect Line ONlcd_write_reg(0x35);lcd_write_data(0x00);// Column Address Setlcd_write_reg(0x2A);lcd_write_data(0x00);lcd_write_data(0x00);lcd_write_data(0x00);lcd_write_data(0xEF);// Page Address Set lcd_write_reg(0x2B);lcd_write_data(0x00);lcd_write_data(0x00);lcd_write_data(0x01);lcd_write_data(0x8F);// KEY Control Registerlcd_write_reg(0xF1);lcd_write_data(0x5A);// Logic Test Register2 lcd_write_reg(0xFF);lcd_write_data(0x00);lcd_write_data(0x00);lcd_write_data(0x00);lcd_write_data(0x40);// Sleep Outlcd_write_reg(0x11);delay_ms(120);// KEY Control Registerlcd_write_reg(0xF1);lcd_write_data(0x00);// Display Onlcd_write_reg(0x29);delay_ms(40);}

我移植了LVGL, 可以正常运行

下载地址:  包括了3寸S6D04D1  8位液晶和3.5寸ILI9481 8位和16位的驱动,  平台是stm32407 +cubmex  +LVGL

git:

csdn: https://download.csdn.net/download/a2267542848/14047743

H750

https://download.csdn.net/download/a2267542848/14047751

相关推荐

相关文章