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

news2024/9/23 19:17:10

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

在这里插入图片描述

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

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

相关文章

文章改写工具,帮你进行文章修改润色提升文章质量

在文字的世界里&#xff0c;每一篇文章都是创作者心灵的结晶。然而&#xff0c;即使是经验丰富的作家&#xff0c;也难免会在创作过程中遇到表达上的瓶颈。此时&#xff0c;文章改写工具便显得尤为重要&#xff0c;它以其独特的功能&#xff0c;对文章进行精准的修改与润色&…

机器学习算法那些事 | Plotly Express:一种简洁且强大的可视化神器

本文来源公众号“机器学习算法那些事”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;Plotly Express&#xff1a;一种简洁且强大的可视化神器 Plotly Express 是 Python 交互式库 Plotly 的高级组件&#xff0c;受 Seaborn 和 g…

全国机器人大赛 Robocon 常州工学院团队首战国三

全国机器人大赛 Robocon 常州工学院团队首战国三 通宵7天7夜&#xff0c;常州工学院RC团队&#xff0c;首次闯入全国机器人大赛国赛&#xff0c;并成功得分&#xff01; 不同于老牌强队&#xff0c;常州工学院&#xff08;下面用"常工"代替&#xff09;的这只队伍&…

Java题集(由入门到精通)03

此系列文章收录大量Java经典代码题&#xff08;也可以算是leetcode刷题指南&#xff09;&#xff0c;希望可以与大家一起努力学好Java。3、2、1&#xff0c;请看&#xff01; 目录 1.创建学生成绩表 2.冒泡排序 3.模拟彩票中奖 4.杨辉三角 1.创建学生成绩表 输入n个学生的…

【学习笔记】SSL证书安全机制之证书撤销

前言&#xff1a;以往提到过&#xff0c;钓鱼网站会仿冒我们&#xff0c;如果我们的私钥泄露了&#xff0c;如果被不法分子得到了私钥&#xff0c;他们就能假装是我们网站。那现在&#xff0c;我们要做的是生成新私钥并申请新证书。问题来了&#xff0c;旧的证书亦然存在且有效…

胶条的回弹状态检测 仅需一台回弹测试仪

胶条的回弹状态检测之所以重要&#xff0c;主要基于以下几个方面的考虑&#xff1a; 一、保证产品功能性和密封性 密封效果&#xff1a;胶条作为密封元件&#xff0c;其回弹性能直接关系到密封效果的好坏。 耐久性&#xff1a;如果回弹性能不佳&#xff0c;容易出现永久性变形&…

8个txt自动化脚本,一定有你用得上的!Python如何读取txt文件数据!

这次和大家分享txt办公自动化&#xff0c;包括读取、对比、过滤、合并、转换格式、提取数据、统计词频、生成报告等。 分享一份Python学习大礼包&#xff08;激活码安装包、Python web开发&#xff0c;Python爬虫&#xff0c;Python数据分析&#xff0c;人工智能、自动化办公等…

GAMES101(0~1作业)

搭建虚拟机环境 安装Oracle VM VirtualBox虚拟机&#xff0c;安装虚拟硬盘&#xff0c;配置Linux Ubuntu-64 bit系统&#xff0c;启动虚拟机&#xff0c;发生冲突错误&#xff1a; 将Vmware虚拟设备取消挂起状态&#xff0c;关机确保 Hyper-V 完全关闭&#xff1a;bcdedit /se…

Pandas DataFrame的多级列索引导出到Excel时,如何避免空白行和列

我想将multi-header数据框保存为Excel文件。以下是示例代码&#xff1a; import pandas as pd import numpy as npheader pd.MultiIndex.from_product([[location1,location2],[S1,S2,S3]],names[loc,S])df pd.DataFrame(np.random.randn(5, 6), index[a,b,c,d,e], columnsh…

Python 中的 11 种经典时间序列预测方法(备忘单)

