基于stm32的流水灯程序
时间: 2023-09-13 22:02:53 浏览: 42
以下是一个基于STM32的流水灯程序的示例代码:
```c
#include "stm32f10x.h"
int main(void)
{
// 使能GPIOC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
// 配置PC0-PC7为输出模式
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
while (1)
{
// PC0亮,PC1-PC7灭
GPIO_ResetBits(GPIOC, GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
GPIO_SetBits(GPIOC, GPIO_Pin_0);
delay(100);
// PC0、PC1亮,PC2-PC7灭
GPIO_ResetBits(GPIOC, GPIO_Pin_2 | GPIO_Pin_3 |
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1);
delay(100);
// PC0-PC2亮,PC3-PC7灭
GPIO_ResetBits(GPIOC, GPIO_Pin_3 |
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2);
delay(100);
// PC0-PC3亮,PC4-PC7灭
GPIO_ResetBits(GPIOC, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
delay(100);
// PC0-PC4亮,PC5-PC7灭
GPIO_ResetBits(GPIOC, GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4);
delay(100);
// PC0-PC5亮,PC6-PC7灭
GPIO_ResetBits(GPIOC, GPIO_Pin_6 | GPIO_Pin_7);
GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);
delay(100);
// PC0-PC6亮,PC7灭
GPIO_ResetBits(GPIOC, GPIO_Pin_7);
GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6);
delay(100);
// PC7亮,PC0-PC6灭
GPIO_ResetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6);
GPIO_SetBits(GPIOC, GPIO_Pin_7);
delay(100);
}
}
void delay(uint32_t time)
{
while(time--);
}
```
这个程序会让PC0-PC7依次点亮,形成一个流水灯效果。需要注意的是,需要在主函数中调用`delay`函数来控制每个灯亮的时间,否则灯会闪烁得非常快。而`delay`函数的具体实现可以根据具体的系统时钟频率来自行调整。
阅读全文