给我设计一个stm32单片机程序,要求用两个按键k1、k2分别控制两个led灯l1、l2,按下k1 后l1亮3秒后熄灭不断循环,按下k2后l2亮3秒后熄灭不断循环,l1、l2接GPIOA的第1和第2接口,k1、k2接GPIOB第0和第11接口,减少函数的使用,让代码简单易懂
时间: 2024-10-18 21:11:30 浏览: 45
好的,下面是一个简单的STM32F103单片机程序设计,使用Keil MDK集成开发环境编写,假设我们使用的是HAL库。首先,需要包含必要的头文件并初始化GPIO和延时定时器。
```c
#include "stm32f1xx_hal.h"
#include <stdio.h>
// 定义GPIO口和LED的状态
GPIO_InitTypeDef GPIO_InitStructure;
uint8_t LEDStatus = 0;
// 非阻塞延时函数,这里仅用于简化演示
void Delay(unsigned int time)
{
while (time--)
{
HAL_Delay(1);
}
}
int main(void)
{
// 初始化系统
HAL_Init();
// GPIOA配置
GPIO_InitStructure.Pin = GPIO_PIN_1 | GPIO_PIN_2; // L1和L2
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_InitStructure.Pull = GPIO_NOPULL; //无上拉下拉
HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
// GPIOB配置
GPIO_InitStructure.Pin = GPIO_PIN_B0 | GPIO_PIN_B11; // K1和K2
GPIO_InitStructure.Mode = GPIO_MODE_INPUT_PULLUP; //上拉输入
HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
// 进入无限循环
while (1)
{
if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_B0) == GPIO_PIN_SET) // 检测K1是否按下
{
LEDStatus ^= 1; // 切换LED状态
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, LEDStatus); // 控制L1
Delay(3000); // 等待3秒
}
if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_B11) == GPIO_PIN_SET) // 检测K2是否按下
{
LEDStatus ^= 2; // 切换第二个LED状态
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, LEDStatus >> 1); // 控制L2
Delay(3000); // 等待3秒
}
}
return 0;
}
```
阅读全文