一、开发板资源介绍
如原理图所示,LCD的控制引脚一共16个,PC0-PC15。
二、配置工程
1、配置引脚
在使用LCD时,我们很少直接使用LCD的控制引脚编程,我们就把这16个引脚配置成输出模式,我们只需要编写他的显示函数即可。
其实我试了一下不配置也没什么问题,但是资料包里给的模板工程里都配置成输出模式了。
在引脚图上单击某个引脚,选择想要配置的模式,即可配置成功。如下图为配置PC0引脚为输出模式。
可以在这里查看确认一下是不是都配置成输出模式了。
2、设置变量
在main.c中用户添加变量区内设置变量
uint8_t ucLcd[21];
3、通用函数
LCD为20x10,一行最多显示20个字符,不要溢出,一共有10行(Line0-Line9)。
1.LCD函数一般使用以下格式,sprintf+LCD_DisplayStringLine
void LCD_Proc()
{
sprintf((char*)ucLcd," DATA ");
LCD_DisplayStringLine(Line1,ucLcd); //第一行是Line0
sprintf((char*)ucLcd," Volt:%.2fV ",Volt);
LCD_DisplayStringLine(Line3,ucLcd);
sprintf((char*)ucLcd," D:%u%% ",ucDuty_Adj);
LCD_DisplayStringLine(Line5,ucLcd);
sprintf((char*)ucLcd," F:%uHz ",usFreq_Adj);
LCD_DisplayStringLine(Line7,ucLcd);
}
2.若特殊要求字体颜色,字体背景色,可搭配以下函数使用,见4.2 同一行内容不同字体颜色或背景色
sprintf((char *)ucLcd,"%02d:%02d:%02d",ucHour,ucMin,ucSec);
LCD_SetBackColor(Red);//红色
LCD_DisplayChar(Line3,320-4*16,ucLcd[0]);//(行数,字符的位置,要显示的字符)
以下代码是基于2设置变量,3通用函数的基础上编写的功能函数。 |
4、特殊情况
4.1 不同情况显示不同字符
题目中要求在同一行,不同条件下显示不同的字符。
要求: 在第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);
}
最后在while中调用LCD_Proc();
4.2 同一行内容不同字体颜色或背景色
要求: 在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]);
}
最后在while中调用LCD_Proc();
三、真题小练习
此题目代码结合【蓝桥杯嵌入式组】HAL库STM32CubeMx学习笔记四:02-KEY中的代码
该工程代码可在CSDN资源下载
要求: 按键B1按下一次,显示@,然后按键B2按下在LCD上循环显示 0 1 2 3 4 5 6 7 8 9 0 1 2 3 ···
1.在main.c中设置变量
char temp;
uint8_t code;
2.在main.c中用户添加代码区添加以下代码
void KEY_Proc(void)
{
ucKey = KEY_Scan();
if(ucKeyLong != ucKey)
ucKeyLong = ucKey;
else
ucKey = 0;
switch(ucKey)
{
case 1:
temp = '@';
sprintf((char*)ucLcd,"ABC:%s","@");
LCD_DisplayStringLine(Line1,ucLcd);
break;
case 2:
if(temp == '@')
{
temp = 0;
code = 0;
}
else
{
code += 1;
if(code>9)
code = 0;
}
sprintf((char*)ucLcd,"ABC:%d",code);
LCD_DisplayStringLine(Line1,ucLcd);
break;
}
}
3.最后在while中调用KEY_Proc();
在这里有一些学习资料建议,欢迎批评指正【蓝桥杯嵌入式组】HAL库STM32CubeMx学习笔记汇总:学习建议及资料