系列文章目录
嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记01:赛事介绍与硬件平台
嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记02:开发环境安装
嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记03:G4时钟结构
嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记04:从零开始创建工程模板并开始点灯
嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记05:Systick滴答定时器
嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记06:按键输入
嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记07:ADC模数转换
嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记08:LCD液晶屏
嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记09:EEPROM
嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记10:USART串口通讯
目录
前言
上一节我们学习了ADC模数转换,这节课学习一下LCD液晶屏的显示模块。
我们板子正中央就是一个全彩的LCD显示屏,上面也可以显示一些英文字符和数字,其实屏幕本身也可以显示一些图案或者中文字符的,但是比赛中是不会要求的,因为比赛的例程中没有提供中文字符的编码,所以比赛一般只会要求显示背景色,英文字符的颜色等。
一、电路原理
LCD的分辨率是320*240,一行最多显示20个字符,总共10行,比赛时提供HAL_LCD例程,相关的IO已经帮我们初始化完成。
我们可以打开上一节课的例程,然后打开lcd.c,再打开lcd.h,可以看到一些宏定义,定义了颜色、行数等。
二、程序设计
1.必考:LCD做显示界面
比赛会提供lcd.c、lcd.h,如果要显示数值,要利用sprintf对字符串格式化,需要包含<stdio.h>。
可以定义一个LCD显示的函数,然后定义一个显示的数组缓存buf,然后用sprintf把内容格式化进数组buf的地址,然后显示buf的内容,调用显示函数,选择行数。
void LCD_Process(u8 val)
{
u8 buf[20];
sprintf((char*)buf,"eeprom val:%d",val);
LCD_DisplayStringLine(Line1,buf);
}
这里(char*)的作用是强制数据类型转换,因为sprintf第一个变量要求一定是char类型的,所以加个(char*)可以防止报错,不过不加也不影响显示,就是会有个warning。
2.数据覆盖问题
要记得避免长数据对短数据的覆盖,应该在数据后面加空格(字符串)或者格式化(数据)。
比如:
LCD_DisplayStringLine(Line1,"hello");
LCD_DisplayStringLine(Line1,"hi ");
这样显示的就是hi,如果hi后面不加三个空格的话,显示的就是hillo,就只覆盖一部分。
如果是数据:
sprintf((char*)buf,"%5d",4000);
LCD_DisplayStringLine(Line1,buf);
这样显示的其实是(0)4000,因为我们把数据格式化成了五位数,所以输入4000得到的是右对齐的一个4000,,那么如果在后面加一行代码:
sprintf((char*)buf,"%5d",4000);
LCD_DisplayStringLine(Line1,buf);
sprintf((char*)buf,"%5d",10);
LCD_DisplayStringLine(Line1,buf);
显示的就是(000)10,就把前面的数全覆盖了。
如果要改成左对齐可以在%前面加个-就行了。
格式化输出的其他例子:
sprintf((char*)buf,"-%5d",4000); //左对齐
LCD_DisplayStringLine(Line1,buf);
sprintf((char*)buf,"%05d",4000); //前面不够的位自动补0
LCD_DisplayStringLine(Line1,buf); //显示“04000”
sprintf((char*)buf,"%5.2f",3.1415926); //显示小数,总长5位,小数点算1位,小数点后2位
LCD_DisplayStringLine(Line1,buf); //显示“ 3.14”
sprintf((char*)buf,"%x",15); //%x显示16进制,%o显示8进制
LCD_DisplayStringLine(Line1,buf); //显示“F”
sprintf((char*)buf,"%c",'a'); //%c显示字符,%s显示字符串
LCD_DisplayStringLine(Line1,buf);
sprintf((char*)buf,"%d %%",10); //输出百分号:%
LCD_DisplayStringLine(Line1,buf);
3.LCD函数
清屏:LCD_Clear(Blue);
设置背景色:LCD_SetBackColor(Blue);
设置字体颜色:LCD_SetTextColor(White);
显示字符串:LCD_DisplayStringLine(Line1,display_buf);
总结
这节课学习了LCD显示模块,主要的要点就是sprintf对字符串格式化的方法以及数据覆盖问题。
下节课学习IIC协议的相关知识。