编写键盘处理函数,具体要求如下: (1)定义4个按键,分别为RUN、SET、+、-;定义2个LED指示灯,分别为“RUN”指示灯和“SET”指示等。 (2)按“RUN”键,相对应的“RUN”指示LED点亮;按“SET”键相对应的“SET”指示LED点亮,“RUN”指示LED灭掉,此时+、-按键可以操作,实现数码管的加1和减1的操作。 用hal库编写stm32
时间: 2023-06-23 10:08:06 浏览: 90
下面是使用HAL库编写的键盘处理函数,实现了题目所要求的功能:
```c
#include "main.h"
#define RUN_Pin GPIO_PIN_0
#define RUN_GPIO_Port GPIOA
#define SET_Pin GPIO_PIN_1
#define SET_GPIO_Port GPIOA
#define ADD_Pin GPIO_PIN_2
#define ADD_GPIO_Port GPIOA
#define SUB_Pin GPIO_PIN_3
#define SUB_GPIO_Port GPIOA
#define RUN_LED_Pin GPIO_PIN_4
#define RUN_LED_GPIO_Port GPIOA
#define SET_LED_Pin GPIO_PIN_5
#define SET_LED_GPIO_Port GPIOA
int count = 0; // 数码管显示的数值
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == RUN_Pin)
{
HAL_GPIO_WritePin(RUN_LED_GPIO_Port, RUN_LED_Pin, GPIO_PIN_SET); // 点亮RUN指示灯
HAL_GPIO_WritePin(SET_LED_GPIO_Port, SET_LED_Pin, GPIO_PIN_RESET); // 熄灭SET指示灯
}
else if (GPIO_Pin == SET_Pin)
{
HAL_GPIO_WritePin(SET_LED_GPIO_Port, SET_LED_Pin, GPIO_PIN_SET); // 点亮SET指示灯
HAL_GPIO_WritePin(RUN_LED_GPIO_Port, RUN_LED_Pin, GPIO_PIN_RESET); // 熄灭RUN指示灯
count = 0; // 数码管显示的数值清零
}
else if (GPIO_Pin == ADD_Pin)
{
if (HAL_GPIO_ReadPin(SET_LED_GPIO_Port, SET_LED_Pin) == GPIO_PIN_SET) // SET指示灯点亮时才能进行加1操作
{
count++;
if (count > 9)
{
count = 0;
}
}
}
else if (GPIO_Pin == SUB_Pin)
{
if (HAL_GPIO_ReadPin(SET_LED_GPIO_Port, SET_LED_Pin) == GPIO_PIN_SET) // SET指示灯点亮时才能进行减1操作
{
count--;
if (count < 0)
{
count = 9;
}
}
}
}
```
其中,`HAL_GPIO_EXTI_Callback()` 函数是HAL库提供的外部中断回调函数,用于处理GPIO外部中断事件。当四个按键中的一个被按下时,就会触发相应的GPIO外部中断,从而调用这个函数。
在这个函数中,首先判断按下的是哪个按键,然后根据题目要求执行相应的操作,包括点亮或熄灭LED指示灯、进行加1或减1操作等。
需要注意的是,因为加1和减1操作只能在SET指示灯点亮时才能进行,因此在进行这两个操作之前,需要先判断SET指示灯是否点亮,如果没有点亮则不执行这两个操作。另外,加1和减1操作需要对数码管显示的数值进行修改,因此需要定义一个全局变量 `count` 用于保存数码管显示的数值。