《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.4 LCD显示实验
写在前面——
《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.4 LCD显示实验,实现在不同要求下进行LCD显示字符。
官方例程下载:https://pan.baidu.com/s/1QC5BnDgY1m1me6-ihQ_OUQ?pwd=nqb1
提取码:nqb1
目录
4.4 LCD显示实验
4.4.1. 实验任务
- 字符显示:参看官方例程HAL_06_LCD, LCD初始化配置,实现字符显示。
- 拓展功能:改变背景、字体颜色、格式(sprintf)等。
4.4.2. 硬件连接

LCD的使用,官方提供例程,直接使用即可,无需配置;需要注意的是,他的接口和LED有重叠 。
4.4.3. 初始化配置(STM32CubeMX)
对于LCD,直接使用官方提供的初始化驱动程序,只需要移植过来就行了。
根据当前任务需求,若需要配置LED、按键等GPIO,请按照前述各实验操作进行。
这里,按照前述方法,选择目标器件stm32G431RBT6,配置RCC、SYS,设置时钟为80MHz,填写工程名称(如lcd)、路径,即可完成工程初始化配置。
通常,不用在STM32CubeMX中配置LCD。

4.4.4. 应用程序设计(KEIL5)
1. 在项目工程中配置LCD
1)复制初始化例程到工程文件夹中
将官方提供的资源包中的fonts.h和lcd.h文件复制到自己所建的工程文件夹对应的Inc文件夹下,将资源包中的lcd.c文件复制到自己所建的工程文件夹对应的Src文件夹下,随后打开工程文件。(在例程6(HAL_06_LCD)中Inc和Src文件夹中也有这些文件)
2)将led.c文件添加进项目工程当中

头文件fonts.h和lcd.h在Inc文件夹下,已在库文件搜索路径中,无需再操作了。若放在其他文件夹下,则自行添加其路径。

3)LCD初始化
main.c中添加相关语句,并初始化LCD
首先引用lcd.h,不需要引用font.h(已在lcd.c中引用了,重复引用会报错)

再进行LCD初始化。

2. 字符显示
LCD为20x10,一行最多显示20个字符,不要溢出,一共有10行(Line0-Line9)。
在lcd.h中已定义颜色相关的常量:
/* LCD color */
#define White 0xFFFF
#define Black 0x0000
#define Grey 0xF7DE
#define Blue 0x001F
#define Blue2 0x051F
#define Red 0xF800
#define Magenta 0xF81F
#define Green 0x07E0
#define Cyan 0x7FFF
#define Yellow 0xFFE0
在lcd.h中已定义行数相关的常量:
#define Line0 0
#define Line1 24
#define Line2 48
#define Line3 72
#define Line4 96
#define Line5 120
#define Line6 144
#define Line7 168
#define Line8 192
#define Line9 216
在lcd.c中已定义一系列的函数,部分函数功能介绍:
void LCD_Init(void); //初始化函数
void LCD_SetTextColor(vu16 Color); //设置文本颜色
void LCD_SetBackColor(vu16 Color); //设置背景颜色
void LCD_ClearLine(u8 Line); //清除行
void LCD_Clear(u16 Color); //清除屏幕并设置颜色
void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii); //任意位置显示字符
void LCD_DisplayStringLine(u8 Line, u8 *ptr); //任意行显示字符串
1)字符/字符串显示
//显示单个字符
LCD屏幕的宽度是范围是0~319,一个字符的占到了16,因此将一个字符a显示在第—行第一列需要这么写:
LCD_DisplayChar(Line0, 319-16, 'a');
//显示字符串
LCD_DisplayStringLine(Line1,"Name:Crystal"); //第二行显示Name:Crystal
可以参考例程6(HAL_06_LCD),在main函数中输入以下语句,进行字符显示:

2)显示某变量值
LCD显示某变量值,使用以下格式:sprintf语句+LCD_DisplayStringLine语句
- 首先需要使用sprintf格式化输出语句,如:
uint8_t buf[30] ;
sprintf((char *) buf,"%02d : %02d : %02d" ,hour, min,sec);
sprintf指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。
该函数包含在stdio.h的头文件中,使用时需要加入:#include <stdio.h>
sprintf与printf函数的区别:二者 功能相似,但是 sprintf函数打印到字符串中,而printf函数打印输出到屏幕上。 sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用广泛。
字符串格式化方式,请自行百度。( %s,字符串;%d,整型;%f,浮点型,也就是小数类型的,若想保留指定的小数个数,比如保留两位,使用%.2f)。
- 再进行字符串显示:语句LCD_DisplayStringLine,如
LCD_DisplayStringLine(Line1,buf);
若特殊要求字体颜色、字体背景色,可搭配以下函数使用,如:
sprintf((char *)ucLcd,"%02d:%02d:%02d",ucHour,ucMin,ucSec);
LCD_SetBackColor(Red);//红色
LCD_DisplayChar(Line3,320-4*16,ucLcd[0]);//(行数,字符的位置,要显示的字符)
3)不同情况显示不同字符
要求: 在第6行(Line5),电压大于最大值时显示Status: Upper;电压小于最小值时显示Status: Lower;电压介于最大值和最小值之间时显示Status: Normal。
在main.c中用户添加代码区添加以下代码:
void LCD_Proc()
{
if(Volt > Max_Volt)
sprintf((char*)ucLcd," Status:Upper ");
if(Volt < Min_Volt)
sprintf((char*)ucLcd," Status:Lower ");
if((Min_Volt <= Volt) & (Volt <= Max_Volt))
sprintf((char*)ucLcd," Status:Normal ");
LCD_DisplayStringLine(Line5,ucLcd);
}
4)同一行内容不同字体颜色或背景色
要求: 在Line3,显示时分秒,例如15:20:32,要求小时数15的背景色为红色,分钟数20背景色为黑色
在main.c中用户添加代码区添加以下代码:
void LCD_Proc()
{
sprintf((char *)ucLcd,"%02d:%02d:%02d",ucHour,ucMin,ucSec);
LCD_SetBackColor(Red);//红色
LCD_DisplayChar(Line3,320-4*16,ucLcd[0]);//(行数,字符的位置,要显示的字符)
LCD_DisplayChar(Line3,320-5*16,ucLcd[1]);
LCD_SetBackColor(Black);//黑色
LCD_DisplayChar(Line3,320-6*16,ucLcd[3]);
LCD_DisplayChar(Line3,320-7*16,ucLcd[4]);
}
本质上,这还是把文本颜色函数LCD_SetBackColor()穿插于各显示函数LCD_DisplayChar()之间。
4.4.5. 小结
- LCD配置,无需CubeMX操作,但是在工程项目中手动进行初始化配置LCD_Init()。
- 关键函数:清屏(LCD_Clear),设置背景颜色(LCD_SetBackColor),设置文本颜色(LCD_SetTextColor),显示字符(LCD_DisplayChar、LCD_DisplayStringLine),格式化输出(sprintf)。
- 每行有320单位长,有0~9共10行
更多推荐


所有评论(0)