《清除键盘机械抖动的方法》-公开DOC·毕业论文

上传人:zhuma****mei1 文档编号:134639375 上传时间:2020-06-07 格式:DOC 页数:12 大小:96KB
返回 下载 相关 举报
《清除键盘机械抖动的方法》-公开DOC·毕业论文_第1页
第1页 / 共12页
《清除键盘机械抖动的方法》-公开DOC·毕业论文_第2页
第2页 / 共12页
《清除键盘机械抖动的方法》-公开DOC·毕业论文_第3页
第3页 / 共12页
《清除键盘机械抖动的方法》-公开DOC·毕业论文_第4页
第4页 / 共12页
《清除键盘机械抖动的方法》-公开DOC·毕业论文_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《《清除键盘机械抖动的方法》-公开DOC·毕业论文》由会员分享,可在线阅读,更多相关《《清除键盘机械抖动的方法》-公开DOC·毕业论文(12页珍藏版)》请在金锄头文库上搜索。

1、 山东传媒职业学院毕业论文 论文题目简要分析清除键盘机械抖动的方法 指导教师/职称 /中级讲师 作者姓名 年级/专业 10级广播电视技术1班 山东传媒职业学院2011年 12 月 日目录摘要1英文摘要1一.基本原理 2二消除键盘机械抖动方法实际应用情况 4三两种方法的对比总结5谢 辞 6参考文献 6清除键盘机械抖动的方法广播电视技术技术专业 一班 指导老师 内容提要:单片机控制系统中大多使用控制键来实现控制功能,对按键处理的重要环节是去抖动,包括去除按下和抬起瞬间的抖动。消除按键瞬间的抖动是设计者必须要考虑的问题。本文通过分别分析硬件和软件两种键盘消抖的方法,使用R-S触发器的硬件方法、运用算

2、法的软件方法,对比得出两种方法不同的优劣点。硬件方法会增加成本和体积,对于按键较多的矩阵式键盘,会用硬件方法;软件方法用的比较普遍,但有一种加固定延时的去抖动法效率最低,它以无谓地耗费机时来实现去抖动。 关键词:按键消抖;R-S触发器;软件算法Removing the keyboard mechanical dithering methodTechnology of radio and television technology Class one Instructor Luo donghuaAbstract : SCM control system mostly using the cont

3、rol key to realize the control function, the key processing is a important link to jitter, including the removal of pressing and lifting moment jitter. Elimination of jitter of the key moment is the designer must consider the problem. This paper analyzes the hardware and software of two keyboard sha

4、king elimination method, using the R-S trigger hardware method, using software method, comparison between two methods of different strengths and weaknesses. The hardware method will increase the cost and volume for the key, more matrix keyboard, with hardware method; software method to use in the mo

5、re common, but there is a plus fixed delay dithering method minimum efficiency, it needlessly consuming machine to achieve jitter. Key words: button buffeting extinction; R-S flip-flop; software algorithm 一清除键盘机械抖动方法的基本原理 按键消抖:通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号小型如下图。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断

6、开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,如下图。抖动时间的长短由按键的机械特性决定,一般为5ms10ms。 按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。按键的抖动,可用硬件或软件两种方法。 软件方法:运用运算方法,通过运算逻辑表达式:Keradyn=Ktemp Kinput+Kreadyn-1 (Ktemp Kinput) (1)Ktemp=Kinput (2)可以获得消除抖动的按键消息

7、。 设置3个变量Kready、Ktemp和Kinput,并设置定时中断周期为20ms。在定时中断服务程序中读取按键,并把读取的数据存于变量Kinput中。变量Kready中是所需要的稳定的按键信息;Ktemp是中间变量,它的值是上一次的Kinput。 根据当前按键的状态,考虑到Kready中是20ms抖动后的有效键信息,则Kready、Ktemp和Kinput之间,在不同时刻的状态关系如表1所列。表1时 刻KreadyKtempKinput1000200130104001511161117110810191101000011000 时刻1为没有键按下的初始状态;时刻2的Kinput为1,但时刻

8、3的Kinput又变为0,说明时刻2的Kinput为1并不是有键按下,可能只是干扰,所以Kreqdy为0;时刻4同时刻2的情况类似,但是时刻4和时刻5时Kinput都为1,说明有按键按下,在时刻5时Kready为1;虽然时刻7时Kinput为0,但时刻5、6、8时Kinput都为1,说明按键一直按下,只不过有干扰,Kready保持为1;时刻9、10连续两个时刻Kinput为0,表示按键抬起,时刻10时Kready为0。 通过分析可以看出,Kready中是消除了抖动并在一定程度上排除了干扰的有效按键信息。从按键按下到Kready为1,最长时间约为40ms,最短约为20ms。其时间长短取决于键按下

9、时处于定时中断周期的所在时刻。如果按键一直按下,则有效键信息以20ms的间隔重复输出。仔细分析表1,还可知道当前时刻Kready的值不但与Ktemp和Kinput有关,还与Kready前一时刻的值有关。我们把Keady的当前时刻记作Kreadyn,作为因变量;前一时刻记作Kreadyn-1,并和Ktemp、Kinput一起作为自变量,依照表1绘出卡诺图如图1所示。表达式(1)就是由图1的卡诺图得出的最简逻辑表达式。 硬件方法:在键数较少时可用硬件方法去除键抖动,下图所示的RS触发器为硬件去抖图中两个“与非”门构成一个RS触发器。当按键未按下时,输出为1;当键按下时,输出为0。此时即使用按键的机

10、械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。这一点通过分析RS触发器的工作过程很容易得到验证。 利用电容的放电延时,采用并联电容法,也可以实现硬件消抖2 消除键盘机械抖动方法实际应用情况软件应用情况:如用C51单片机编程语言编制的8个按键的键处理程序 #include#includeunsigned char key_value;unsigned char Kinput;unsigned char Ktemp;unsign

11、ed char Kstore;unsigned char Kready;unsigned char Koutput;unsigned char bdata flag;code unsigned char Kconst=0xaa; /*重复键和非重复键格式*/sbit endebounce=flag0;sbit getkey=iag1;sbit kprocess=flag2;sbit ACC_7=ACC7;void main(void);void debounce(void);void get_key_value(void);void main(void)/*初始化*/kinput=Ktemp=

12、kready=Kstore=0;endebounce=0;getkey=0;kprocess=0;TMOD=0x01;TL0=0xe0;TH0=0xb1;TR0=1;ET0=1;EA=1;/*/while(1)/*循环*/debounce();/*调用去除键抖动函数*/get_key_value();/*调用获取键值函数*/key_processing();/*调用键处理函数*/*other functions*/void debounce(void)if (endebounce)/*以下是去除键抖动表达式*/Kreqdy=Ktemp & Kinput |Kready & (KtempKinp

13、ut);Ktemp=Kinput;/*以下表示式用于输出重复键和非重复键*/Koutput=Kready &(Kstore | Kconst);Kstore=Kready;if (Koutput ! =0)/*如果有键按下,置标志准备获取键值*/getkey=1;void get_key_value(void)if(getkey)unsigned char temp;unsigned char j;getkey=0;/*清标志*/for(j=0;j8;j+)temp=_cror_(koutput,1);/*循环右移寻找按下的键*/if(_testbit_(ACC_7)/*如果ACC_7=1,找到了按下的键*/key_value=j;/*获得键值*/j=8;/*找到按下的键就退出循环*/kprocess=1;/*置标志,准备进行键处理*/else Koutput=temp;/*准备下一次寻找*/void timer0_interrupt_handler(void) interrupt using1TL0=0xe0;/*加载定时器参数,使晶振频率12M

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号