stm32f103矩阵LED灯从左到右从上到下实现代码
时间: 2023-09-03 18:06:21 浏览: 89
以下是基于STM32F103芯片的矩阵LED灯从左到右从上到下的示例代码,使用了STM32Cube HAL库和GPIO控制:
```c
#include "stm32f1xx_hal.h"
// 定义LED灯矩阵大小
#define MATRIX_WIDTH 8
#define MATRIX_HEIGHT 8
// 定义LED灯引脚
#define LED_GPIO_PORT GPIOA
#define LED_GPIO_PIN GPIO_PIN_0
// 定义LED灯点亮的时间间隔(单位:毫秒)
#define LIGHT_TIME 200
// 初始化LED灯矩阵状态
uint8_t led_matrix[MATRIX_HEIGHT][MATRIX_WIDTH] = {0};
// 定义当前点亮的LED灯的位置
uint8_t current_row = 0;
uint8_t current_col = 0;
// 定义延时函数
void delay_ms(uint32_t ms) {
HAL_Delay(ms);
}
// 初始化LED灯引脚
void LED_Init() {
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 开启GPIOA时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
// 配置引脚为推挽输出模式
GPIO_InitStruct.Pin = LED_GPIO_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
}
// 点亮当前LED灯
void LED_Light() {
// 根据当前LED灯矩阵的状态设置引脚电平
HAL_GPIO_WritePin(LED_GPIO_PORT, LED_GPIO_PIN, led_matrix[current_row][current_col]);
}
// 主循环
int main(void) {
// 初始化HAL库
HAL_Init();
// 初始化LED灯引脚
LED_Init();
// 循环播放效果
while (1) {
// 从左到右、从上到下遍历LED灯矩阵
for (uint8_t row = 0; row < MATRIX_HEIGHT; row++) {
for (uint8_t col = 0; col < MATRIX_WIDTH; col++) {
// 更新当前LED灯的位置
current_row = row;
current_col = col;
// 点亮LED灯
LED_Light();
// 延时一段时间,控制点亮时间间隔
delay_ms(LIGHT_TIME);
// 熄灭LED灯
led_matrix[current_row][current_col] = 0;
LED_Light();
}
}
}
}
```
这个示例代码使用了STM32Cube HAL库来控制STM32F103芯片的GPIO引脚。首先,需要根据实际连接的引脚和矩阵LED灯的大小进行相应的配置。在主循环中,通过嵌套的循环从左到右、从上到下遍历LED灯矩阵,并依次点亮和熄灭每个LED灯。延时函数`delay_ms`用于控制点亮时间间隔。希望对您有所帮助!如果有任何问题,请随时追问。