基于STM32G431嵌入式学习笔记——四、LED+KEY+LCD综合练习(基于第12届蓝桥杯显示部分题目)
创始人
2024-02-07 03:03:12

在学习了前三节LED、LCD、KEY基本操作后,我们就已经成功掌握蓝桥杯必考的三大样内容了,本节以第12届蓝桥杯显示部分内容进行综合练习:

一、真题引入

1.功能概述

在这里插入图片描述

2.LCD显示界面
(1)车位显示界面

在这里插入图片描述

(2)费率显示界面

在这里插入图片描述
在这里插入图片描述

(3)LCD通用显示要求

在这里插入图片描述

3.按键功能

在这里插入图片描述

4.LED指示灯功能

在这里插入图片描述

5.初始状态说明

在这里插入图片描述

二、题目分析

上述为作者将三大模块的输出截取出来的题目要求,并非蓝桥杯竞赛全部比赛要求。

1.解题思路

为了使解题过程循序渐进一气呵成,我们首先要先总结出以下几点内容:

①LCD屏幕一共两个屏幕界面,因此要书写两段LCD输出的代码
②板子上电后就有内容显示,默认处于车位显示界面,因此可以首先书写该屏幕的内容保证初始化没问题
③按键是为LED、LCD服务的,因此最后书写按键状态切换的逻辑
④LED在本题中一共两种状态——LED1亮 or 都灭

2.解题步骤

因此解题步骤如下:
编写车位显示界面 --> 编写费率显示界面 --> 编写LED灯功能 -->编写按键的逻辑限制

三、环境搭建

新建CubeMX
在这里插入图片描述配置外部时钟
在这里插入图片描述在这里插入图片描述配置基础引脚(LED与KEY)
我们可以看出这里并没有像第一节那样去将所有的灯引脚置为High,是因为当时这么做的目的是初始化的时候LED灯全灭,这是硬件控制的方法
事实上我们也可以用一行代码实现我们想要的功能,即采用软件控制的方法(见后续代码实现中的操作)
在这里插入图片描述配置工程基础信息
在这里插入图片描述进入keil,初始化编译
在这里插入图片描述添加lcd.c lcd.h模块文件,并编译
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

四、通用功能函数书写以及文件导入

1.key.h
#include "stm32g4xx_hal.h"#define KEY1 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)
#define KEY2 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)
#define KEY3 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)
#define KEY4 HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)char key_scan(void);
char key_scan_cd(void);
2.key.c
#include "stm32g4xx_hal.h"
#include "key.h"char key_scan(void)
{static int count1,count2,count3,count4;char value=0;count1 = count2 = count3 = count4 = 0;if(KEY1==0){HAL_Delay(10);if(KEY1==0){count1++;if(count1==1){value = 1;while(KEY1==GPIO_PIN_RESET);}}}else{count1 = 0;}if(KEY2==0){HAL_Delay(10);if(KEY2==0){count2++;if(count2==1){value = 2;while(KEY2==GPIO_PIN_RESET);}}}else{count2 = 0;}if(KEY3==0){HAL_Delay(10);if(KEY3==0){count3++;if(count3==1){value = 3;while(KEY3==GPIO_PIN_RESET);}}}else{count3 = 0;}if(KEY4==0){HAL_Delay(10);if(KEY4==0){count4++;if(count4==1){value = 4;while(KEY4==GPIO_PIN_RESET);}}}else{count4 = 0;}return value;
}
char key_scan_cd(void)
{static int count1,count2,count3,count4;char value=0;count1 = count2 = count3 = count4 = 0;if(KEY1==0){HAL_Delay(10);if(KEY1==0){count1++;if(count1>70){value = 11;}}}else{if(count1>0&&count1<=50){value = 1;}count1 = 0;}if(KEY2==0){HAL_Delay(10);if(KEY2==0){count2++;if(count2>70){value = 22;}}}else{if(count2>0&&count2<=50){value = 2;}count2 = 0;}if(KEY3==0){HAL_Delay(10);if(KEY3==0){count3++;if(count3>70){value = 33;}}}else{if(count3>0&&count3<=50){value = 3;}count3 = 0;}if(KEY4==0){HAL_Delay(10);if(KEY4==0){count4++;if(count4>70){value = 44;}}}else{if(count4>0&&count4<=50){value = 4;}count4 = 0;}return value;
}
3.led.h
#include "stm32g4xx_hal.h"
//灯光的亮灭
#define ON 1
#define OFF 0
//定义引脚
#define LED1 HAL_GPIO_PIN_8
#define LED2 HAL_GPIO_PIN_9
#define LED3 HAL_GPIO_PIN_10
#define LED4 HAL_GPIO_PIN_11
#define LED5 HAL_GPIO_PIN_12
#define LED6 HAL_GPIO_PIN_13
#define LED7 HAL_GPIO_PIN_14
#define LED8 HAL_GPIO_PIN_15
#define LEDALL HAL_GPIO_PIN_ALL//相关函数的声明
void control_led(uint16_t LED, uint8_t status);
4.led.c
#include "led.h"void control_led(uint16_t LED, uint8_t status)
{if(status == 0)//灭灯{HAL_GPIO_WritePin(GPIOC,LED,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);}else//亮灯{       HAL_GPIO_WritePin(GPIOC,LED,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);}
}

五、本题目中功能函数书写

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...