目录
一、硬件介绍
1. STM32F03C8T6
2. 1.8寸LCD
二、STM32CubeMX配置
1. 接口配置
编辑
2. 其他配置
三、LCD图片取模
1. 打开图片(.bmp格式)
2. 设置
3. 点击保存数组。
4. 将生成的数组复制到lcd_picture.h文件中。
四、代码测试(模拟SPI)
1. lcd_init.h
2. lcd_init.c
3. 工程获取地址
一、硬件介绍
1. STM32F03C8T6
2. 1.8寸LCD
(1)GND:接地。
(2)VCC:3.3V( 尽量不要接 5V )。
(3)SCL / SCK:SPI时钟线, 代码是模拟SPI,所以不一定要接 SPI的引脚。
(4)SDA / DIN:SPI 数据线( MOSI引脚 )。代码是模拟 SPI,所以不一定要接SPI的引脚。
(5)RES / RST:重启接口(复位)。最好和单片机的复位引脚相接。
(6)DC / RS:SPI数据 /命令选择引脚。
(7)CS / CE:SPI CS片选接口。
(8)BL / LED:背光控制,默认浮动,高电平关闭。
二、STM32CubeMX配置
1. 接口配置
2. 其他配置
三、LCD图片取模
1. 打开图片(.bmp格式)
2. 设置
3. 点击保存数组。
4. 将生成的数组复制到lcd_picture.h文件中。
四、代码测试(模拟SPI)
1. lcd_init.h
/*
*********************************************************************************************************
*
* 模块名称 : LCD初始化驱动文件
* 文件名称 : lcd_init.h
*
*********************************************************************************************************
*/
#ifndef __LCD_INIT_H
#define __LCD_INIT_H/*头文件包含区*/
#include "main.h"#define USE_HORIZONTAL 1 // 设置横屏或者竖屏显示 0或1为竖屏 2或3为横屏#if USE_HORIZONTAL==0 || USE_HORIZONTAL==1
#define LCD_W 128
#define LCD_H 160#else
#define LCD_W 160
#define LCD_H 128
#endif//#define LCD_SCLK_Clr() GPIO_ResetBits(SCL_GPIO_Port,SCL_Pin) // SCL=SCLK
//#define LCD_SCLK_Set() GPIO_SetBits(SCL_GPIO_Port,SCL_Pin)//#define LCD_MOSI_Clr() GPIO_ResetBits(SDA_GPIO_Port,SDA_Pin) // SDA=MOSI
//#define LCD_MOSI_Set() GPIO_SetBits(SDA_GPIO_Port,SDA_Pin)//#define LCD_RES_Clr() GPIO_ResetBits(RES_GPIO_Port,RES_Pin) // RES
//#define LCD_RES_Set() GPIO_SetBits(RES_GPIO_Port,RES_Pin)//#define LCD_DC_Clr() GPIO_ResetBits(DC_GPIO_Port,DC_Pin) // DC
//#define LCD_DC_Set() GPIO_SetBits(DC_GPIO_Port,DC_Pin)//#define LCD_CS_Clr() GPIO_ResetBits(CS_GPIO_Port,CS_Pin) // CS
//#define LCD_CS_Set() GPIO_SetBits(CS_GPIO_Port,CS_Pin)//#define LCD_BLK_Clr() GPIO_ResetBits(BL_GPIO_Port,BL_Pin) // BLK
//#define LCD_BLK_Set() GPIO_SetBits(BL_GPIO_Port,BL_Pin)#define LCD_SCLK_Clr() HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_RESET); //SCL=SCLK
#define LCD_SCLK_Set() HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_SET);#define LCD_MOSI_Clr() HAL_GPIO_WritePin(SDA_GPIO_Port, SDA_Pin, GPIO_PIN_RESET); //SDA=MOSI
#define LCD_MOSI_Set() HAL_GPIO_WritePin(SDA_GPIO_Port, SDA_Pin, GPIO_PIN_SET);#define LCD_RES_Clr() HAL_GPIO_WritePin(RES_GPIO_Port, RES_Pin, GPIO_PIN_RESET); //RES
#define LCD_RES_Set() HAL_GPIO_WritePin(RES_GPIO_Port, RES_Pin, GPIO_PIN_SET);#define LCD_DC_Clr() HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_RESET); //DC
#define LCD_DC_Set() HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_SET);#define LCD_CS_Clr() HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET); //CS
#define LCD_CS_Set() HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);#define LCD_BLK_Clr() HAL_GPIO_WritePin(BL_GPIO_Port, BL_Pin, GPIO_PIN_RESET); //BLK
#define LCD_BLK_Set() HAL_GPIO_WritePin(BL_GPIO_Port, BL_Pin, GPIO_PIN_SET);/*函数声明区*/
void LCD_Writ_Bus(u8 dat); // 模拟SPI时序
void LCD_WR_DATA8(u8 dat); // 写入一个字节
void LCD_WR_DATA(u16 dat); // 写入两个字节
void LCD_WR_REG(u8 dat); // 写入一个指令
void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2); // 设置坐标函数
void LCD_Init(void); // LCD初始化#endif
2. lcd_init.c
/*
*********************************************************************************************************
*
* 模块名称 : LCD初始化驱动文件
* 文件名称 : lcd_init.c
*
*********************************************************************************************************
*//*头文件包含区*/
#include "lcd_init.h"/******************************************************************************函数说明:LCD串行数据写入函数入口数据:dat 要写入的串行数据返回值: 无
******************************************************************************/
void LCD_Writ_Bus(u8 dat)
{ u8 i;LCD_CS_Clr();for(i=0;i<8;i++){ LCD_SCLK_Clr();if(dat&0x80){LCD_MOSI_Set();}else{LCD_MOSI_Clr();}LCD_SCLK_Set();dat<<=1;} LCD_CS_Set();
}/******************************************************************************函数说明:LCD写入数据入口数据:dat 写入的数据返回值: 无
******************************************************************************/
void LCD_WR_DATA8(u8 dat)
{LCD_Writ_Bus(dat);
}/******************************************************************************函数说明:LCD写入数据入口数据:dat 写入的数据返回值: 无
******************************************************************************/
void LCD_WR_DATA(u16 dat)
{LCD_Writ_Bus(dat>>8);LCD_Writ_Bus(dat);
}/******************************************************************************函数说明:LCD写入命令入口数据:dat 写入的命令返回值: 无
******************************************************************************/
void LCD_WR_REG(u8 dat)
{LCD_DC_Clr();//写命令LCD_Writ_Bus(dat);LCD_DC_Set();//写数据
}/******************************************************************************函数说明:设置起始和结束地址入口数据:x1,x2 设置列的起始和结束地址y1,y2 设置行的起始和结束地址返回值: 无
******************************************************************************/
void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2)
{if(USE_HORIZONTAL==0){LCD_WR_REG(0x2a);//列地址设置LCD_WR_DATA(x1);LCD_WR_DATA(x2);LCD_WR_REG(0x2b);//行地址设置LCD_WR_DATA(y1);LCD_WR_DATA(y2);LCD_WR_REG(0x2c);//储存器写}else if(USE_HORIZONTAL==1){LCD_WR_REG(0x2a);//列地址设置LCD_WR_DATA(x1);LCD_WR_DATA(x2);LCD_WR_REG(0x2b);//行地址设置LCD_WR_DATA(y1);LCD_WR_DATA(y2);LCD_WR_REG(0x2c);//储存器写}else if(USE_HORIZONTAL==2){LCD_WR_REG(0x2a);//列地址设置LCD_WR_DATA(x1);LCD_WR_DATA(x2);LCD_WR_REG(0x2b);//行地址设置LCD_WR_DATA(y1);LCD_WR_DATA(y2);LCD_WR_REG(0x2c);//储存器写}else{LCD_WR_REG(0x2a);//列地址设置LCD_WR_DATA(x1);LCD_WR_DATA(x2);LCD_WR_REG(0x2b);//行地址设置LCD_WR_DATA(y1);LCD_WR_DATA(y2);LCD_WR_REG(0x2c);//储存器写}
}void LCD_Init(void)
{//LCD_GPIO_Init();//初始化GPIOLCD_RES_Clr(); //复位HAL_Delay(100);LCD_RES_Set();HAL_Delay(100);LCD_BLK_Set(); //打开背光HAL_Delay(100);//************* Start Initial Sequence **********//LCD_WR_REG(0x11); //Sleep out HAL_Delay(120); //Delay 120ms //-------------------------ST7735S Frame Rate-----------------------------// LCD_WR_REG(0xB1); LCD_WR_DATA8(0x05); LCD_WR_DATA8(0x3C); LCD_WR_DATA8(0x3C); LCD_WR_REG(0xB2); LCD_WR_DATA8(0x05);LCD_WR_DATA8(0x3C); LCD_WR_DATA8(0x3C); LCD_WR_REG(0xB3); LCD_WR_DATA8(0x05); LCD_WR_DATA8(0x3C); LCD_WR_DATA8(0x3C); LCD_WR_DATA8(0x05); LCD_WR_DATA8(0x3C); LCD_WR_DATA8(0x3C); //------------------------End ST7735S Frame Rate------------------------// LCD_WR_REG(0xB4); //Dot inversion LCD_WR_DATA8(0x03); //------------------------ST7735S Power Sequence------------------------// LCD_WR_REG(0xC0); LCD_WR_DATA8(0x28); LCD_WR_DATA8(0x08); LCD_WR_DATA8(0x04); LCD_WR_REG(0xC1); LCD_WR_DATA8(0XC0); LCD_WR_REG(0xC2); LCD_WR_DATA8(0x0D); LCD_WR_DATA8(0x00); LCD_WR_REG(0xC3); LCD_WR_DATA8(0x8D); LCD_WR_DATA8(0x2A); LCD_WR_REG(0xC4); LCD_WR_DATA8(0x8D); LCD_WR_DATA8(0xEE); //-----------------------End ST7735S Power Sequence-------------------------// LCD_WR_REG(0xC5); //VCOM LCD_WR_DATA8(0x1A); LCD_WR_REG(0x36); //MX, MY, RGB mode if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x00);else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC0);else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x70);else LCD_WR_DATA8(0xA0); //-----------------------ST7735S Gamma Sequence---------------------------// LCD_WR_REG(0xE0); LCD_WR_DATA8(0x04); LCD_WR_DATA8(0x22); LCD_WR_DATA8(0x07); LCD_WR_DATA8(0x0A); LCD_WR_DATA8(0x2E); LCD_WR_DATA8(0x30); LCD_WR_DATA8(0x25); LCD_WR_DATA8(0x2A); LCD_WR_DATA8(0x28); LCD_WR_DATA8(0x26); LCD_WR_DATA8(0x2E); LCD_WR_DATA8(0x3A); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x01); LCD_WR_DATA8(0x03); LCD_WR_DATA8(0x13); LCD_WR_REG(0xE1); LCD_WR_DATA8(0x04); LCD_WR_DATA8(0x16); LCD_WR_DATA8(0x06); LCD_WR_DATA8(0x0D); LCD_WR_DATA8(0x2D); LCD_WR_DATA8(0x26); LCD_WR_DATA8(0x23); LCD_WR_DATA8(0x27); LCD_WR_DATA8(0x27); LCD_WR_DATA8(0x25); LCD_WR_DATA8(0x2D); LCD_WR_DATA8(0x3B); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x01); LCD_WR_DATA8(0x04); LCD_WR_DATA8(0x13); //------------------------------------End ST7735S Gamma Sequence-----------------------------// LCD_WR_REG(0x3A); //65k mode LCD_WR_DATA8(0x05); LCD_WR_REG(0x29); //Display on
}
3. 工程获取地址
1_2_LCD · CXDNW/STM32F103C8T6练习项目 - 码云 - 开源中国 (gitee.com)
相关软件可以从这篇文章中获取:
STM32常用工具获取
http://t.csdnimg.cn/tPFMchttp://t.csdnimg.cn/tPFMc