STM32平衡小车让按键按下,LED灯1s间隔循环闪烁5次熄灭
时间: 2023-09-30 10:05:25 浏览: 113
以下是基于STM32的平衡小车控制程序,实现了按下按键后LED灯的1秒间隔循环闪烁5次,并且最后熄灭。
```c
#include "stm32f10x.h"
#define LED_PIN GPIO_Pin_8
#define LED_PORT GPIOA
#define KEY_PIN GPIO_Pin_0
#define KEY_PORT GPIOB
#define DELAY_TIME 1000000
void delay(uint32_t time)
{
while(time--);
}
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = LED_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = KEY_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(KEY_PORT, &GPIO_InitStructure);
}
int main(void)
{
uint8_t cnt = 0;
uint8_t flag = 0;
GPIO_Config();
while(1)
{
if(GPIO_ReadInputDataBit(KEY_PORT, KEY_PIN) == RESET)
{
flag = 1;
}
if(flag == 1)
{
GPIO_SetBits(LED_PORT, LED_PIN);
delay(DELAY_TIME);
GPIO_ResetBits(LED_PORT, LED_PIN);
delay(DELAY_TIME);
cnt++;
if(cnt >= 10)
{
cnt = 0;
flag = 0;
}
}
}
}
```
在程序中,首先定义了LED和按键的引脚号和端口号,以及闪烁间隔的时间常量。然后在GPIO配置函数中进行了引脚的初始化,将LED引脚设置为输出模式,按键引脚设置为上拉输入模式。
在主函数中,通过读取按键引脚的状态,判断是否按下按键,如果按下了,就设置标志位flag为1,开始LED灯的循环闪烁。循环闪烁的过程中,每隔DELAY_TIME的时间,LED灯会交替亮灭一次,同时cnt计数器加1,当cnt计数到10时,代表LED灯已经闪烁了5次,就要将标志位flag重新设置为0,LED灯熄灭。
注意,该程序中使用了delay函数进行延时,需要根据实际情况调整DELAY_TIME的值以达到所需的效果。另外,LED和按键的引脚号和端口号需要根据实际硬件连接情况进行调整。
阅读全文