首页 > 编程语言 >蓝桥杯嵌入式冲刺国奖-3、LCD程序

蓝桥杯嵌入式冲刺国奖-3、LCD程序

时间:2024-09-23 10:55:23浏览次数:10  
标签:文件 国奖 函数 lcd 蓝桥 LCD 文件夹 我们

在上一章的基础上我们构建LCD程序的模板。

1、用官方程序进行移植

官方资源包:

通过百度网盘分享的文件:2-新版竞赛平台.zip
链接:https://pan.baidu.com/s/1Z8mD4NrywlqbpUEDKSHAtw?pwd=1234 
提取码:1234

 官方为我们提供了LCD的资源包,我们仅需要移植即可使用,我们在上节代码的基础上继续进行。

①首先,我们在液晶驱动参考程序里面找到HAL库文件,Inc文件夹存放.h文件,Src文件夹存放.c文件。

我们将Inc文件夹中的lcd.h和fonts.h文件复制到自己的工程下面,将Src文件夹中的lcd.c文件也复制到自己工程下面。

我们自己的工程Src与Inc文件均在Core文件夹下面。

②将lcd文件添加到工程下

 这里有两种方法:

方法一:

双击文件夹,再找到lcd.c文件所在位置,添加即可。

方法二:

点击上方的”品“,

然后选择对应的文件夹,点击Add Files添加lcd.c文件。添加完成后,编译一下,确保不会处错误。

2、代码编写

代码编写我们可以打开官方的程序,进行cv工程。

首先我们在和之间引入lcd.h文件。

然后我们将官方的初始化代码进行cv工程,讲初始化代码放在begin和end之间。

此时,如果下载就会发现我们的LCD屏幕变蓝了,说明已移植成功。 

根据上面的函数与具体现象我们不难发现,上面程序就是对LCD进行初始化,设置LCD屏幕的背景色和前景色。

2.1创建LCD程序

根据之前LED一样的操作,我们创建一个LCD程序,LCD刷新时间可按题目要求设置,这里我们设置成100ms刷新一次。具体怎么构建,这里不再赘述,可根据前面章节,或根据后续视频进行学习。

这里我们再使用c语言中的sprintf()函数,进行显示。使用前我们先引入string和stdio文件。

然后我们创建一个数组,一定要大于屏幕长度20,这里我们选择30。

ps:若我们的字符串大于22,而我们的数组长度不足20,就会出现程序卡死现象。

sprintf函数就是将后面的字符串打印到我们创建的lcd_str数组里面,然后LCD_DisplayStringLine函数将lcd_str打印到屏幕上。

void LCD_Proc(void)
{
	if(uwTick-uwtick_lcd_point<100) return;
	uwtick_lcd_point=uwTick;
	
    uint8_t lcd_str[30];
	sprintf((char *)lcd_str,"uart_test");
	LCD_DisplayStringLine(Line4 ,(unsigned char *)lcd_str);
	
}

具体效果如下图。

2.2 屏幕翻转 

有一年的题目中出现了屏幕翻转的题目,那我们该如何操作呢。

首先我们双击LCD_Init函数,进入函数内部。

再进入下面函数内部

我们可以看到有两个函数内部后面注释有两个数字 ,我们将这两行代码复制到LCD初始化后面,并将参数设置为后面的注释值,试一下效果,顺便改一下前景色,背景色颜色。

具体代码和效果如下:

我们可以发现屏幕发生了翻转。

  /* USER CODE BEGIN 2 */
  //lcd初始化代码
  LCD_Init();
  LCD_WriteReg(R1  , 0x0100); // set SS and SM bit		  //0x0100
  LCD_WriteReg(R96 , 0xA700); // Gate Scan Line		  0xA700
  LCD_Clear(Black);
  LCD_SetBackColor(Black);
  LCD_SetTextColor(White);

  /* USER CODE END 2 */

2.3具体案例

