【蓝桥杯嵌入式组】HAL库STM32CubeMx学习笔记五:03-LCD

一、开发板资源介绍

如原理图所示,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学习笔记汇总:学习建议及资料

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

KkKde小火柴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值