网站大量收购独家精品文档,联系QQ:2885784924

单片机按键处理.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机按键处理

关于按键的单片机处理 按键做为电子产品的主要输入器件,是很个单片机开发人员都会遇到的最基本的东西了。下面就个人在产品开发中常采用的按键处理进行初略的整理。希望阅读此文的人会有所收获。对于高手如果您也浪费时间看了,请再麻烦您给点意见和建议(Email:flec@163.com zqhuang@)。谢谢! 按键处理首先得将按键信号采集进来。本人习惯采用定时扫描的方式来做按键信号采集。这种方式在对程序规划时,采用控制程序固定时长循环方式工作,即主程序循环运行一圈时间固定为几个毫秒,程序流程如图(1)。 图(1) 主程序流程 其中定时子程序根据定时中断的标志位来确定定时是否到。到了就往下运行,未到等待(中断标志位置位)。中断时间长短一般根据程序功能而定,例如如果有显示扫描,程序循环一次显示一个位,假设有四个位要显示,那么定时时间就设4毫秒左右。这样完成一次完整的显示扫描为16毫秒,相当于显示扫描频率为62.5Hz,这个频率做显示扫描看起来就不会有闪的感觉。按键扫描程序每4毫秒采样一次按键信号。按键处理子程序对按键信号进行处理。 按键信号采集后怎么处理,主要还是要根据按键的功能和响应方式来定。 一、实时响应单按键 最常用的是按下某个按键,马上响应,进行相应的处理。这个按键处理流程如图(2) 图(2)单键实时响应程序流程 实现这个程序流程需要一个计数器和一个按键状态寄存器(如果按键大于8个按键状态寄存器就要用多个)。如果按键数比较少而且没有和其它驱动复用,也可以把按键信号采集和处理放在一起。首先判断是否有按键信号,没有就做计数器和按键状态寄存器清零,然后退出按键处理程序。如果有按键信号,判断是否和上次检测到的信号一样。不一样则判断按键检测计数器是否为10,如果为10说明已经有响应过按键了,可直接退出按键处理程序。当计数小于10时说明按键是没响应过,这时把新的按键信号保存到按键状态寄存器,这时的状态有两种情况,一种为原没按键是新按下按键,另一种是计数不到10时又有另一按键按下相当于两键同时按下,对于前者,是正常的操作,对于后者在做按键响应时可以不做处理,即不响应双键或多键按下的情况。当按键信号和原来的按键状态一样时,说明是按键按住,按键检测计数器加一,如果按键检测计数器等于10就对判断是哪个按键按下,做相应的按键处理,这时可以只判断有效的按键状态,如果是双键或多键就不处理了。如果按键计数小于10不做处理处理退出,大于10就赋值10做数值限定,因为如果不做数值限定计数溢出后会再计数到10又会再一次响应按键。当然按键检测次数不一定是10次进行响应,这个数值可以根据使用按键的类型和电磁环境做相应的调整。主要目标是避开按键按下和放开阶段的抖动。每4毫秒检测一次,连续检测10次相当于40毫秒,一般抖动频率应该会大于这个频率,在本人使用这样的按键处理程序中,按键都未并电容,按键响应一直正常。对于EMC中的EFT测试会导致按键异常响应的可以把检测次数适当加大,以避开脉冲群干扰影响按键的正常工作。 二、按键的长按和短按处理 有些按键响应方式会采用长按的方式来进行,比如设定或修改产品参数。也有可能为了使一个按键可以实现多项功能,根据不同按键时间做不同处理。一般具有长按功能的按键,其短按响应一般是在按键松开后再响应的。长按短按程序流程如图(3)。 按键信号的定时扫描如前所述。首先,判断是否有按键信号,当无按键信号时,判断原来的按键状态寄存器是否有信号。如果有信号说明原来按键是按下的现在松开了。当按键次数计数器大于等于750时,说明按按键已经超过了长按时间,如果是长按键在前面就已经处理过了,如果是其它按键也不用管,是可以不响应的按键信号,转按键计数和状态寄存器清零。按键次数计数器小于等于10认为是干扰信号,不做处理,直接做按键计数和状态寄存器清零动作。如果按键计数在10到750之间,根据按键信号做按键松开的响应处理。完成后同样的要清按键计数和状态寄存器。 图(3)长短按键处理流程 如果有按键信号,但按键信号与原按键状态不同,判断按键计数是否大于10,如果小于等于10,认为是干扰信号,保存当前按键信号后退出按键处理。当计数大于10时,认为是两按键切换,程序不对按键进行响应,为了达到按键按住或松开都不响应的目的,将按键计数赋值750,保存按键状态后退出。 如果按键信号与原状态相同,说明按键持续按住,当计数等于10时,判断是否是短按按键,如果是就做短按按键的响应,并将计数赋值750以避免按键的重复响应。当计数等于750时,判断是否是长按按键,如果是就做长按按键的响应。如果计数器大于750就做数值限定,以防止计数溢出,否则直接退出按键处理程序。 这里的数值10同上,也是为了按键去抖用的,可以根据实际情况做适当调整。数值750是长按3秒的计数次数,如果要加

您可能关注的文档

文档评论(0)

yurixiang1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档