下面我们让我们的屏幕显示如下内容,这里为了方便,我直接将各个值分别设置为2 4 2。

 这里我们可以看出,lcd的显示函数只有具体的行参数,那如何修改列呢,比如Data是从第2行第8列开始的,这时候我们可以想到空格。那我们试一下。

 因为行是从Line0开始,所以第2行应该为Line1,我们先将翻转程序注释掉。

void LCD_Proc(void)
{
	if(uwTick-uwtick_lcd_point<100) return;
	uwtick_lcd_point=uwTick;
	
    uint8_t lcd_str[30];
	sprintf((char *)lcd_str,"       Data            ");
	LCD_DisplayStringLine(Line1 ,(unsigned char *)lcd_str);
	sprintf((char *)lcd_str,"   CNBR:2          ");
	LCD_DisplayStringLine(Line3 ,(unsigned char *)lcd_str);
	sprintf((char *)lcd_str,"   VNBR:4          ");
	LCD_DisplayStringLine(Line5 ,(unsigned char *)lcd_str);
	sprintf((char *)lcd_str,"   IDLE:2          ");
	LCD_DisplayStringLine(Line7 ,(unsigned char *)lcd_str);
	
}

可以看到满足要求,那我们就能完成LCD显示操作了。

2.4高亮显示

那我们如果让某一行高亮显示该怎么做呢?思考一下

............................................................................................................................(1minute later)

我们可以修改颜色(具体看要求是背景还是字体),这里我们将CNBR行进行高亮显示,我需要在CNBR前修改背景颜色,那我修改完下面是不是也变了,所以我需要在VNBR行前将背景色变回去,即可达到CNBR行高亮显示。具体代码和效果如下:

void LCD_Proc(void)
{
	if(uwTick-uwtick_lcd_point<100) return;
	uwtick_lcd_point=uwTick;
	
    uint8_t lcd_str[30];
	sprintf((char *)lcd_str,"       Data            ");
	LCD_DisplayStringLine(Line1 ,(unsigned char *)lcd_str);
	
	LCD_SetBackColor(Blue);
	sprintf((char *)lcd_str,"   CNBR:2          ");
	LCD_DisplayStringLine(Line3 ,(unsigned char *)lcd_str);
	
	LCD_SetBackColor(Black);
	sprintf((char *)lcd_str,"   VNBR:4          ");
	LCD_DisplayStringLine(Line5 ,(unsigned char *)lcd_str);
	sprintf((char *)lcd_str,"   IDLE:2          ");
	LCD_DisplayStringLine(Line7 ,(unsigned char *)lcd_str);
	
}

那再做一下提升,我更改背景色是直接修改了一行,那我如果只想让VNBR对应的数字显示为红色呢。

	LCD_SetBackColor(Black);
	sprintf((char *)lcd_str,"   VNBR:4              ");
	for(int i=0;i<20;i++)
	{
		if(i>7) LCD_SetTextColor(Red);
		else LCD_SetTextColor(White);
		LCD_DisplayChar(Line5,(20-i)*16,lcd_str[i]);
	}
	LCD_SetTextColor(White);

我们还是将字符串打印到lcd_str中去,从0开始数的话,数字位于第8列,我们就设定i>7(我们可以多次修改,直至出现复合自己预期的结果)时让字体颜色设为红色,其他时候为白色,然后再利用显示单个字符的函数。函数第一个参数为行,第二个参数为开始列,这个函数是从后向前打印,所以应该为(20-i)列,一列占16字节。打印完成后再将字体设置为白色,否则就会出现除了VNBR其他字体全是红色的现象。

具体效果如下:


具体代码及资源包如下:

通过百度网盘分享的文件:蓝桥杯培训
链接:https://pan.baidu.com/s/1N2aFu2QKjKalcznl5sNbAw?pwd=1234 
提取码:1234 

培训视频后续添加到此。

编写不易,点个关注吧,给点动力!!!!! 

标签:文件,国奖,函数,lcd,蓝桥,LCD,文件夹,我们
From: https://blog.csdn.net/qq_62549077/article/details/142449527

