单片机开发中多功能按键详细解析设计(单击、双击、长按程序) | 您所在的位置:网站首页 › 单片机中的按键 › 单片机开发中多功能按键详细解析设计(单击、双击、长按程序) |
目录 单击、双击、长按原理解析程序源码思考总结引言:在很多项目开发过程中我们通常会涉及到按键的使用,为了使按键的功能更多远化我们通常会区别按键的单击、双击、长按等操作过程从而实现更多的功能。现在让我们来分析一下他们的实现原理和过程。 一、原理解析(注意i:这里我们的硬件设计为当按键按下为低电平,如硬件设计不一致反过来即可,原理是相同的) 首先我们来看一下单击、双击、长按电平时序图
单击、和长按的区别: 单击和双击的区别: 二、程序源码 在这里插入代码片 #define TOUCH_KEY_A GPIO_Pin_1 #define TOUCH_KEYPORT GPIOA #define KEYA_SPEED1 100 //长按的时间长度(单位10mS) #define KEYA_SPEED2 10 //双击的时间长度(单位20mS) u8 A,B,C; void KEY_READ(void) { 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 //长键处理 //长按后执行的程序放到此处 GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1));//LED控制 while(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)); }else{ //单击处理 for(b=0;b 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 } } //按键判断在此结束 |
CopyRight 2018-2019 实验室设备网 版权所有 |