STM32G4之LCD的使用


前言

学会使用LCD所提供的函数即可。


一、LCD基本介绍

液晶显示屏原理:液晶显示原理

LCD原理图:
在这里插入图片描述
官方会给出LCD的配置的,了解一下就行了

注意:屏幕的原点是竖着放着时的左上方
在这里插入图片描述

在每次LCD初始化后一定要先清屏在进行其他设置,并且LCD的初始化一定要放在系统初始化之后。

一般模板:

.....
LCD_Init();      // LCD最后初始化
LCD_Clear(White); // 白色清屏
LCD_SetBackColor(White);  // 设置字体的背景
LCD_SetTextColor(Red); // 设置字体的颜色

二、函数介绍

1.颜色设置函数

void LCD_Clear(u16 Color); // 设置清屏颜色
void LCD_SetTextColor(vu16 Color); // 设置字体颜色
void LCD_SetBackColor(vu16 Color); // 设置背景颜色

LCD_SetTextColor()是设置字体颜色,但是作用效果仅对后面的显示有效

LCD_SetBackColor()是设置背景颜色,作用效果也仅对后面的显示有效,并且设置的区域是字体的显示区域,其他区域会也清屏时的颜色显示

	LCD_SetBackColor(Red);
	LCD_SetTextColor(White);
	LCD_DisplayStringLine(Line2,"White");
	
	LCD_SetBackColor(Blue);
	LCD_SetTextColor(Green);
	LCD_DisplayStringLine(Line5,"Green");

显示结果:
在这里插入图片描述

2.字符显示函数

void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii); //任何位置显示字符
void LCD_DisplayStringLine(u8 Line, u8 *ptr); //行显示字符

显示屏为320*240,LCD_DisplayStringLine这个函数根据参数可知,是按行来显示的,显示屏共有Lin0~Lin9,每行可以显示20个字符

注意:Line一般传入参数Line0-9, 若传入数字则是以像素为单位

若用于显示变量,这种方法需要使用到sprintf()函数(添加头文件stdio.h")

我们要定义一个字符数组,用来存放需要显示的字符串(LCD一行只能显示20个字符,所以数组大小定为21),sprintf()函数的作用就是将指定的字符串存入数组中

头文件:stdio.h
函数功能:,格式化字符串,将格式化的数据写入字符串中。
函数原型:int sprintf(char *buffer, const char *format, [argument]…)
参数:
(1)buffer:是char类型的指针,指向写入的字符串指针;
(2)format:格式化字符串,即在程序中想要的格式;
(3)argument:可选参数,可以为任意类型的数据;
函数返回值:buffer指向的字符串的长度;

char buffer[80];
// 将An approximation of Pi is 3.1415存入buffer数组里面
sprintf(buffer, "An approximation of Pi is %f/n", 3.1415);

对于LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii);
前两个参数是行数和列数,由于官方没有给出每一列的宏定义,所以需要我们自己推一下。这里列选择需要了解一下lcd的分辨率

在官方给的参考资料里面介绍了分辨率是240RGBx320我们知道lcd一共分为10行,20列,所以一个字符的高实际上是24*16,可以看到lcd.h宏定义里面每一行之间的差值就是24,那么每一列之间的差值就是16,实际上表示一列的时候是反着来的,320表示第一列,320-16表示第二列,那么320-(16 * i)表示第i列

//在Line4,第5列显示字符'A'
LCD_DisplayChar(Line4,(320 - (16 * 5)),'A');


总结

提示:这里对文章进行总结:

### 关于STM32G4系列微控制器中用于驱动LCD显示屏的函数 对于STM32G4系列微控制器而言,在官方库文件以及HAL库的支持下,可以较为方便地实现对多种类型LCD屏的操作。然而,值得注意的是,STM32本身并不直接提供专门针对LCD操作的基础外设;相反,它依赖SPI、I2C或者其他通用接口来连接并控制外部的LCD模块。 为了更好地理解如何利用STM32G4进行LCD显示功能开发,下面给出一段基于ILI9341 TFT-LCD屏幕并通过SPI总线与其通信的例子: #### 初始化SPI接口与GPIO引脚配置 ```c static void MX_SPI1_Init(void) { /* SPI1 parameter configuration*/ hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Direction = SPI_DIRECTION_2LINES; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; hspi1.Init.NSS = SPI_NSS_SOFT; hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi1.Init.TIMode = SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi1.Init.CRCPolynomial = 7; hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; if (HAL_SPI_Init(&hspi1) != HAL_OK) { Error_Handler(); } } ``` #### 配置LCD初始化命令序列 ```c void LCD_Init(void){ //发送一系列指令给LCD完成硬件初始化过程... LCD_WriteCommand(0x01); //软件复位 delay_ms(15); //其他必要的初始化命令... LCD_WriteCommand(0x29); //显示开启 } //向LCD写入一条命令 void LCD_WriteCommand(uint8_t reg){ GPIO_WriteLow(LCD_DC_PORT, LCD_DC_PIN); //选择命令模式 SPI_SendData(reg); while(SPI_IsBusy()); GPIO_WriteHigh(LCD_CS_PORT, LCD_CS_PIN); } ``` 上述代码片段展示了如何通过SPI协议与TFT-LCD交互,并完成了基本的初始化工作[^1]。需要注意的是,实际应用中的具体参数设定可能会有所不同,这取决于所使用的特定型号LCD面板及其数据手册的要求。 此外,如果想要进一步简化编程流程,则可以选择使用第三方提供的图形化界面库(GUI),比如uGFX或emWin等,这些库通常已经封装好了底层细节,允许开发者更专注于上层逻辑设计。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super.Bear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值