题目:
利用STM32CubeMX和lKeil5进行STM32应用开发,完成以下的功能。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 【1】按下KEY1按键,切换LED1的开关状态。
【2】按下KEY2按键,松开后,切换LED2的开关状态。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 【3】按下KEY4按键,把点亮的LED灯全部关闭。
? ? ? ? 按键机械触点断开、闭合时,由于触点的弹性作用,按键开关不会马上稳定接通或一下子断开, 使用按键时会产生如图中的带波纹信号,不会马上稳定地接通,在断开时也不会一下子断开,因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖,
需要用软件消抖处理滤波。
#include "main.h"
#include "gpio.h"
/* USER CODE BEGIN PTD */
#define KEY1 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_0)
#define KEY2 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_1)
#define KEY4 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_3) //按键读取宏定义
void Key_Scan()
{
if(KEY1 == 0)
{
HAL_Delay(10);
if(KEY1==0){
HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_3);
while(KEY1==0);
}
}
if(KEY2==0)
{
HAL_Delay(10);
if(KEY2==0){
while(KEY2==0);//按键按下时等待,松开后动作
HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_4);
}
}
if(KEY4==0){
HAL_Delay(10);
if(KEY4==0){
HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6);//可以同时反转多个引脚
while(KEY4==0);
}
}
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
Key_Scan();//调用
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
|