STM32按键流水灯
时间: 2023-08-20 19:14:49 浏览: 90
好的,我可以为您提供一份简单的 STM32 按键流水灯的代码。请注意,以下代码仅供参考,您需要根据您的具体硬件配置和需求进行适当修改。
```c
#include "stm32f10x.h"
#define LED_PIN GPIO_Pin_12
#define LED_PORT GPIOA
#define KEY_PIN GPIO_Pin_0
#define KEY_PORT GPIOB
void delay(uint32_t ms);
int main(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
// 初始化 LED 引脚为输出
GPIO_InitStruct.GPIO_Pin = LED_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(LED_PORT, &GPIO_InitStruct);
// 初始化 KEY 引脚为输入,并开启上拉电阻
GPIO_InitStruct.GPIO_Pin = KEY_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(KEY_PORT, &GPIO_InitStruct);
while (1)
{
// 检测按键是否按下
if(GPIO_ReadInputDataBit(KEY_PORT, KEY_PIN) == 0)
{
// 按键按下,流水灯效果
for(int i=0; i<8; i++)
{
GPIO_SetBits(LED_PORT, LED_PIN);
delay(100);
GPIO_ResetBits(LED_PORT, LED_PIN);
delay(100);
}
}
else
{
// 按键未按下,LED 灯常亮
GPIO_SetBits(LED_PORT, LED_PIN);
}
}
}
void delay(uint32_t ms)
{
// 使用 SysTick 计数器实现延时
SysTick->LOAD = SystemCoreClock / 1000 * ms;
SysTick->VAL = 0;
SysTick->CTRL = SysTick_CTRL_ENABLE_Msk;
while((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0);
SysTick->CTRL = 0;
}
```
以上代码实现的功能是:检测按键是否按下,如果按下则 LED 灯流水效果,否则 LED 灯常亮。在代码中使用了 SysTick 计数器实现延时函数。您需要根据实际情况修改引脚号、延时时间等参数。希望对您有所帮助!
阅读全文