蓝桥杯嵌入式学习笔记——LED

本文介绍了如何在STM32中使用573锁存器控制复用引脚的LED灯,包括引脚配置、锁存器操作、GPIO初始化以及Keil5程序设计,展示了整体控制和单独控制LED灯的方法。
摘要由CSDN通过智能技术生成

前言

因为控制LED的引脚与LCD屏幕的引脚是复用的,所以这里使用了一片573锁存器芯片。其中PC8~PC15经过锁存器接到LED、PD2控制锁存器的状态,当PD2在低电平时锁存器在锁存状态,即输出不随输入变化而变化,反之当PD2在高电平时锁存器在解锁状态,输出随输入变化而变化。

STM32CubeMX配置

首先要将PC8~PC15、PD2配置为输出模式

鼠标左击要配置的引脚选择引脚工作模式为输出模式。

因为单片机输出低电平时点亮led灯,所以GPIO初始化时配置为输出高电平。

因为制锁存器的LE引脚在低电平时为锁存状态,所以GPIO初始化时配置为输出低电平。

配置完成后点击“GENERATE COOE”等待软件更新工程配置。

keil5程序

整体控制

一次更新所有LED灯的状态,程序如下:

/*   
函数功能 : 更新所有LED灯的状态
函数参数 : 8位LED灯的状态(对应位1点亮,0熄灭)
返 回 值 : 空
*/
uint8_t LED_State =  0;//记录led灯得状态

void LED_SetEntierty(uint8_t led_data)
{
	//修改LED灯的状态前先熄灭全部LED
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
	
	//写入要点亮LED的位
	HAL_GPIO_WritePin(GPIOC,led_data<<8,GPIO_PIN_RESET);
	
	//先解锁锁存器更新输出(高电平),再将锁存器锁存住(低电平)。
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
	
	//将LED灯的状态保存下来
	LED_State = led_data;
}

单独控制

一次只更新1位LED灯的状态,程序如下:

/*
函数功能 : 更新1位LED灯的状态
函数参数 : 参数1:LED所在引脚、参数2:LED状态(1点亮、0熄灭)
返 回 值 : 空
*/
void LED_SetOne(uint8_t LED_PIN,uint8_t LED_SET)
{
	//修改LED灯的状态前先熄灭全部LED
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
	
	if(LED_SET == 1)
	{
		LED_State |= 0x01<<(LED_PIN-1);
	}
	else
	{
		LED_State &= ~(0x01<<(LED_PIN-1));
	}
	
	//修改LED灯的状态
	HAL_GPIO_WritePin(GPIOC,LED_State<<8,GPIO_PIN_RESET);
	
	//先解锁锁存器更新输出(高电平),再将锁存器锁存住(低电平)。
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}

示例程序

#include "BspSYS.h"
/*   
函数功能 : 外设初始化函数,只执行一遍
函数参数 : 空
返 回 值 : 空
*/
void setup(void)
{
	LED_SetEntierty(0xaa);//一次控制所有led的状态
	HAL_Delay(1000);
}

/*   
函数功能 : 循环执行函数
函数参数 : 空
返 回 值 : 空
*/
void loop(void)
{
	LED_SetOne(1,1);//按循序循环点亮熄灭LED1 - 3
	HAL_Delay(500);
	LED_SetOne(2,1);
	HAL_Delay(500);
	LED_SetOne(3,1);
	HAL_Delay(500);
	
	LED_SetOne(3,0);
	HAL_Delay(500);	
	LED_SetOne(2,0);
	HAL_Delay(500);	
	LED_SetOne(1,0);
	HAL_Delay(500);			
}

视频效果

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值