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

相关文章

SQL 外键Foreign Key全解析

《SQL外键ForeignKey全解析》外键是数据库表中的一列(或一组列),用于​​建立两个表之间的关联关系​​,外键的值必须匹配另一个表的主键(PrimaryKey)或唯一约束(UniqueCo... 目录1. 什么是外键?​​ ​​​​2. 外键的语法​​​​3. 外键的约束行为​​​​4. 多列外键​

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

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__有时候为了方便起见,