历史上的今天
返回首页

历史上的今天

今天是:2025年06月19日(星期四)

正在发生

2020年06月19日 | 单片机开发中多功能按键详细解析设计

2020-06-19 来源:eefocus

引言:在很多项目开发过程中我们通常会涉及到按键的使用,为了使按键的功能更多远化我们通常会区别按键的单击、双击、长按等操作过程从而实现更多的功能。现在让我们来分析一下他们的实现原理和过程。


一、原理解析(注意i:这里我们的硬件设计为当按键按下为低电平,如硬件设计不一致反过来即可,原理是相同的)


首先我们来看一下单击、双击、长按电平时序图

在这里插入图片描述

从三种时序图我们可以看出三种操作方式的区别就在于当按键按下后低电平和高电平的时间,通过判断高低电平的变化时间就可以把这三种方式区别开。


单击、和长按的区别:

在这里插入图片描述

单击和双击时序图非常的相似,最大的区别就是按键按下后低电平的持续时间,这里我们对比单击和长按的时序图,可知长按的低电平时间要比单击的要长很多所以这里我们假设单击时低电平的时间为S1,长按时低电平的时间为S2,我们只要在单击和双击之间加一个判断时间这里我们加入S3作为判断,当按键按下时低电平的时间超过了S3则判断为长按,若低电平时间小于S3则判断为单击。我们可以根据自己的需要设定S3的时间来规定什么是长按,什么是单击。


单击和双击的区别:

在这里插入图片描述

通过时序图我们可以看到双击相当于两次单击,双击时第一次按键放开到第二次按键按下有一个时间间隔这里我们用D1表示,而双击和单击的区别在于在D1时间过后单击的电平一直处于高电平状态,而双击则会再次出现一段低电平,这里我们可以加一个定时器在第一次按键放开后开始计时,计时的最大值为D2,这里我们只要判断在D2时间内是否出现了低电平。如果出现了低电平则双击,如果没有出现低电平则为单击。如果出现低电平的时间超过了D2则为两次单击而不是双击。这里我们可以更改D2的时间来改变双击的速度。


二、程序源码


在这里插入代码片

#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 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 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

}

} //按键判断在此结束

推荐阅读

史海拾趣

DEMMELPRODUCTS公司的发展小趣事

DEMMELPRODUCTS公司深知人才是企业发展的根本。因此,公司始终注重人才培养和团队建设。通过制定科学的培训计划和激励机制,公司吸引了一批优秀的研发、生产和销售人才。同时,公司还鼓励员工之间进行知识和经验的分享与交流,形成了积极向上的团队氛围。这些优秀的人才和团队为公司的发展提供了有力的支持。

Danube Enterprise Co Ltd公司的发展小趣事

Danube Enterprise Co Ltd成立于XX世纪初,最初是一家小型电子产品代工厂。公司的创始人张三是一位热衷于电子技术的工程师,他带领几个志同道合的伙伴,凭借对技术的热情和对市场的敏锐洞察,开始研发具有创新功能的电子产品。他们推出了首款自主研发的智能手机配件——一款具有长续航能力的智能移动电源,凭借其独特的设计和出色的性能,迅速在市场上获得了一席之地。这一成功让Danube意识到技术创新的重要性,也奠定了公司未来发展的基石。

Amphenol Piher公司的发展小趣事

Danube Enterprise Co Ltd成立于XX世纪初,最初是一家小型电子产品代工厂。公司的创始人张三是一位热衷于电子技术的工程师,他带领几个志同道合的伙伴,凭借对技术的热情和对市场的敏锐洞察,开始研发具有创新功能的电子产品。他们推出了首款自主研发的智能手机配件——一款具有长续航能力的智能移动电源,凭借其独特的设计和出色的性能,迅速在市场上获得了一席之地。这一成功让Danube意识到技术创新的重要性,也奠定了公司未来发展的基石。

DIALIGHT公司的发展小趣事

