写一个使用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--);
}
``
原文地址: https://www.cveoy.top/t/topic/hp7k 著作权归作者所有。请勿转载和采集!