一、LCD模块相关文件的导入
1.找到官方例程参考程序存放代码的路径
2.将与LCD有关的头文件复制到自己代码路径下的Inc中
而自己的头文件和代码文件位于路径中的Core文件夹中
forts.h为与字体相关的头文件;lcd.h则与LCD屏幕有关
3.将与LCD有关的.c文件复制到自己代码路径下的Src中
4.启动keil,打开自己的代码环境。
可以看见此时我们的环境下还没有lcd.c文件
右击Core,选择如图所示指令
找到存放lcd.c的路径,将文件添加进去
可以看见此时出现了lcd.c文件
编译工作环境,与lcd有关的头文件会自动归类
二、LCD相关函数学习
1.LCD_Init(void)
LCD屏幕的初始化,程序想要使用LCD模块则需在主函数调用该函数。
位于lcd.c文件150行左右。
2.void LCD_Clear(u16 Color)
清屏函数,其背景颜色可以由我们选择。可选颜色位于lcd.h第134行
3.void LCD_SetBackColor(vu16 Color)
设置背景色,函数定义位于lcd.c的180行左右
4.void LCD_SetTextColor(vu16 Color)
设置字符颜色,函数定义位于lcd.c的170行左右
5.void LCD_DisplayStringLine(u8 Line, u8 *ptr)
向LCD屏幕指定行输出某一句话,函数定义位于lcd.c的290行左右。
通过提供的函数注释,我们可以知道LCD屏幕共10行,每行最多可以显示20个字符:
6.void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii)
LCD屏幕任何位置显示字符,函数定义位于lcd.h的278行左右:
插入哪一行我们知道是传入Linex,那么我们如何能准确判断我们要插入的字符是要插入到哪一列呢?即第二个参数Column应当如何传参,实际上LCD_DisplayStringLine给我们提供了提示:
7.void LCD_DrawLine(u8 Xpos, u16 Ypos, u16 Length, u8 Direction)
画直线的函数,函数定义位于lcd.c的363行左右
8.void LCD_DrawRect(u8 Xpos, u16 Ypos, u8 Height, u16 Width)
绘制矩形的函数,函数定义位于lcd.c的397行左右
9.void LCD_DrawCircle(u8 Xpos, u16 Ypos, u16 Radius)
绘制圆形的函数,函数定义位于lcd.c的415行左右
三、一个简单的LCD显示函数
1.在lcd.c中编写函数lcd_test()
void lcd_test(void)
{
LCD_Clear(Red);//使用红色清屏
LCD_SetBackColor(Red);//使用红色作为背景色
LCD_SetTextColor(White);//字体颜色设置为白色
LCD_DisplayStringLine(Line5," Hello World!");
HAL_Delay(1000);//延时1000ms
LCD_Clear(Blue);//使用蓝色清屏
LCD_SetBackColor(Blue);//使用蓝色作为背景色
LCD_SetTextColor(Yellow);//字体颜色设置为黄色
LCD_DrawLine(120,0,320,Horizontal);//水平线
LCD_DrawLine(0,160,240,Vertical);//竖直线
HAL_Delay(1000);//延时1000ms
LCD_Clear(White);//使用白色清屏
LCD_SetBackColor(White);//使用白色作为背景色
LCD_SetTextColor(Black);//字体颜色设置为黑色
LCD_DrawRect(70,210,100,100);//矩形
HAL_Delay(1000);//延时1000ms
LCD_Clear(Yellow);//使用黄色清屏
LCD_SetBackColor(Yellow);//使用黄色作为背景色
LCD_SetTextColor(Green);//字体颜色设置为绿色
LCD_DrawCircle(120,160,50);
HAL_Delay(1000);//延时1000ms
}
2.在lcd.h处添加函数声明
3.在主函数添加对应代码
我这里显示warning是因为没有在主函数开头#include “lcd.h”,添加这一行后便无警告了。
运行下载结果自行检验对错。
4.注意事项——解决KEY与LCD、LED的冲突问题
我们重新观察一下LCD与LED的电路图
由于LED与LCD共用PC8-15的引脚,因此如果我没们不加以限制,则无法实现按键正常控制LCD和LED。
解决方法
在lcd.c中找到下面两个函数:
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)
void LCD_WriteRAM_Prepare(void)
void LCD_WriteRAM(u16 RGB_Code)
之后将三个函数首尾添加相同的两行代码:
**原理:**GPIOC->ODR实际上可以理解成控制着灯的亮/灭状态,而LED与LCD共用GPIOC所以我们要在使用LCD时将LED灯的状态保存下来,保证LCD不会将其GPIOC->ODR改变以至于影响到LED初始状态。