DIALIGHT公司的故事始于1938年的纽约布鲁克林,当时该公司专注于为飞机生产仪表板灯。随着技术的不断进步和市场的变化,公司在1971年,即LED推出仅一年后,推出了他们的第一个LED产品。这一举措标志着DIALIGHT正式从传统的飞机仪表板灯制造转向LED照明技术的研发和应用。从此,DIALIGHT彻底改变了LED的用途,将其广泛应用于世界各地的交通控制、指示灯、结构塔和工业场所,为全球提供了优质的照明解决方案。

Helicomm公司的发展小趣事

随着业务的不断发展和市场的不断扩大,DIALIGHT公司逐渐实现了全球化布局。他们在美国、英国、丹麦、德国、马来西亚、新加坡、澳大利亚、墨西哥和巴西等地设立了分支机构或办事处,为全球客户提供及时、高效的服务。此外,DIALIGHT还积极寻求与其他企业的合作与共赢,通过战略合作协议的签署,为双方带来新的业务机遇和合作空间。这些举措不仅增强了DIALIGHT的市场竞争力,也为其未来的发展奠定了坚实的基础。

请注意,由于篇幅限制,以上三个故事仅为DIALIGHT公司发展历程的简要概述。如需更详细的信息和更多故事,建议查阅相关资料或访问公司官网。

EETools公司的发展小趣事

EETools公司成立于1992年,当时正值微处理器开发工具行业蓬勃发展的时期。公司创始人凭借对嵌入式系统产品的深刻理解和市场需求的敏锐洞察,决定投身于这一领域。EETools在硅谷的电子和计算机行业中心设立总部,迅速成为该地区的一颗新星。

在初创阶段,EETools专注于嵌入式系统产品的咨询和分销业务。通过与多家知名半导体厂商建立合作关系,EETools成功将各种高性能的嵌入式系统产品引入市场,满足了客户多样化的需求。同时,公司还积极研发自主品牌的嵌入式开发工具,为客户提供更为全面和专业的服务。

问答坊 | AI 解惑

电话机电路原理的详细解说ppt文件

电话机电路原理的详细解说ppt文件 ---------------------soso--------------------------------- 确认没有找到解压密码,请朋友们注意! 如果有解压密码的朋友,请与大家共享,谢谢!…

查看全部问答>

C8051初始化程序

本帖最后由 paulhyde 于 2014-9-15 03:22 编辑 C8051初始化程序以及各控制寄存器各位的定义说明  …

查看全部问答>

重金 寻求wince上(6410)播放rmvb视频的方案,期待与有成熟技术的公司合作!

重金 寻求wince上(6410)播放rmvb视频的方案,期待与有成熟技术的公司合作! 联系QQ:314629407 …

查看全部问答>

招聘程序员

招聘程序员: 具体要求见: www.chinadacs.cn …

查看全部问答>

有关PIC12F675 的PWM

__CONFIG(INTIO & WDTDIS & PWRTDIS & BORDIS & UNPROTECT & MCLRDIS); 这是我的配置字 这时是否应该使用内部晶振 且频率是4MHZ? 我用的是TMR0的中断来产生PWM波 TMR0的预分频器的设置如下 PS0=0; ;PS1=0; ;PS2=0;//1: ...…

查看全部问答>

请问ST_ARM关于Lwip!

                                 你好,我的Lwip能够接收到数据,但是无法ARP回显,我用PC机ping的时候,能够收到PC的ping数据包,但是Lwip就是不回 ...…

查看全部问答>

STM8S的16位定时器输入捕捉和PWM输出的问题

                                 请问STM8S的16位定时器,能同时使用输入捕捉和PWM输出吗,会不会有冲突?因为以前用AVR的,对于同一个定时器来说, ...…

查看全部问答>

请教绝对值的准确用法

请教各位同仁:int变量取绝对值用fabsf,fabs,fabsl的哪一个,谢谢!…

查看全部问答>

LaunchPad + 74595 io extender 實作

$(\'swf_eLZ\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XMzkxNDU0MDAw/v.sw ...…

查看全部问答>