蓝桥杯嵌入式(G431)备赛笔记——LED

目录

cubeMX配置:

代码模板:

注意:


cubeMX配置:

原理图,其中PD2高电平使能锁存器,PC8-15默认给高电平,放置上电初始化LED亮

74HC573是八路输出锁存器

1脚是使能,低电平有效,高电平输出高阻

2~9是输入,PC8-PC15

19~12是输出

11是锁存,即PD2:

高电平是同步,即输出跟随输入变化

低电平锁存,即输出不再改变

引脚设置,只用设置PD2为输出模式,其他的引脚拉高,让灯默认熄灭,或者不拉高在程序初始化的时候将LED全部熄灭,PD2在低电平情况下关闭,所以默认状态就好

添加库文件夹路径,并新建LED库文件

main.h添加宏定义

添加头文件

测试led

代码模板:

led.c:

cpp 复制代码
#include "led.h" // 引入 LED 相关的头文件

void LED_disp(uint8_t led)
{
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET); // 将 GPIOD 引脚 2 设置为高电平,可能是控制 LED 的锁存器
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, GPIO_PIN_SET); // 将 GPIOC 所有引脚设置为高电平,熄灭之前的 LED
    HAL_GPIO_WritePin(GPIOC, led << 8, GPIO_PIN_RESET); // 将 GPIOC 中对应位的引脚设置为低电平,点亮指定的 LED
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET); // 将 GPIOD 引脚 2 设置为低电平,锁存器锁住 GPIOC 的引脚状态
}

uint32_t led_tick = 0; // 定义一个无符号 32 位整型变量 led_tick,用于记录上次 LED 变换的时间戳
uint8_t led_num = 0; // 定义一个无符号 8 位整型变量 led_num,用于记录当前要显示的 LED 状态

void LED_proc()
{
    if (uwTick - led_tick < 1000) // 如果当前时间与上次 LED 变换的时间间隔小于 1000 毫秒,则直接返回,不执行 LED 变换操作
        return;
    led_tick = uwTick; // 更新 LED 变换的时间戳为当前时间

    if (led_num != 0) // 如果当前 LED 状态不为 0
        led_num = 0; // 将 LED 状态设为 0,熄灭所有 LED
    else
        led_num = 0xff; // 否则将 LED 状态设为 0xff,点亮所有 LED

    LED_disp(led_num); // 调用 LED_disp 函数,根据新的 LED 状态进行 LED 显示
}

注意:

'led << 8',是将'led'这个字符串在相应寄存器中左移八位,其中相应位置是1的拉低(RESET),即点亮led

if(led_num != 0) led_num = 0;

else led_num = 0xff;

这一段实现了led的闪烁

led.h:

cpp 复制代码
// LED.h 头文件的 ifndef、define、endif 结构用于防止头文件被多次包含
#ifndef _LED_H_
#define _LED_H_

// 包含 main.h 头文件,以便在 LED.h 中使用其中定义的类型和宏
#include "main.h"

// LED_Disp 函数的声明
void LED_disp (uint8_t led);
void LED_proc (void);

#endif // 结束 ifndef _LED_H_
相关推荐
蜀黍@猿13 分钟前
ARM 汇编入门(十二):MMU、页表与虚拟内存全解析
汇编·arm开发·stm32·mcu
柳鲲鹏16 小时前
内斗学概论:43、平级内斗
笔记
wuyk55517 小时前
嵌入式故障诊断-Bug002-局部大数组压栈高温必死机
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机·嵌入式实时数据库
星恒随风18 小时前
MySQL 从零入门(四):表的增删改查与基础查询详解
linux·服务器·数据库·笔记·mysql
Z21-X20 小时前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
Zwawa21 小时前
嵌入式OLED表驱动菜单:用一张表、一个栈和一个窗口重写表驱动菜单
c语言·单片机·嵌入式
Dev_XH21 小时前
【成品设计】基于沁恒单片机的电动汽车充电站智慧调度系统
stm32·单片机·嵌入式硬件·物联网
Zw-awa1 天前
嵌入式OLED表驱动菜单:用一张表、一个栈和一个窗口重写表驱动菜单
stm32
蜀黍@猿1 天前
ARM 汇编入门(十):标量浮点与 VFP 指令全解析
汇编·arm开发·stm32·mcu
晓梦林1 天前
BUUCTF-菜刀流量-MISC-学习笔记
笔记·学习