在单片机系统中,按键和开关一样,都是输入设备,但是在应用过程中,按键相对更灵活些。
键盘是一组按键开关的集合。按键开关多为机械弹性开关,按键开关的合、断,呈现高、低电平两种状态,如果高电平表示断开的话,低电平则表示闭合,所以通过对电平高低状态的检测便可确认是否有键按下。按键从没有按下到按下以及释放是一个完整的过程。也就是说,当按下一个按键时,总希望某个命令只执行一次,而在按键按下的过程中,不要有干扰进来,因为在按下的过程中,一旦有干扰,可能造成误触发过程,这并不是我们所想要的。因此在按键按下的时候,要把手上的干扰信号以及按键的机械接触等干扰信号滤除掉。一般常用的去抖动电路有双稳态消抖、RC滤波消抖和专用芯片。
图9-31 双稳态消抖电路图
采用RS触发器组成的双稳态消抖电路如图9-31所示,图中的电阻可选4.7kΩ普通电阻。键未按下时输出为1,键按下时输出为0。
由图9-31可见,当键按下时,与非门2的输入端接低电平,输出高电平,这时与非门1两输入端同时为高电平,使触发器的输出为0。此时,输出端的0封锁了与非门2的输入,所以即使按键振动脱离低电平,也不能改变与非门2的输出状态,从而稳定了触发器的输出,克服了振动的不稳定输入对输出的影响。当按键弹起返回原始状态时,就会使触发器的输出为1,输出的1、0、1一个脉冲变化准确反映了按键的一次动作。
采用RC滤波的按键消抖电路如图9-32所示。当无按键按下时由非门输出高电平,有按键按下时,信号经过RC网路滤波后由非门取反输出低电平。
采用专用单稳态触发芯片,如DM74121芯片。引脚定义如图9-33所示,逻辑功能见表9-9,消抖电路如图9-34所示。
图9-32 RC滤波消抖电路图
图9-33 DM74121芯片引脚定义
表9-9 DM74121逻辑功能表
但实际上,这样会增加硬件成本及硬件电路的体积,因此可以采用软件滤波的方法去除这些干扰信号。一般情况下,一个按键按下的时候,总是在按下的时刻存在着一定的干扰信号,按下之后就基本上进入了稳定的状态。具体的一个按键从按下到释放的全过程的信号如图9-35所示。
图9-34 DM74121芯片消抖电路图
图9-35 按键信号图
从图9-35中可以看出,在程序设计时,从按键被识别按下之后,延时5ms以上,从而避开了干扰信号区域,再检测一次,看按键是否真的已经按下,若真的已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才是由于干扰信号引起的误触发,CPU就认为是误触发信号而舍弃这次的按键识别过程,从而提高了系统的可靠性。由于要求每按下一次,命令被执行一次,直到下一次再按下的时候,再执行一次命令,因此从按键被识别出来之后,就可以执行这次的命令,所以要有一个等待按键释放的过程,显然释放的过程,就是使其恢复成高电平状态。(www.xing528.com)
另外,对于按键识别的指令,选择“JB BIT,REL”指令,用来检测BIT是否为高电平。若BIT=1,则程序转向REL处执行程序,否则继续向下执行程序。或者是“JNB BIT,REL”指令,用来检测BIT是否为低电平。若BIT=0,则程序转向REL处执行程序,否则继续向下执行程序。程序设计中按键识别过程的框图如图9-36所示。
1.应用电路
单片机的P3.7/RD接口连接①个单键,P1.0~P1.4接口连接到4个发光二极管,单按键识别电路如图9-37所示。
2.程序设计
(1)程序功能 每按下一次开关,计数值加1,通过单片机的P1接口的P1.0~P1.3显示出其二进制计数值。
(2)程序流程图 单按键识别流程如图9-38所示。
图9-36 按键识别过程的框图
图9-37 单按键识别
图9-38 单按键识别流程图
(3)参考程序
1)汇编参考程序:
2)C语言参考程序:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。