STM32F103R6芯片的PB4-PB9以共阳极的形式 接了六个LED灯,试绘图并编程实现开闭幕式效果同时实现
时间: 2024-10-11 22:10:34 浏览: 36
STM32F103R6是一款基于ARM Cortex-M3内核的微控制器,其GPIO口PB4到PB9通常用于驱动外部设备,如LED灯。要实现共阳极的六路LED灯开关控制,并模拟开闭幕式的动态效果,首先需要设计电路连接和编写相应的程序。
**电路设计:**
1. 将PB4至PB9的所有GPIO配置为输出模式。
2. 共阳极LED接法:将LED的正极接到5V电源,负极通过每个GPIO引脚相连,而公共端接地或通过上拉电阻接到5V。这样,当GPIO输出低电平时(0),LED亮;高电平(1)则LED灭。
**软件编程(使用Keil MDK和STM32CubeMX):**
```c
#include "stm32f1xx_hal.h"
// LED宏定义
#define LED_1 GPIO_PIN_4
#define LED_2 GPIO_PIN_5
#define LED_3 GPIO_PIN_6
#define LED_4 GPIO_PIN_7
#define LED_5 GPIO_PIN_8
#define LED_6 GPIO_PIN_9
// 开关状态数组
static uint8_t led_states[6];
void setup(void) {
// 配置GPIO
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = LED_1 | LED_2 | LED_3 | LED_4 | LED_5 | LED_6;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// 初始化所有LED为关闭
for (int i = 0; i < 6; i++) {
led_states[i] = 0; // 输出低电平(熄灭)
}
}
void loop() {
// 模拟开闭幕式效果
for (int i = 0; i <= 5; i++) {
int j = 5 - i;
// LED依次点亮和熄灭
HAL_GPIO_WritePin(GPIOB, LED_1 | LED_2 | LED_3 | LED_4 | LED_5 | LED_6, led_states[j]);
HAL_Delay(100); // 等待一段时间再切换下一个
}
// 闭幕式
for (int i = 0; i <= 5; i++) {
int j = 5 - i;
HAL_GPIO_WritePin(GPIOB, LED_1 | LED_2 | LED_3 | LED_4 | LED_5 | LED_6, led_states[j]); // 同样顺序关闭
HAL_Delay(100);
}
}
阅读全文