【蓝桥杯嵌入式(二)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

相关文章

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

MySQL中Next-Key Lock底层原理实现

《MySQL中Next-KeyLock底层原理实现》Next-KeyLock是MySQLInnoDB存储引擎中的一种锁机制,结合记录锁和间隙锁,用于高效并发控制并避免幻读,本文主要介绍了MySQL中... 目录一、Next-Key Lock 的定义与作用二、底层原理三、源代码解析四、总结Next-Key L

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

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