STM32F103VET6的单片机8个LED灯实现流水灯效果,LED1-LED2-------LED8----LED1循环,间隔200ms,switch语句方式实现。
时间: 2024-10-12 19:02:46 浏览: 43
STM32F103VET6单片机UCOS实验例程源代码-RTC-ucgui-MINI(无ucos).rar
STM32F103VET6是一款基于ARM Cortex-M3内核的微控制器,可以用来控制GPIO端口驱动LED灯。要实现8个LED灯的流水灯效果,你可以按照以下步骤操作:
1. **配置硬件**:
- 首先,你需要连接LED灯到STM32的GPIO输出引脚上,通常是P0、P1等端口。确保每个LED对应一个独立的GPIO管脚。
2. **初始化GPIO**:
- 使用STM32提供的GPIO初始化函数,设置LED所在的GPIO为推挽输出模式,并设置它们为低电平无效(ODR=0),以便于驱动LED。
```c
void LED_Init(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB, ENABLE); // 如果LED分布在GPIOA和GPIOB
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | ... | GPIO_Pin_7; // 所有LED对应的位
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // Push-Pull Output
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 速度选择,这里假设50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); // 对应于GPIOA
GPIO_Init(GPIOB, &GPIO_InitStructure); // 或者GPIOB
GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | ... | GPIO_Pin_7); // 设置所有LED为高阻态
}
```
3. **定时器设置**:
- 使用系统自带的定时器(如TIM1或TIM2)来生成200ms的延时。你需要将定时器配置为PWM模式,以便精确控制占空比来改变LED亮度。
4. **流水灯循环**:
- 使用`while`循环和`switch`语句,在每轮循环中切换LED的状态。首先点亮第一个LED(LED1),然后依次向后移动,直到最后一个LED点亮后回到第一个。
```c
void Blink流水灯(int ledIndex) {
GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 点亮LED1
if (ledIndex < 8) { // 如果不在最后一个LED
switch (ledIndex) {
case 0:
break; // LED1已经点亮
default:
GPIO_ResetBits(GPIOA, GPIO_Pin_0);
GPIO_SetBits(GPIOA, GPIO_Pin_{ledIndex}); // 切换到下一个LED
break;
}
Delay_ms(200); // 延迟200ms
} else {
GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 如果到了最后一个LED,再回到第一个
ledIndex = 0;
}
}
int main(void) {
LED_Init();
TIM_TimeBaseInitTypeDef.TIM_Prescaler = ...; // 根据定时器频率设置预分频值
TIM_TimeBaseInitTypeDef.TIM_ClockDivision = 0;
TIM_TimeBaseInitTypeDef.TIM_CounterMode = TIM_CounterMode_Up;
while (1) {
Blink(0); // 开始从LED1开始
}
return 0;
}
```
5. **补充部分**:
- `Delay_ms()` 函数需要你自己实现或者使用库函数,这是一个大约200毫秒延迟的示例:
```c
void Delay_ms(uint16_t ms) {
uint32_t start = HAL_GetTick();
while ((HAL_GetTick() - start) < ms * 1000 / sysclk_rh);
}
```
- 这里假设sysclk_rh是系统时钟频率的整数倍,实际使用时需要根据你的系统配置进行调整。
阅读全文