相关文章

  • 蓝桥杯嵌入式的学习总结
    一.前言    嵌入式竞赛实训平台(CT117E-M4)是北京国信长天科技有限公司设计,生产的一款“蓝桥杯全国软件与信息技术专业人才大赛-嵌入式设计与开发科目“专用竞赛平台,平台以STM32G431RBT6为主控芯片,预留扩展板接口,可为用户提供丰富的实验场景。以下内容都是小编......
  • 【洛谷】P10417 [蓝桥杯 2023 国 A] 第 K 小的和 的题解
    【洛谷】P10417[蓝桥杯2023国A]第K小的和的题解题目传送门题解CSP-S1补全程序,致敬全A的答案,和神奇的预言家。写一下这篇的题解说不定能加CSP2024的RP代码#include<bits/stdc++.h>#definelowbit(x)x&(-x)#defineendl"\n"usingnamespacestd......
  • 【蓝桥杯】2024.9.22算法赛——灵魂问题\全栈项目小组(C++)
    一、灵魂问题题目灵魂问题题目分析1.要求输出一个整数2.题目在玩脑筋急转弯,关键句子标出来了——糖什么的根本不重要。所以咖啡不加糖,答案是0!!!代码#include<iostream>usingnamespacestd;intmain(){ cout<<0; return0;}二、全栈项目小组题目全栈项目小组......
  • 蓝桥杯十五届软件赛C++B组题解
    最近蓝桥杯官网已经把十五届题目上架了,我会尽快的将题解发出来,没有发的过段时间再补。​​​​​​​数字接龙一个很鹅心的搜索题,一不注意就会写错,比赛的时候写不来,题目上架后也WA了两个样例才过。题目大意:也就是说从(1,1)开始 ,下一步路的数据总是要比当前数据大1,超过k就......
  • 《DNK210使用指南 -CanMV版 V1.0》第二十五章 LCD图片显示实验
    第二十五章LCD图片显示实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正......
  • 蓝桥杯1-握手问题
    解法一:usingnamespacestd;intmain(){intans=0;for(inti=1;i<=50;i++)for(intj=i+1;j<=50;j++)//排除七人情况{if(!(i>=1&&i<=7&&j>=1&&j<=7))ans++;......
  • 蓝桥杯嵌入式冲刺国奖-1、LED基础配置
     1、原理图在官方给的产品手册中,可以看到控制8个LED的引脚分别为PC8-PC15,,正常来说我们只需要修改引脚的高低电平即可控制灯的亮灭,但该原理图有一个PD2引脚,我们需要先拉高再拉低才可修改PC8-PC12的引脚。2、Cubemx基础配置首先选择芯片型号,我们用的板子是stm32g431rbt6,我......
  • LCD显示器的接口协议
    简介LCD的接口有多种,常用的LCD的连接方式有如下几种:MCU(MPU)模式,RGB模式,SPI模式,VSYNC模式,MDDI模式,DSI模式,MIPI模式,LVDS模式,TTL模式,EDP模式。1.SPI接口模式有3线和4线的,连线为CS/,SLK,SDI,SDO四根线,连线少但是软件控制比较复杂。2.IIC接口模式有两根线,SCL时钟线和SDA数据线,连线少但......
  • 洛谷P8774 [蓝桥杯 2022 省 A] 爬树的甲壳虫 题解 期望DP
    题目链接:https://www.luogu.com.cn/problem/P8774思路:设\(f_i\)为甲壳虫从高度\(i\)到达高度\(n\)因为从高度\(i\)走\(1\)步有\(1-P_{i+1}\)的概率到达高度\(i+1\),有\(P_{i+1}\)的概率到达高度\(0\),所以:\(f_i=1+(1-P_{i+1})\timesf_{i+1}+P_{i+1}\times......
  • 蓝桥杯【物联网】零基础到国奖之路:八. RTC
    蓝桥杯【物联网】零基础到国奖之路:八.RTC第一节RTC的基本知识第二节CubeMX配置第三节代码第一节RTC的基本知识RTC是实时时钟,指可以想时钟一样输出实际时间的电子设备,一般会是集成电路,也被称为是时钟芯片。总之,RTC只是一个靠电池维持运行的32位定时器,并不像实时......