蓝桥杯嵌入式学习日记(三)——按键的长按、短按与双击(三行按键法)【STM32】【HAL库】

慈云数据 2024-04-23 技术支持 71 0

目录

  • 一、查阅相关资料
  • 二、程序的编写
    • 1、创建工程
    • 2、三行按键法
    • 3、短按与长按
    • 4、双击

      一、查阅相关资料

        想要进行一块板子的开发,需要先查阅资料了解器件连接。

      在这里插入图片描述

        从CT117E-M4产品手册中不难发现,按键分别有PB0、PB1、PB2、PA0分别对应B1、B2、B3、B4四个按键。

      按键抖动

      在这里插入图片描述

      在这里插入图片描述

        我们所使用这类按键时,当按键按下,内部的机械触点因为弹性,并不会立马导通,同样松开时也不是立马分离,而是会产生一连串的抖动,这段时间大概在5~10ms,为了防止紊乱我们要进行消抖。这里我选择利用uwTick进行软件延时,实际情况中也可以使用定时器,但不建议使用HAL_Delay函数进行延时。

      	if( uwTick - KeyTick  
      

      了解了这些,我们可以进行STM32cubemx工程创建。依旧是上一篇的工程进行延展。

      二、程序的编写

      1、创建工程

      在这里插入图片描述

      如图设置完以后便可以生成工程进行编写,不会利用STM32cubemx生成工程的可以参考上一篇利用STM32cubemx创建工程并以STM32G4点灯【HAL库】。

      依旧是照例创建key.c和key.h方便管理

      2、三行按键法

      #define B1 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) 
      #define B2 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1) 
      #define B3 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2) 
      #define B4 HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) 
      #define Key_Flag  B1 | (B2
      	u8 ReadDate = Key_Flag ^ 0xff ;
      	Trg = ReadDate & (ReadDate ^ Cont) ;
      	Cont = ReadDate ;
      }
      
      	if( uwTick - KeyTick 
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon