stm32的GPIO按键弹起、按下的事件

简介: stm32的GPIO按键弹起、按下的事件

背景

实现了一个基于gpio的按键,但是发现有时候会因为按动的时间过长,导致会触发两次按键的事件。因此考虑将原来的电平触发模式改为边沿触发模式,即将原来的按键被按下执行动作,改为按键的状态改变的时候再执行动作。其实是通过一个标志位记录了之前的按键状态,用于下次的状态判断。


源码


if(//按键按下事件
void keyPress(void)
{ //低电平标示按键按下
KEY1== 0)
     {
               //按键去抖
               delay_ms(10);
               if(KEY1== 0)
               {
                        //如果原来按键松开,则执行按键按下操作
                        if(1== focusFarButtonValue)
                        {
                                 //按键按下
                                 focusFarButtonValue= 0;
                                 //如果KEY4按下时,不执行聚焦操作了
                                 if(1== KEY4_press_flag)
                                 {
                                             //如果按下KEY4,又按下其他按键,模拟按键松开,也不再执行KEY4松开的其他操作了
                                                    KEY4_Event_exec_flag= 2;
                                                    return;
                                 }
                                 //执行按键按下操作,聚焦远
                                 SetCameraValue(9,4,1);
                        }
               }
     }
     //低电平标示按键按下
     if(KEY2== 0)
     {
               //按键去抖
               delay_ms(10);
               if(KEY2== 0)
               {
                        //如果原来按键松开,则执行按键按下操作
                        if(1== focusNearButtonValue)
                        {
                                 //按键按下
                                 focusNearButtonValue= 0;
                                 //如果KEY4按下时,不执行聚焦操作了
                                 if(1== KEY4_press_flag)
                                 {
                                             //如果按下KEY4,又按下其他按键,模拟按键松开,也不再执行KEY4松开的其他操作了
                                                    KEY4_Event_exec_flag= 2;
                                                    return;
                                 }
                                 //执行按键按下操作,聚焦近
                                 SetCameraValue(9,4,0);
                        }
               }
     }
}


//按键松开事件


void keyRelease(void)
{ //高电平标示按键松开
if(KEY1== 1)
     {
               //按键去抖
               delay_ms(10);
               if(KEY1== 1)
               {
                        //如果原来按键按下,则执行按键松开操作
                        if(0== focusFarButtonValue)
                        {
                                 //按键松开
                                 focusFarButtonValue= 1;
                                 //执行按键松开操作,聚焦停止
                                 sendBPcmd2(4);//调焦停止
                        }
               }
     }
     //高电平标示按键松开
     if(KEY2== 1)
     {
               //按键去抖
               delay_ms(10);
               if(KEY1== 1)
               {
                        //如果原来按键按下,则执行按键松开操作
                        if(0== focusNearButtonValue)
                        {
                                 //按键松开
                                 focusNearButtonValue= 1;
                                 //执行按键松开操作,聚焦停止
                                 sendBPcmd2(4);//调焦停止
                        }
               }
     }
}


相关文章
|
3月前
|
芯片
STM32F103标准外设库——中断应用/事件控制器(七)
STM32F103标准外设库——中断应用/事件控制器(七)
225 0
STM32F103标准外设库——中断应用/事件控制器(七)
|
3月前
|
存储
STM32F103标准外设库——GPIO 输入、输出 (五)
STM32F103标准外设库——GPIO 输入、输出 (五)
177 0
STM32F103标准外设库——GPIO 输入、输出 (五)
|
10月前
|
芯片
最详细STM32,cubeMX 按键点亮 led
最详细STM32,cubeMX 按键点亮 led
154 0
|
1月前
STM32CubeMX 按键控制LED
STM32CubeMX 按键控制LED
21 0
|
1月前
stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
|
1月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
|
2月前
经验大分享:STM32F4寄存器初始化系列:GPIO
经验大分享:STM32F4寄存器初始化系列:GPIO
15 0
|
10月前
|
芯片
STM32速成笔记(二)—GPIO
本文介绍了STM32的GPIO的配置和使用方法,并且给出了应用实例。此外,针对使用时可能遇到的一些问题给出了解决办法。
302 0
STM32速成笔记(二)—GPIO
|
10月前
STM32速成笔记(三)—按键检测
本文介绍了如何利用STM32进行按键检测,先介绍了原理,后面给出了配置步骤和应用例程。此外,本文还叙述了如何利用一个按键单独控制一个LED亮灭,以及如何检测按键长短按。
380 0
STM32速成笔记(三)—按键检测
|
3月前
|
芯片
STM32 GPIO工作原理详解
STM32 GPIO工作原理详解