使用stm32CubeMx,stm32f103zet6在给定的程序下写一个带按钮流水灯程序
时间: 2023-06-25 19:02:59 浏览: 131
一个关于流水灯的程序
首先,需要在STM32CubeMX中进行以下配置:
1. 选择适当的时钟源和系统时钟频率
2. 配置GPIO为输出模式,用于控制LED灯
3. 配置GPIO为输入模式,用于控制按钮
配置完成后,生成代码,并根据需要进行修改。
下面是一个简单的带按钮流水灯程序示例:
```c
#include "main.h"
// 定义LED灯和按钮的GPIO端口和引脚号
#define LED1_GPIO_Port GPIOA
#define LED1_Pin GPIO_PIN_5
#define LED2_GPIO_Port GPIOA
#define LED2_Pin GPIO_PIN_6
#define LED3_GPIO_Port GPIOA
#define LED3_Pin GPIO_PIN_7
#define BUTTON_GPIO_Port GPIOB
#define BUTTON_Pin GPIO_PIN_0
// 定义流水灯的数量和延时时间
#define LED_COUNT 3
#define DELAY_MS 300
int main(void)
{
HAL_Init();
// 初始化GPIO
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Pin = LED1_Pin | LED2_Pin | LED3_Pin;
HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct);
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pin = BUTTON_Pin;
HAL_GPIO_Init(BUTTON_GPIO_Port, &GPIO_InitStruct);
// 初始状态为关灯
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET);
// 定义流水灯的位置和方向
int led_pos = 0;
int led_dir = 1;
while (1)
{
// 判断按钮是否按下
if (HAL_GPIO_ReadPin(BUTTON_GPIO_Port, BUTTON_Pin) == GPIO_PIN_SET)
{
// 如果按钮按下,则改变流水灯的方向
led_dir *= -1;
}
// 关闭当前位置的灯
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET);
// 计算下一个位置
led_pos += led_dir;
if (led_pos < 0)
{
led_pos = 1;
led_dir = 1;
}
else if (led_pos >= LED_COUNT)
{
led_pos = LED_COUNT - 2;
led_dir = -1;
}
// 打开下一个位置的灯
switch (led_pos)
{
case 0:
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
break;
case 1:
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);
break;
case 2:
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET);
break;
}
// 延时一段时间
HAL_Delay(DELAY_MS);
}
}
```
该程序中,通过轮流打开三个LED灯来实现流水灯效果。同时,检测按钮是否按下,并根据按下的次数和方向改变流水灯的运动方向。
阅读全文