STM32开发板按键单击双击以及长按的控制策略
Posted Ehang_Maker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32开发板按键单击双击以及长按的控制策略相关的知识,希望对你有一定的参考价值。
一、当按键按下的时刻,将向开发板输送低电平,可以得到以下控制图:
二、主函数控制逻辑如下:
#define KEYA_SPEED1 100 //长按的时间长度(单位10mS)
#define KEYA_SPEED2 10 //双击的时间长度(单位20mS)
int main (void){//主程序
u8 a=0,b,c=0;
RCC_Configuration(); //系统时钟初始化
LED_Init();//LED初始化
TOUCH_KEY_Init();//按键初始化
while(1){
if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){ //检测按键是否按下
delay_ms(20); //延时去抖动
if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){//判断长短键
while((!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A))&&c<KEYA_SPEED1){ //循环判断长按,到时跳转
c++;delay_ms(10); //长按判断的计时
}
if(c>=KEYA_SPEED1){ //长键处理
//长按后执行的程序放到此处
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1));//LED控制
while(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A));
}else{ //单击处理
for(b=0;b<KEYA_SPEED2;b++){//检测双击
delay_ms(20);
if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){
a=1;
//双击后执行的程序放到此处
GPIO_WriteBit(LEDPORT,LED2,(BitAction)(1));//LED控制
while(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A));
}
}
if(a==0){ //判断单击
//单击后执行的程序放到此处
GPIO_WriteBit(LEDPORT,LED1|LED2,(BitAction)(0));//LED控制
}
}
a=0;c=0; //参数清0
}
} //按键判断在此结束
}
}
三、使用硬件
1.微动开关
2.触摸开关
以上是关于STM32开发板按键单击双击以及长按的控制策略的主要内容,如果未能解决你的问题,请参考以下文章
STM32电容触摸按键控制模块详解(代码流程图每行均有注释)