给出使用C语言写出的最简单的流水灯程序
时间: 2024-09-26 17:05:02 浏览: 18
在C语言中,编写一个最简单的流水灯程序通常涉及使用Pwm(脉冲宽度调制)功能来控制LED灯。这里是一个基本的例子,假设我们有一个8个LED的环形阵列,每个LED由一个GPIO引脚控制,并且STM32微控制器支持PWM。
```c
#include "stm32f10x.h" // 包含STM32的相关头文件
// LED数组,索引对应GPIO引脚编号
volatile uint8_t led[8] = {0};
void LedCtrl(uint8_t index) {
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = led[index]; // 设置对应的GPIO口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 输出推挽模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 高速
GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIO
if (index == 7) { // 如果是最后一个LED,设置占空比为50%,即半亮
GPIO_SetBits(GPIOA, led[index]); // 开启PWM
} else {
GPIO_ResetBits(GPIOA, led[index]); // 关闭当前LED
GPIO_SetBits(GPIOA, led[index + 1]); // 开启下一个LED
}
}
int main(void) {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_GPIOA, ENABLE); // 启动GPIOA时钟
while (1) {
for (uint8_t i = 0; i < 8; ++i) {
LedCtrl(i);
// 持续时间可以调整,例如延时1秒(注意这需要配合定时器)
// delay_ms(1000);
}
}
return 0;
}
```