改为两个按键一个按键控制一个led
时间: 2024-09-22 08:05:16 浏览: 36
CC2530 按键控制LED开关-综合文档
为了将代码改为控制两个按键分别对应一个LED,我们需要对`key.c`做些调整,并在`main()`函数中处理按键输入。假设我们有两个按键K1和K2,以及对应的LED1和LED2。以下是修改后的部分代码:
```c
#include "stdio.h"
#include "gpio.h"
// 定义按键和LED
#define KEY1_PORT GPIOA
#define KEY1_PIN GPIO_Pin_0
#define LED1_GPIO_Port GPIOB
#define LED1_Pin GPIO_Pin_1
#define KEY2_PORT GPIOA
#define KEY2_PIN GPIO_Pin_2
#define LED2_GPIO_Port GPIOB
#define LED2_Pin GPIO_Pin_2
// 键盘按下状态变量
volatile uint8_t key1_state = 1; // K1初始状态设为未按下
volatile uint8_t key2_state = 1; // K2初始状态设为未按下
void key1_init(void) {
GPIO_InitTypeDef gpio_init;
gpio_init.Pin = KEY1_PIN;
gpio_init.Mode = GPIO_MODE_IT_RISING;
gpio_init.Pull = GPIO_NOPULL;
HAL_GPIO_Init(KEY1_PORT, &gpio_init);
__HAL_NVIC_ENABLE(INTR服务能力_GPIOA(KEY1_PIN));
}
void key2_init(void) {
GPIO_InitTypeDef gpio_init;
gpio_init.Pin = KEY2_PIN;
gpio_init.Mode = GPIO_MODE_IT_RISING;
gpio_init.Pull = GPIO_NOPULL;
HAL_GPIO_Init(KEY2_PORT, &gpio_init);
__HAL_NVIC_ENABLE(INTR服务能力_GPIOA(KEY2_PIN));
}
// 需要添加一个新的函数来检查并更新第二个按键的状态
void key2_poll() {
if (HAL_GPIO_ReadPin(KEY2_PORT, KEY2_PIN) == GPIO_PIN_RESET) {
key2_state = !key2_state;
}
}
void led_on_key(uint8_t key_index, int state) {
switch (key_index) {
case 1:
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, state ? GPIO_PIN_RESET : GPIO_PIN_SET);
break;
case 2:
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, state ? GPIO_PIN_RESET : GPIO_PIN_SET);
break;
}
}
int main(void) {
key1_init();
key2_init();
while (1) {
key1_poll(); // 检查K1按键状态
led_on_key(1, key1_state); // 控制LED1
key2_poll(); // 检查K2按键状态
led_on_key(2, key2_state); // 控制LED2
HAL_Delay(100); // 程序延时100毫秒等待下一个按键事件
}
return 0;
}
阅读全文