首页 > 其他分享 >STM32 按键检测

STM32 按键检测

时间:2022-12-03 23:22:44浏览次数:35  
标签:u8 检测 KEY0 up STM32 按下 key 按键

c语言关键词 :static

  • stantic申请的局部变量(函数中),储存在静态储存区;
  • 它在函数调用后,不会被释放 。它的值会被保留。
  • 所以stantic申请的局部变量,具有记忆。

 硬件

 KEY0  是低电平有效的,所以,需要在 STM32F1 内部设置上拉(默认高电平)。

 软件

#define     u8    unsigned char
#define     KEY0  HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4) //KEY0 按键 PE4
/***************************************************************
  *  @brief     连续按键检测
  *  @param     输入参数:无
                返 回 值:0或1               
  *  @note      按键按下返回1,松手返回0.
  *  @Sample usage: 按键按下没有松开,一直返回1,算多次     
 **************************************************************/
u8 KEY_Scan1(void)
{            
    if(KEY0==0)
    {
        HAL_Delay(10);
        if(KEY0==0)
        {
            return 1;
        }
        return 0;
    }
    return 0;
}
/***************************************************************
  *  @brief     不连续按键检测
  *  @param     输入参数:无
                返 回 值:0或1               
  *  @note      按键按下时刻返回1,之后返回0
  *  @Sample usage:  按键按下,没有松开,返回一次1,之后一直返回0,只能算一次,    
 **************************************************************/
u8 KEY_Scan2(void)
{
  static u8 key_up=1;
    if(key_up &&  KEY0==0)
    {
        HAL_Delay(10);//延时,防抖
        key_up=0;//标记这次key已经按下
        if(KEY0==0)
        {
         return 1;
        }
    }else if(KEY0!=0)  key_up=1;
    return 0;
}

 按键扫描(2种模式2合一)

u8 KEY_Scan(u8 mode)
{
 static u8 key_up=1; //按键松开标志
 if(mode==1)key_up=1; //支持连按
 if(key_up && KEY0==0)
 {
   HAL_Delay(10);
   key_up=0;
   if(KEY0==0) return 1;
     
 }else if(KEY0==1)key_up=1;
 return 0; //无按键按下
}
KEY_Scan 函数,则是用来扫描这  IO 口是否有按键按下。
KEY_Scan 函数,支持两种 扫描方式,通过 mode 参数来设置。
当 mode 为 0 的时候,KEY_Scan 函数将不支持连续按,扫描某个按键,该按键按下之后必 须要松开,才能第二次触发,否则不会再响应这个按键,这样的好处就是可以防止按一次多次 触发,而坏处就是在需要长按的时候比较不合适。
当 mode 为 1 的时候,KEY_Scan 函数将支持连续按,如果某个按键一直按下,则会一直返回这个按键的键值,这样可以方便的实现长按检测。

标签:u8,检测,KEY0,up,STM32,按下,key,按键
From: https://www.cnblogs.com/CC-C/p/16949004.html

相关文章

  • App隐私合规检测-Camille
    一、检测原理通过hook底层获取个人信息的函数实现监控二、方案实践选择方案:frida+hook+python+js:https://github.com/zhengjim/camille1、安装frida需要在PC端安装f......
  • Halcon探索学习 | 3 区域操作--回形针检测
        read_image(Image,'clip')*1.图像二值化被选中的是1没选中的是0threshold(Image,Regions,10,84)*2.连通分割connection(Regions,Connecte......
  • STM32 can通信的坑
    STM32can通信的坑(1)单独使用CAN2时一定要同时打开CAN1和CAN2的时钟,否则CAN2无法正常工作,因为CAN2是从CAN,CAN1是主CAN(2)CAN1:0->13组,CAN2:14->28组。CAN1的过滤器是0~13,C......
  • 学习心得 | 温度检测工程模块划分总结与案例分析
    很多朋友在学习FPGA的时候会发现模块划分很令人头大,今天我就通过明德扬温度检测工程来与大家分享一下本人的划分思路。明德扬温度检测工程是基于FPGA的一个实用项目,可以在明......
  • 基于yolo进行目标检测的实验和研究【BLOG】
          根据我接触到的项目经验来看,需要我们进行检测的不是自然场景下的任意物体,而是特定场景下一类物体。典型的就是钢管识别,这些照片一般都是在厂区里面拍的、......
  • 学习心得 | 温度检测工程模块划分总结与案例分析
    很多朋友在学习FPGA的时候会发现模块划分很令人头大,今天我就通过明德扬温度检测工程来与大家分享一下本人的划分思路。明德扬温度检测工程是基于FPGA的一个实用项目,可以在明......
  • STM32f103 蜂鸣器发声
    一、蜂鸣器简介蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中......
  • 智能洗手液机的缺液检测
    随之智能技术的飞速发展,普通的洗手液机也被智能化。智能洗手液机检测液位是通过水位传感器来实现的。水位传感器利用的光学原理来检测的,内部是由发射器和接收管组成。根据红......
  • Python 图片主题检测并剪切
    importcv2importnumpyasnp#主题检测,剪切defimageCut(srcImage,desImage):try:#1、加载图片,转成灰度图#image=cv2.imread("D:/work/......
  • 目标检测模型的评价标准-AP与mAP
    目录目录目录前言一,精确率、召回率与F11.1,准确率1.2,精确率、召回率1.3,F1分数1.4,PR曲线1.4.1,如何理解P-R曲线1.5,ROC曲线与AUC面积二,AP与mAP2.1,AP与mAP指标理解......