摘要: 本文演示了 11 种不同的经典时间序列预测方法,这些方法包括: 自回归(AR) 移动平均线 (MA) 自回归移动平均线 (ARMA) 自回归综合移动平均线 (ARIMA) 季节性自回归综合移动平均线 (SARIMA) 季节性自回归综合移动平均线与外生回归量... 本文演示了 11 种不同的经典时间序…

sheng的学习笔记-AI-半监督聚类

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 半监督学习&#xff1a;sheng的学习笔记-AI-半监督学习-CSDN博客 聚类&#xff1a;sheng的学习笔记-AI-聚类(Clustering)-CSDN博客 均值算法&#xff1a;sheng的学习笔记-AI-K均值算法_k均值算法怎么算迭代两次后的最大…

掌握Git分支管理策略:让团队协作更高效

在现代软件开发过程中&#xff0c;版本控制系统&#xff08;VCS&#xff09;是不可或缺的一部分。Git作为目前最流行的分布式版本控制系统之一&#xff0c;为开发者提供了强大的工具集来管理代码变更历史。然而&#xff0c;仅仅掌握Git的基本命令并不足以应对大型项目和团队协作…

当天审稿,当天上线,9月检索!

各领域CNKI知网普刊&#xff0c;最快一期预计下周送检&#xff0c;最快1天上线 领域广&#xff0c;计算机&#xff0c;社科&#xff0c;医学等各个方向都能收 包检索&#xff0c;可提供期刊部发票 知名出版社英文普刊 NO.1、Food Science and Nutrition Studies ISSN: 2573…

2024年全国大学生数学建模C题论文

C 题 农作物的种植策略 问题 1 &#xff1a;2024-2030 年农作物的最优种植方案 1.1 问题 1 的第一小问详细 该问题要求在假设未来农作物的预期销售量、种植成本、亩产量和销售价 格稳定的情况下&#xff0c;为乡村制定从 2024 年到 2030 年的农作物最优种植方案。特 别是要考虑…

骨传导耳机哪个牌子好用?精选五款黄金畅销骨传导机型测评

随着消费者对健康聆听方式的日益重视&#xff0c;骨传导耳机的市场需求持续高涨。众多耳机厂商在耳机的外观设计上倾注了大量心血&#xff0c;但在此过程中&#xff0c;部分品牌却忽视了产品的核心音质与佩戴舒适度&#xff0c;导致市场上涌现出一些外观时尚但内在品质不尽如人…

缓解父母焦虑!详细实测!这些免费AI可以成为孩子提高学习能力的得力助手!

近日&#xff0c;新版三年级英语教材冲上了热搜。家长纷纷表示&#xff0c;新版教材连26个英文字母都不教了&#xff0c;直接进入单词和文章教学。 ”娃都零基础&#xff0c;开学怎么跟得上&#xff1f;“ “这不是卷孩子&#xff0c;这是卷家长啊&#xff01;” 不仅是英语&…

【爱加密_云平台-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

[已更新问题二三matlab+python]2024数学建模国赛高教社杯C题:农作物的种植策略 思路代码文章助攻手把手保姆级

发布于9.6 10:00 有问题后续会修正!! 问题一代码展示: 问题二代码结果展示: 问题三代码展示: https://docs.qq.com/doc/DVVVlV0NmcnBDTlVJ问题一部分代码分享: #!/usr/bin/env python # coding: utf-8# In[15]:import pandas as pd# In[16]:# 读取Excel文件 file_path 附件2…

platform框架

platform框架 注册设备进入总线platform_device_register函数 注册驱动进入总线platform_driver_register函数 注册设备进入总线 platform_device_register函数 int platform_device_register(struct platform_device *pdev) struct platform_device {const char * name; 名…

《Rust避坑式入门》第2章:解决多线程并发数据竞争的不可变性

从第1章所讨论的出现数据竞争问题的多线程并发剧院订票系统的代码能够看出&#xff0c;虽然可变性能够方便地随时修改值&#xff0c;但滥用可变性&#xff0c;会在多线程并发编程时&#xff0c;带来数据竞争的难题。 共享可变状态所带来的多线程并发时的数据竞争难题&#xff…