【蓝桥杯嵌入式(二)Led、Key、Lcd】

2024-09-06 20:52
文章标签 led 蓝桥 嵌入式 key lcd

本文主要是介绍【蓝桥杯嵌入式(二)Led、Key、Lcd】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

蓝桥杯嵌入式(二)Led、Key、Lcd

  • 五、Led模块
    • 1.原理图配置
    • 2. 知识点
    • 3.底层代码
  • 六、Key模块
    • 1.原理图配置
    • 2.知识点
    • 3.底层代码
      • 底层代码(四⾏代码版本)
      • 底层代码(状态机版本)
  • 七、LCD模块
    • 1.原理图配置
    • 2.知识点
    • 底层代码

五、Led模块

1.原理图配置

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

2. 知识点

在这里插入图片描述
在这里插入图片描述
链接: 上拉电阻的通俗解释
在这里插入图片描述
在这里插入图片描述
链接: 单⽚机怎么输出⾼电平!推挽输出和开漏输出最本质的区别?

3.底层代码

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

#include "led_app.h"uint8_t ucled[8] = {1,0,1,0,1,0,1,0};void led_disp(uint8_t *ucLed)
{uint8_t temp = 0x00;static uint8_t temp_old = 0xff;for(int i=0;i<8;i++){temp |=(ucLed[i]<<(7-i));}if (temp != temp_old){GPIOC->ODR &= 0x00ff;GPIOC->ODR |= ~(temp<<8);GPIOD->BSRR |= 0x01 << 2;  GPIOD->BRR |= 0x01 << 2;      temp_old = temp; }
}void led_proc(void)
{led_disp(ucled);
}

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

六、Key模块

1.原理图配置

在这里插入图片描述
这里接VDD,所以是下面配置是上拉电阻;
如果是GND,则为下拉电阻
在这里插入图片描述
在这里插入图片描述

2.知识点

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

3.底层代码

底层代码(四⾏代码版本)

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

#include "key_app.h"uint8_t key_val = 0; // 当前按键状态
uint8_t key_old = 0; // 前一按键状态
uint8_t key_down = 0; // 按下的按键
uint8_t key_up = 0; // 释放的按键/*** @brief 读取按键状态* * 该函数读取连接在 GPIO 引脚上的按键状态,并返回相应的按键编号。* * @return 返回按键编号。0 表示没有按键按下,1-4 表示对应的按键被按下。*/
uint8_t key_read(void)
{// 用于存储按键状态的临时变量uint8_t temp = 0;// 检查 GPIOB 引脚 0 的状态if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == GPIO_PIN_RESET) temp = 1; // 如果引脚状态为 RESET,则按键 1 被按下// 检查 GPIOB 引脚 1 的状态if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == GPIO_PIN_RESET) temp = 2; // 如果引脚状态为 RESET,则按键 2 被按下// 检查 GPIOB 引脚 2 的状态if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == GPIO_PIN_RESET) temp = 3; // 如果引脚状态为 RESET,则按键 3 被按下// 检查 GPIOA 引脚 0 的状态if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) temp = 4; // 如果引脚状态为 RESET,则按键 4 被按下// 返回检测到的按键编号return temp;
}/*** @brief 按键处理函数* * 该函数用于扫描按键的状态,并更新按键按下和释放的标志*/
void key_proc(void)
{// 读取当前按键状态key_val = key_read();// 计算按下的按键(当前按下状态与前一状态异或,并与当前状态相与)key_down = key_val & (key_old ^ key_val);// 计算释放的按键(当前未按下状态与前一状态异或,并与前一状态相与)key_up = ~key_val & (key_old ^ key_val);// 更新前一按键状态key_old = key_val;if(key_down != 0)ucled[key_down] ^= 1;
}

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

底层代码(状态机版本)

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

七、LCD模块

1.原理图配置

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

2.知识点

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

底层代码

PS:注意要包含官方的lcd.c,lcd.h,fonts.h

#include "lcd_app.h"void LcdSprintf(uint8_t Line, char *format,...)
{char String[21];  // 缓冲区用于存储格式化后的字符串//长度是20,还有一个截止符va_list arg;      // 参数列表用于存储可变参数va_start(arg, format);  // 使用格式化字符串初始化参数列表vsprintf(String, format, arg);  // 格式化字符串并存储在缓冲区中va_end(arg);  // 清理参数列表LCD_DisplayStringLine(Line,(u8 *)String);  // 在LCD的指定行显示格式化后的字符串
}uint8_t count = 0;void lcd_proc(void)
{LcdSprintf(Line0,"Test LCD App");LcdSprintf(Line1,"Count: %d",count);count++;
}

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

LCD_Init();
LCD_Clear(Black);
LCD_SetTextColor(White);
LCD_SetBackColor(Black);

在这里插入图片描述

这篇关于【蓝桥杯嵌入式(二)Led、Key、Lcd】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143096

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

嵌入式方向的毕业生,找工作很迷茫

一个应届硕士生的问题: 虽然我明白想成为技术大牛需要日积月累的磨练,但我总感觉自己学习方法或者哪些方面有问题,时间一天天过去,自己也每天不停学习,但总感觉自己没有想象中那样进步,总感觉找不到一个很清晰的学习规划……眼看 9 月份就要参加秋招了,我想毕业了去大城市磨练几年,涨涨见识,拓开眼界多学点东西。但是感觉自己的实力还是很不够,内心慌得不行,总怕浪费了这人生唯一的校招机会,当然我也明白,毕业

深入探索嵌入式 Linux

摘要:本文深入探究嵌入式 Linux。首先回顾其发展历程,从早期尝试到克服诸多困难逐渐成熟。接着阐述其体系结构,涵盖硬件、内核、文件系统和应用层。开发环境方面包括交叉编译工具链、调试工具和集成开发环境。在应用领域,广泛应用于消费电子、工业控制、汽车电子和智能家居等领域。关键技术有内核裁剪与优化、设备驱动程序开发、实时性增强和电源管理等。最后展望其未来发展趋势,如与物联网融合、人工智能应用、安全性与

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed 文章目录 DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed问题解决办法 问题 使用 DBeaver 连接 MySQL 数据库的时候, 一直报错下面的错误 Public Key Retrieval is

C语言蓝桥杯

一、语言基础 竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_s

物联网之流水LED灯、正常流水灯、反复流水灯、移动流水灯

MENU 硬件电路设计软件程序设计正常流水LED灯反复流水LED灯移动流水LED灯 硬件电路设计 材料名称数量直插式LED1kΩ电阻杜邦线(跳线)若干面包板1 每一个LED的正极与开发板一个GPIO引脚相连,并串联一个电阻,负极接GND。 当然也可以选择只使用一个电阻。 软件程序设计 正常流水LED灯 因为要用到多个GPIO引脚,所以最好把所有的GPI

嵌入式技术的核心技术有哪些?请详细列举并解释每项技术的主要功能和应用场景。

嵌入式技术的核心技术包括处理器技术、IC技术和设计/验证技术。 1. 处理器技术    通用处理器:这类处理器适用于不同类型的应用,其主要特征是存储程序和通用的数据路径,使其能够处理各种计算任务。例如,在智能家居中,通用处理器可以用于控制和管理家庭设备,如灯光、空调和安全系统。    单用途处理器:这些处理器执行特定程序,如JPEG编解码器,专门用于视频信息的压缩或解压。在数字相机中,单用途