【STM32】1.8寸LCD显示实验

这篇具有很好参考价值的文章主要介绍了【STM32】1.8寸LCD显示实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、硬件介绍

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

void lcd_wr_data8(u8 dat);,stm32,嵌入式硬件,单片机,笔记,LCD,ST7735,SPI

2. 1.8寸LCD

void lcd_wr_data8(u8 dat);,stm32,嵌入式硬件,单片机,笔记,LCD,ST7735,SPI

(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. 接口配置

void lcd_wr_data8(u8 dat);,stm32,嵌入式硬件,单片机,笔记,LCD,ST7735,SPI

2. 其他配置

void lcd_wr_data8(u8 dat);,stm32,嵌入式硬件,单片机,笔记,LCD,ST7735,SPI

void lcd_wr_data8(u8 dat);,stm32,嵌入式硬件,单片机,笔记,LCD,ST7735,SPI

void lcd_wr_data8(u8 dat);,stm32,嵌入式硬件,单片机,笔记,LCD,ST7735,SPI

三、LCD图片取模

1. 打开图片(.bmp格式)

void lcd_wr_data8(u8 dat);,stm32,嵌入式硬件,单片机,笔记,LCD,ST7735,SPI

2. 设置

void lcd_wr_data8(u8 dat);,stm32,嵌入式硬件,单片机,笔记,LCD,ST7735,SPI

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

到了这里,关于【STM32】1.8寸LCD显示实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F1基于STM32CubeMX配置硬件SPI驱动1.8寸TFT LCD128X160 ST7735S屏幕

    📌相关篇《【STM32CubeIDE】STM32F103硬件SPI驱动1.8寸TFT LCD128X160 ST7735S屏幕》 ✨驱动效果就不做演示了,和上面的相关篇一样,主要是为了方便使用MDK Keil开发的使用。所以花了点时间从上面的工程当中做了分离,重新使用STM32CubeMX配置一个方便二次开发移植使用和配置的工程。本

    2024年02月03日
    浏览(47)
  • 【正点原子STM32】LTDC LCD(RGB屏)实验(TFT LCD、RGB LCD信号线、驱动模式、LTDC驱动LCD-TFT显示器、LTDC控制器、DMA2D-GPU、DMA2D颜色填充步骤)

    一、RGB LCD简介 二、LTDC介绍 2.1、LTDC简介 2.2、LTDC控制器框图介绍 2.3、LTDC相关寄存器介绍 2.4、LTDC相关HAL库驱动介绍 三、RGB屏基本驱动步骤 四、编程实战1 五、DMA2D介绍 5.1、DMA2D简介 5.2、DMA2D框图介绍 5.3、DMA2D相关寄存器介绍 六、DMA2D颜色填充的具体步骤 七、编程实战2 八、

    2024年04月16日
    浏览(58)
  • 【STM32】LCD液晶显示

    🐱作者:一只大喵咪1201 🐱专栏:《STM32学习》 🔥格言: 你只管努力,剩下的交给时间! 显示器属于计算机的 I/O 设备,即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。常见的有 CRT 显示器、液晶显示器、 LED 点阵显示器及 OLED 显示器。本

    2024年02月03日
    浏览(42)
  • LCD—STM32液晶显示(1.显示器简介及LCD显示原理)(6000字详细介绍)

    目录 显示器简介 液晶显示器 液晶 像素 液晶屏缺点 LED显示器 OLED显示器 显示器的基本参数 STM32板载液晶控制原理(不带微控制器) 液晶控制原理 控制信号线(不带液晶控制器) 液晶数据传输时序 显存 总结 3.2寸液晶屏介绍(搭载液晶控制器) 3.2寸电阻触摸屏实物 ILI9341液晶

    2024年02月17日
    浏览(49)
  • STM32—LCD液晶显示屏

    目录 LCD液晶显示屏介绍 液晶的组成  物理特性 液晶显示屏内部构造  颜色深度 点亮LCD显示屏 查看原理图 图片显示 保存到工程用户代码的Inc目录下 参数为数组名 字符显示  汉字显示 某些物质在熔融状态或被溶剂溶解之后,尽管失去固态物质的刚性,却获得了液体的易流动

    2024年02月04日
    浏览(46)
  • 【STM32篇】驱动LCD显示屏

    本次使用的硬件设备为野火的霸道V2开发板,显示器控制芯片型号为ILI9341,实际型号为ST7789V。在编写代码时参考的是ILI9341数据手册,二者差别不大,都是240*320分辨率。         ILI9341是一个用于TFT液晶显示的单芯片控制驱动器,具有262144色的240RGB x 320像素显示解决方案。

    2024年02月12日
    浏览(43)
  • STM32显示外设集--液晶显示模块(LCD1602)

    一、介绍 产品图 二、 资源获取 欢迎关注微信公众号--星之援工作室 发送(LCD1602) 三、线路连接图 四、代码编写 LCD1602.h LCD1602.c main.h 五、参考 LCD1602是一种字母数字液晶显示模块,可以显示16个字符和2行文本,因此被命名为LCD1602。它通常用于各种电子项目,特别是

    2024年02月11日
    浏览(45)
  • STM32-LCD中英文显示及应用

    目录 字符编码 ASCII码(8位) 中文编码(16位) GB2312标准 GBK编码 GB18030标准(32位) Big5编码 Unicode字符集和编码 UTF-32(32位) UTF-16(16位/32位,变长编码方式) UTF-8(8位/16位/24位/32位,变长编码方式) 实验环节1:LCD显示中英文(字库存储在外部Flash) 存储在外部Flash的字模

    2024年02月08日
    浏览(41)
  • STM32实现TFT LCD浮点数显示

    方式一:通过sprintf将小数转换成字符串,通过字符串显示函数LCD_ShowString()显示 方式二:计算出浮点数整数部分、小数部分、整数部分的数字数和小数部分的数字数,通过数字显示函数LCD_ShowNum()和LCD_ShowChar(仅数点)显示,三部分拼接而成 浮点数--“整数部分的数字数

    2024年02月16日
    浏览(48)
  • STM32 LCD 显示彩色图片(内部FLASH)

    在使用LCD颜色填充的时候发现正点原子提供了一个很好用的填充函数,就是LCD_Color_Fill();该函数是用来填充颜色块的,也可以直接用来显示图片,因为图片也是由颜色块组成的。所以在需要使用stm32从内部flash的方法来显示图片时就不要独立写显示图片的函数了,非常实用。

    2024年02月03日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包