使用 STM32F103C8T6 全引脚实现 LED 流水灯程序示例

由于 STM32F103C8T6 芯片拥有众多引脚,本示例提供一种使用全部引脚实现 LED 流水灯程序的方法。程序中使用了延时函数,实际应用中需要根据具体的需求选择合适的延时函数或使用定时器。

#include "stm32f10x.h"

#define LED_COUNT 72

void Delay(uint32_t nCount);

int main(void) {
    GPIO_InitTypeDef GPIO_InitStructure;
    int i, j;

    // 使能 GPIOA 时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    // 配置 GPIOA 的全部引脚为输出模式
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    while (1) {
        // 从左到右流水灯
        for (i = 0; i < LED_COUNT; i++) {
            GPIO_SetBits(GPIOA, GPIO_Pin_0 << i);
            Delay(100000);
            GPIO_ResetBits(GPIOA, GPIO_Pin_0 << i);
        }

        // 从右到左流水灯
        for (i = LED_COUNT - 1; i >= 0; i--) {
            GPIO_SetBits(GPIOA, GPIO_Pin_0 << i);
            Delay(100000);
            GPIO_ResetBits(GPIOA, GPIO_Pin_0 << i);
        }

        // 交替亮灭
        for (i = 0; i < LED_COUNT / 2; i++) {
            GPIO_SetBits(GPIOA, GPIO_Pin_0 << i);
            GPIO_SetBits(GPIOA, GPIO_Pin_0 << (LED_COUNT - 1 - i));
            Delay(100000);
            GPIO_ResetBits(GPIOA, GPIO_Pin_0 << i);
            GPIO_ResetBits(GPIOA, GPIO_Pin_0 << (LED_COUNT - 1 - i));
        }

        // 交替流水灯
        for (i = 0, j = LED_COUNT - 1; i < LED_COUNT / 2; i++, j--) {
            GPIO_SetBits(GPIOA, GPIO_Pin_0 << i);
            GPIO_SetBits(GPIOA, GPIO_Pin_0 << j);
            Delay(100000);
            GPIO_ResetBits(GPIOA, GPIO_Pin_0 << i);
            GPIO_ResetBits(GPIOA, GPIO_Pin_0 << j);
        }
    }
}

// 延时函数
void Delay(uint32_t nCount) {
    for (; nCount != 0; nCount--);
}

注意:

  • 以上程序需要根据实际硬件连接情况进行修改,例如 LED 连接的引脚、LED 数量等。
  • 延时函数的延时时间需要根据实际情况进行调整。
  • 建议使用定时器实现更加精准的延时功能。
STM32F103C8T6 全引脚 LED 流水灯程序示例

原文地址: https://www.cveoy.top/t/topic/oSW9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录