目录
一、硬件介绍
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();//初始化GPIO
LCD_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常用工具获取文章来源:https://www.toymoban.com/news/detail-844930.html
文章来源地址https://www.toymoban.com/news/detail-844930.html
到了这里,关于【STM32】1.8寸LCD显示实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!