蓝桥杯省赛模块准备-LCD(G431)

系列文章目录

LED

KEY

串口


文章目录

目录

系列文章目录

文章目录

前言

一、工程创建

二、代码编写

1.如何解决LED与LCD显示冲突的问题

2.LCD的初始化以及LCD的显示

现象

总结



前言

本文主要是介绍蓝桥杯官方提供的LCD驱动及相关函数的使用,以及如何解决LED与LCD显示冲突的问题


一、工程创建

LCD的相关引脚定义已经在官方给的驱动里面定义好了,我们只需要把官方给的.c和.h以及字库文件添加到工程目录下,CubeMX中不需要配置LCD相关引脚,只需要配置时钟树和debug等配置,具体步骤可在LED一文查看

二、代码编写

1.如何解决LED与LCD显示冲突的问题

因为LED与LCD有比较多的共用引脚,所以在操作LED时,会对LCD的显示造成影响,方案之一是对LED操作时,对8个LED整体操作,而不对单个LED操作,这样会比较繁琐,还有一种方案是修改官方提供的驱动,造成干扰的原因是由于对应引脚输出寄存器(ODR)的值在LCD的相关操作中会被修改,如果此时锁存器被拉高,那么对应的LED可能会改变输出状态,造成显示错误,如:LCD的操作使得LED3的电平变为了高,而此时LED3的显示状态是亮(低电平),但你只操作LED1,此时锁存器拉高,则造成了LED3的显示错误,针对这个问题,我们可以修改LCD相关函数,在LCD操作ODR寄存器之前,先将ODR的值保存下来,在函数最后再复原ODR的值

我们先来找到这几个相关函数

在Functions这一栏我们能很便捷的找到LCD的相关函数

就是这几个write的函数,而且很好记忆,当你打开这几个函数,我们需要修改的就是这三个明显是操作了寄存器的函数,也就是LCD_WriteRAM、LCD_WriteRAM_Prepare、LCD_WriteReg

然后我们要做修改,在开头保存寄存器ODR的值,在结尾复原

以LCD_WriteRAM为例

其余两个函数也是同样的操作,这样便解决的冲突显示的问题

2.LCD的初始化以及LCD的显示

LCD的初始化,设置背景为黑色,字体为白色,也是蓝桥杯的一般要求

LCD_Init();
LCD_Clear(Black);
LCD_SetBackColor(Black);
LCD_SetTextColor(White);

LCD的显示函数,实现将KEY1按下次数显示在LCD上,并有LED的翻转显示,有一届国赛考过

sprintf(temp,"KEY1:%d",KEY1_num);
LCD_DisplayStringLine(Line1,(uint8_t *)temp);
key_scan();
//改变状态则清屏一次
if(old_turn != turn)
{
   LCD_Clear(Black);
   old_turn = turn;
}
if(key_up == 1)
{
	KEY1_num++;
}
else if(key_up == 2)
{
	//反向显示
	LCD_WriteReg(R1  , 0x0100); //从下往上
	LCD_WriteReg(R96 , 0xA700); //从右往左
	turn = 1;
}
else if(key_up == 3)
{
	//正向显示
	LCD_WriteReg(R1  , 0x0000); //从上往下
	LCD_WriteReg(R96 , 0x2700); //从左往右
	turn = 0;
}

翻转显示参考大佬黑心萝卜三条杠的文章

一文解决蓝桥杯嵌入式开发板(STM32G431RBT6)LCD与LED显示冲突问题,并讲述LCD翻转显示

记得翻转后清屏一次,不然会出现上下一起刷新的情况

现象

LCD


总结

本文介绍了蓝桥杯官方提供的LCD函数的使用以及如何解决LED与LCD显示冲突和翻转显示的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值