在使用中,会经常遇到一些环境,我们在硬件上没有办法去设置更多的按键,因为空间位置不是很够,设置太多的按键,就会造成按键很小,操作难度变大。尤其是一些我们使用的传感器上,一般会集成一些简单的功能,而在切换中就只有两个按键或三个按键,这样既方便又可以实现更多的选择。
而为了达到这个目的,我们就需要对按键进行一些设置,例如短按,长按,组合按等等。使用中,我们可以看到很多传感器就是这么设定的。
之前我们谈到的一款导波雷达液位计,就是属于这类,只有两个按键,但是却可以设定几十种功能,还可以翻页等等。
优势上也不做过多的说明,我们可以看下如何简单的实现。先实现两个功能,就是短按和长按。以往使用的基本上都属于短按,因为为了防止功能重复切换,就设置了按键状态抬起检测,所以,我们只有按键按下这个动作,输出就只有一个。
这次,需要在按键按下后,开始计时,然后通过计时来判断,按键是短按还是长按,短按就实现短按的功能,长按就实现长按的功能,分开设置,可以增加程序的丰富性,体验更加好。
这是借用之前数码管测试的一个电路,在硬件上其实没有什么可以创新的,主要是对软件的编程,借用算法的功能来实现一些特殊的功能。
在数码管的切换上只采用P2端口,位码的切换上还是用P1.1和P1.2,数码管使用的是共阳的。对电路图稍加修改。
程序上先开中断,然后判断按键,当按键按下,中断开始计时,直到按键抬起,中断结束,判断定时器计时时间,然后通过时间长短来判断是长按还是短按。我设定的是一秒以内一个响应,三秒以上一个响应。也可以说成是低于三秒属于短按,高于三秒属于长按。
程序上也比较简单,接下来看下程序。
在程序中,不一定非要设置1秒计数一次,可以自己任意设置,这里我演示一秒是为了方便理解。在按键的消抖上使用了延时函数,不用增加难度,满足实际使用即可。
接着是仿真下,看下运行情况。
首先是上电后状态。
所有端口均处于初始状态,属于高电位,由于位选针脚需要触发才会置地,所以此时也是高电位。接着快速单击下按键,时间在一秒内,看下状态。一格分度值是0.5秒,可以看出,我按下按键的时间是0.8秒左右,所以,第一个数码管点亮,同时输出0。
接着我又单击了一次,依然是时间比较短,从波形图上可以看出,时间大致为1.5秒,我设置的时间是3秒内都输出0,所以,此时依然是第一个数码管显示0。这个可以做出限制,让程序控制只有1秒内才显示或者只有1-3秒之间才显示,这个可以在判读语句中增加一个限制条件即可。
再接着以上的流程,继续测试,此次单击时间可以稍微长一些,从波形图上可以看出,波形共持续了7格,也就是大约3.5秒,此时触发了3秒的程序,数码管切换为了第二个显示,同时显示1。此时整个流程基本就结束了,以后可以用这个程序的方法去进行一些按键模块的使用。
在使用中,长按和短按是非常实用的,可以充分利用按键,同时可以隐藏一些功能,不过长按和短按,隐藏功能并不是很实用,有时会出现误触发,导致错误,此时还有另一个常用的按键触发方式,就是单击和双击,或者会使用组合按键来触发,尤其是组合按键,会使用一些正常使用中不可能组合的按键,来搭配,这样可以防止误触发。例如手机的强制重启,是音量+-与开机键组合,平常使用中,我们是不会这么来操作的,因为音量与开机键没有同时按下的应用,不过现在有些应用也会如此组合,例如照相机或截屏会使用部分组合按键。下期我们介绍下单击和双击,有时间介绍下组合按键。
文章标签:
本文链接地址: 自学单片机第五十九篇:按键的短按和长按:
http://www.mcucd.com/k1/31.html
联系信息:单片机疑难问题咨询:方先生 手机:15328075932 QQ:67828115
版权声明
本文部分文字和图片来源于互联网,如有侵犯您的权利请发送内容至:173323810@qq.com,我们将立即删除!