单片机按键控制led灯闪烁
时间: 2023-07-02 20:08:33 浏览: 413
好的,这里提供一个简单的单片机按键控制 LED 灯闪烁的程序示例,假设单片机为 STM32F103C8T6,LED 灯连接在 PB12 引脚上,按键连接在 PA0 引脚上。
首先,需要在 CubeMX 中配置引脚和时钟:
1. 将 PB12 引脚配置为输出模式;
2. 将 PA0 引脚配置为输入模式,开启上拉电阻;
3. 配置系统时钟为 72MHz。
然后,在 Keil 或其他编译器中编写如下程序:
```c
#include "stm32f1xx_hal.h"
int main(void)
{
// 初始化 HAL 库
HAL_Init();
// 初始化时钟和引脚
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 定义变量
int led_state = 0;
int button_state = 0;
int button_pressed = 0;
// 主循环
while (1)
{
// 读取按键状态
button_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
// 判断按键是否按下
if (button_state == GPIO_PIN_RESET && !button_pressed)
{
// 翻转 LED 灯状态
led_state = !led_state;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, led_state);
// 标记按键已经被按下
button_pressed = 1;
}
else if (button_state == GPIO_PIN_SET)
{
// 标记按键已经被释放
button_pressed = 0;
}
// 延时一段时间
HAL_Delay(50);
}
}
```
该程序的逻辑比较简单:在主循环中不断读取按键状态,如果按键被按下,则翻转 LED 灯的状态。需要注意的是,在判断按键状态时需要加上一个按钮已经被按下的标记,以避免按键抖动导致多次触发。
希望对你有所帮助!
阅读全文