蓝桥杯STM32G431RBT6学习——LCD

蓝桥杯STM32G431RBT6学习——LCD

前言

作为在开发板上最显眼的LCD屏幕,自然而然也是每年的必考考点。国信长天开发板使用的是一块2.4寸(240*320)的TFT-LCD液晶屏,其引脚占用如下:
在这里插入图片描述

其中,CS为片选信号引脚,RS为数据/命令选择引脚,WR为写入控制引脚,RD为读取控制引脚,RST为复位控制引脚,D0~D15为数据线。

STM32CubeMX配置

通过观察底层驱动(比赛提供)可以发现,其实单论LCD驱动来说这一步是并不需要的,因为在官方给的驱动文件就已经实现了对LCD的GPIO配置,如下所示:
在这里插入图片描述
其中配置引脚为PA8,PB5、8、9,PC0~PC15,所有引脚均配置为推挽输出模式,因此CubeMX配置可以省略。

Keil代码编写
LCD驱动相关API如下:

LCD初始化
函数内部实现了GPIO的对应初始化及液晶寄存器配置

void LCD_Init(void);

设置显示颜色
文本默认颜色为黑色
文本背景默认颜色为黑色(不同于背景色,这里指的是文本的所在背景色)

void LCD_SetTextColor(vu16 Color);	//设置文本颜色
void LCD_SetBackColor(vu16 Color);	//设置文本背景颜色

参数:颜色,其宏定义如下:

颜色地址值
White0xFFFF
Black0x0000
Grey0xF7DE
Blue0x001F
Blue20x051F
Red0xF800
Magenta0xF81F
Green0x07E0
Cyan0x7FFF
Yellow0xFFE0

清除显示

void LCD_ClearLine(u8 Line);	//清除一行显示
void LCD_Clear(u16 Color);		//清除全屏显示

LCD_ClearLine参数:清除行号
LCD_Clear参数:清除后的背景色
绘制类函数

void LCD_SetCursor(u8 Xpos, u16 Ypos);	//设置绘制起始坐标					
void LCD_DrawChar(u8 Xpos, u16 Ypos, uc16 *c);	//绘制字符(未使用字库)
void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii);	//绘制字符
void LCD_DisplayStringLine(u8 Line, u8 *ptr);	//显示一行字符串
void LCD_SetDisplayWindow(u8 Xpos, u16 Ypos, u8 Height, u16 Width);	//设置一个显示窗口,后面的绘制以该窗口为坐标系
void LCD_WindowModeDisable(void);	//禁用窗口模式,重新以全屏为坐标系
void LCD_DrawLine(u8 Xpos, u16 Ypos, u16 Length, u8 Direction);	//绘制线段
void LCD_DrawRect(u8 Xpos, u16 Ypos, u8 Height, u16 Width);	//绘制矩形
void LCD_DrawCircle(u8 Xpos, u16 Ypos, u16 Radius);	//绘制圆形
void LCD_DrawMonoPict(uc32 *Pict);	//显示单色图
void LCD_WriteBMP(u32 BmpAddress);	//从Flash中读取图片显示
void LCD_DrawBMP(u32 BmpAddress);	//未实现
void LCD_DrawPicture(const u8* picture);	//显示16色图片

绘制类函数参数列表:
Xpos:X坐标,取值为0~240;
Ypos:Y坐标,取值为0~320;
c :字符数据,注意此处为字模数组;
Line :行,取值Line0~Line9;
Column:同Ypos;
Ascii:ASCII字符,取值 0x20~0x7E;
ptr :字符串;
Height:窗口高度;
Width:窗口宽度;
Length:线段长度;
Direction:线段方向,取值Horizontal(水平)或其他(竖直);
Radius:圆形半径;
Pict:图片取模数组数据
字符流函数

int sprintf( char *buffer, const char *format [, argument,] );

参数1:写入的字符串数组;
参数2:字符串及格式符;
参数3:格式符中对应的变量数据

基本使用

API还算得上丰富(主要题目使用难度不大),通俗易懂,直接使用即可。
显示两行数据并清除:

  LCD_Init();
  LCD_Clear(White);
  LCD_SetBackColor(White);
  LCD_SetTextColor(Blue);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  int num = 1;
	  char text[30];
	  sprintf(text,"%d    Hello World!",num);
	  LCD_DisplayStringLine(Line4, (u8*)text);
	  LCD_DisplayStringLine(Line5, (u8*)text);
	  HAL_Delay(1000);
	  LCD_ClearLine(Line4);
	  HAL_Delay(1000);
	  LCD_Clear(White);
	  HAL_Delay(1000);
  }
  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值