基于STM32G431嵌入式学习笔记——四、LED+KEY+LCD综合练习(基于第12届蓝桥杯显示部分题目)

news2025/1/13 9:45:11

在学习了前三节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);
    }
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/24562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PostgreSQL数据库缓冲区管理器——本地缓冲区管理

本地缓冲区管理器(local buffer manager)为temporary表&#xff08;无需WAL-logged或checkpointed&#xff09;进行快速缓冲区管理&#xff0c;API定义在src/backend/storage/buffer/localbuf.c中。 获取LocalBuffer 初始化 首先解释temp_buffers GUC参数&#xff0c;其用于…

Servlet学习日志

Hello Web Web World Wide Web 全球广域网->也称为万维网 是一种基于超文本和HTTP协议的分布式应用架构 HTML&#xff08;HyperText Mark-up Language&#xff09;:用于链接网络上的信息 HTTP协议&#xff08;HyperText Transfer Protocol&#xff09;:规定了服务端与客户…

国际海运流程有哪些,国际海运物流哪家比较好

国际海运的优点是运输费划算&#xff0c;并且可以走的货物类目多&#xff0c;合适大物件、大批的长距离运送。进出境运输工具的负责人、进出境物品的所有人或者他们的代理人向海关办理货物、物品或运输工具进出境手续及相关海关事务的过程&#xff0c;包括向海关申报、交验单据…

分析 SpringBoot 底层机制【Tomcat 启动分析 +Spring 容器初始化 +Tomcat 如何关联 Spring 容器 】

目录 一.搭建 SpringBoot 底层机制开发环境 1.pom.xml文件配置 2.springboot主程序MainApp.java 3.启动项目&#xff0c;然后我们准备开始思考 4.开始思考 底层机制分析: 仍然是 我们实现 Spring 容器那一套机制 IO/文件扫描注解反射 集合映射集合映射 二.源码分析: Spri…

DeepLab V2学习笔记

DeepLab V2遇到的相关问题以及解决方法对于DeepLab V1的优化模型总结补充的一个小知识点ASPPLearning rate policy实验结果消融实验实验结果遇到的相关问题以及解决方法 和DeepLab V1中遇到的问题几乎没有什么太大的差别&#xff0c;在文章的引言部分作者提出了在语义分割中遇…

小程序商城拓展中小商户“线上时间”,系统化思维

在数字经济时代初期&#xff0c;新一代信息基础设施建设仍有待完善&#xff0c;在拓展“互联网”应用场景中应不断缩小“数字鸿沟”&#xff0c;逐渐向产业和行业下沉&#xff0c;让互联网巨头和中小微商户共享数字技术的红利&#xff0c;也因此将推动包括传统商户在内的数字化…

政务系统信息网络安全的风险评估

在当今信息时代的大形势下&#xff0c;互联网从普及到飞速发展&#xff0c;政务系统信息网络安全的问题也日益被重视起来。一方面&#xff0c;人们应该了解到政务系统信息网络安全的重要性&#xff1b;另一方面&#xff0c;人们对政务系统信息网络安全风险评估工作有所了解。有…

公厕智能感应皂液盒,无液手机信息提醒

传统式的洗手液一按一压。有时候经常控制不住量&#xff0c;一不小心就容易按多&#xff0c;弄得洗手台乱七八糟&#xff0c;满身也是黏哒哒的&#xff0c;特别让人糟心。刚做完饭&#xff0c;满手油腻&#xff0c;或是刚上完厕所&#xff0c;去按洗手液泵势必会弄脏它。 所以智…

【Python+Appium】开展自动化测试(一)

目录 前言 一&#xff0c;安装JDK&#xff0c;配置JDK环境变量 1&#xff0c;下载jdk 2&#xff0c;安装jdk 3&#xff0c;配置jdk环境变量 二&#xff0c;安装Android SDK&#xff0c;配置Android SDK环境 1&#xff0c;下载Android SDK 2&#xff0c;双击SDK Manager…

【日常记录】解决‘GLIBC_2.34‘ not found,并且gcc制定glibc版本编译

小荣的日常记录 &#x1f525;系列专栏&#xff1a;日常记录 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月21日&#x1f334; &#x1f36d;作者水平很有限&#xff0c;如果发现错…

DETR训练自己数据集心得

对QKV的理解&#xff0c;先废一下话... 计算流程参考&#xff1a;https://zhuanlan.zhihu.com/p/82312421 给定一组query&#xff0c;和当前输入样本input&#xff08;每个样本都有各自的key&#xff09;&#xff0c;经过空间变化后input→query。 计算query和key之间的相关…

深度学习与总结JVM专辑(二):垃圾回收基础(图文+代码)

垃圾回收基础概念什么是垃圾回收为什么要进行垃圾回收垃圾什么是垃圾你是垃圾吗&#xff1f;让我用算法来测测你。引用计数算法可达性分析算法对象引用对象&#xff0c;真的死了吗方法区回收废弃常量无用类垃圾回收算法回收类型分代收集理论标记清除算法&#xff08;Mark-Sweep…

【Hack The Box】linux练习-- Irked

HTB 学习笔记 【Hack The Box】linux练习-- Irked &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月17日&#x1f334; &#x1f36…

[附源码]计算机毕业设计JAVA基于ssm的电子网上商城

[附源码]计算机毕业设计JAVA基于ssm的电子网上商城 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

基于FPGA的PID控制器开发与实现

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 效果预览: 目录 一、理论基础 二、核心程序 三、测试结果

数据结构与算法之顺序表详解

标题&#xff1a;猜数字小游戏 作者&#xff1a;Ggggggtm 寄语&#xff1a;与其忙着诉苦&#xff0c;不如低头赶路&#xff0c;奋路前行&#xff0c;终将遇到一番好风景 文章目录&#xff1a; 一、顺序表的概念与结构 1、线性表的解释 2、顺序表概念解释 二、顺序表的思路及代码…

ERP系统三种部署方式的区别

ERP系统被认为是一种 "企业应用程序"&#xff0c;指的是为满足企业的软件需求和提高业务绩效而设计的软件。今天有许多不同的ERP系统可供使用&#xff0c;其范围很广&#xff0c;取决于企业的规模、功能和需求。ERP系统的类型根据其部署方式划分&#xff0c;包括云ER…

二、Redis分布式锁

一、什么是分布式锁 分布式锁是一种跨进程的&#xff0c;跨机器节点的一种互斥锁。保证在多个机器节点对共享资源访问的一个排他性。 分布式与单机情况下最大的不同在于分布式锁是多进程的而单机锁是单进程多线程的。 二、为什么需要分布式锁 与分布式锁相对就的是单机锁&…

BHQ-1 amine,1308657-79-5,BHQ染料通过FRET和静态猝灭的组合工作

英文名称&#xff1a;BHQ-1 amine 中文名称&#xff1a;BHQ-1 氨基 CAS&#xff1a;1308657-79-5 外观&#xff1a;深紫色粉末 分子式&#xff1a;C25H29N7O3 分子量&#xff1a;475.55 结构式&#xff1a; 溶解性&#xff1a;溶于大部分有机溶剂&#xff0c;溶于水 储存…

luffy-(13)

内容概览 支付宝支付介绍支付宝支付二次封装订单相关表设计生成订单接口支付前端支付宝回调接口 支付宝支付介绍 """ 项目中有需要在线支付功能,可以使用支付宝支付(沙箱环境)微信支付(需要有备案过的域名)云闪付我们的项目以支付宝支付为例支付流程使用官方…