stm32f407按键控制流水灯:KEY0按一下,开启流水灯,再按一下,LED灯熄灭的C语言程序
时间: 2024-04-29 15:22:35 浏览: 106
以下是代码实现:
```C
#include "stm32f4xx.h"
void Delay(uint32_t nCount);
int main(void)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能GPIOA时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //输出速度
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; //定义要控制的引脚
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //输入模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //定义要控制的引脚
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉模式
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA
GPIO_SetBits(GPIOA, GPIO_Pin_1); //初始只亮第一个灯
int i = 0;
int flag = 0;
while (1)
{
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0) //如果检测到KEY0被按下
{
Delay(50000); //延时,去抖
flag = 1 - flag; //取反标志位,方便下次判断
if (flag)
{
for (i = 1; i <= 7; i++) //控制流水灯
{
GPIO_SetBits(GPIOA, 1 << i); //亮当前灯
Delay(50000); //延时
GPIO_ResetBits(GPIOA, 1 << i); //灭当前灯
}
}
else
{
GPIO_ResetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
//关闭所有灯
}
while (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0); //等待按键释放
}
}
}
void Delay(uint32_t nCount)
{
for (; nCount != 0; nCount--);
}
```
以上程序实现了按下KEY0开启流水灯,再按一下关闭灯光的功能。请注意,这里没有处理按键去抖,请自行添加。
阅读全文