嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记08:LCD液晶屏

   系列文章目录

嵌入式|蓝桥杯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串口通讯


目录

  系列文章目录

前言

一、电路原理

二、程序设计

1.必考:LCD做显示界面

2.数据覆盖问题

3.LCD函数

总结


前言

上一节我们学习了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协议的相关知识。

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32G431RB是一款32位ARM Cortex-M4微控制器,它支持多种中断类型。 在STM32G431RB中,中断被分为两类:外部中断和内部中断。外部中断由外部设备触发,例如GPIO口的边沿触发。内部中断则是由内部的事件或异常触发,例如定时器溢出事件或DMA传输完成。 要使用中断功能,首先需要配置中断向量表和NVIC(Nested Vectored Interrupt Controller)。 1. 配置中断向量表: 中断向量表是存放中断处理程序入口地址的表格。在STM32G431RB中,可以通过修改链接脚本文件或使用HAL库提供的函数来配置中断向量表。 2. 配置NVIC: NVIC用于管理中断优先级和使能中断。可以使用CMSIS提供的API函数来配置NVIC。 3. 配置外部中断: 对于外部中断,首先要配置对应GPIO口的输入模式和触发方式。然后通过EXTI(External Interrupt)模块来使能外部中断,并设置触发条件。 4. 编写中断处理程序: 中断处理程序是中断发生时执行的代码块。在编写中断处理程序时,需要注意以下几点: - 使用__attribute__((interrupt))或者对应的函数前缀来声明中断处理程序。 - 在中断处理程序中尽量避免使用延时函数或阻塞操作,而是应尽量简洁并尽快完成中断处理。 - 在中断处理程序中清除中断标志位,以便使能下一次中断发生。 这是一个简要的关于在STM32G431RB上使用中断的介绍。具体的配置和编程细节可以查阅相关的参考资料或官方文档。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值