【学习记录】STM32学习记录(三)按键控制LED灯

按键扫描的基本原理:

按键信号的识别:

一般来说,按键的两个引脚的一端通过电阻上拉到高电平,另一端则接地。

在没有按键按下的时候,输入引脚为高电平,当有按键按下,输入引脚则为低电平。

通过反复读取按键输入引脚的信号,然后识别高低电平来判断是否有按键触发。

去抖动:

原因:按键的输入引脚有低电平产生不代表一定是有按键按下,也许是干扰信号,因此,需要通过去抖动处理,将这些干扰信号过滤,从而获得真实的按键触发信号。

方法:首次检测到按键输入引脚有低电平后,稍作延时,再次读取该引脚,如还是低电平,则确认为按键触发信号;否则,判断为干扰信号,不予处理。

HAL库中关于GPIO的3个重要函数

电平输出函数

void HAL_GPIO_WritePin(GPIOx,GPIO_Pin,PinState);

电平翻转函数

void HAL_GPIO_TogglePin(GPIOx,GPIO_Pin);

电平输入函数

GPIO_PinState HAL_GPIO_ReadPin(GPIOx,GPIO_Pin);

实训:按键控制LED灯开关

利用STM32CubeMX和Keil5进行STM32应用开发,完成以下的功能。

【1】按下KEY1按键,切换LED1的开关状态。

【2】按下KEY2按键,松开后,切换LED2的开关状态。

【3】按下KEY3按键,把点亮的LED灯全部关闭。

【学习记录】STM32学习记录(三)按键控制LED灯_第1张图片【学习记录】STM32学习记录(三)按键控制LED灯_第2张图片

1.

【学习记录】STM32学习记录(三)按键控制LED灯_第3张图片

双击进入

2.

【学习记录】STM32学习记录(三)按键控制LED灯_第4张图片

3.

【学习记录】STM32学习记录(三)按键控制LED灯_第5张图片

4.配置LED灯引脚(PB5、PE5)

【学习记录】STM32学习记录(三)按键控制LED灯_第6张图片

5. 配置KEY键引脚(PE2、PE3、PE4)

【学习记录】STM32学习记录(三)按键控制LED灯_第7张图片

配置为上拉

【学习记录】STM32学习记录(三)按键控制LED灯_第8张图片

6.配置时钟树

【学习记录】STM32学习记录(三)按键控制LED灯_第9张图片

7.改名、保存、打开

【学习记录】STM32学习记录(三)按键控制LED灯_第10张图片

【学习记录】STM32学习记录(三)按键控制LED灯_第11张图片

【学习记录】STM32学习记录(三)按键控制LED灯_第12张图片

/* USER CODE BEGIN 0 */
#define KEY2 HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)
#define KEY3 HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)
#define KEY4 HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)

void Delay( unsigned int t)
{
       while(t--);
}
void Scan_Keys()
{
       if (KEY2==0)
       { 
              Delay(1000);
              if(KEY2==0)
              {                  
                     HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);
                     while(KEY2==0);
              }
       }
  if (KEY3==0)
       { 
              Delay(1000);
              if(KEY3==0)
              {               
                     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
                     while(KEY3==0);
              }
       }
         if (KEY4==0)
       { 
              Delay(1000);
              if(KEY4==0)
              {
                     HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);
                     HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET);
                     while(KEY4==0);                    
              }
       }
}
/* USER CODE BEGIN 0 */

你可能感兴趣的:(单片机,嵌入式硬件)