ImageVerifierCode 换一换
格式:DOC , 页数:5 ,大小:30KB ,
资源ID:3099676      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3099676.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机的快速按键识别方法.doc)为本站会员(hw****26)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

基于单片机的快速按键识别方法.doc

1、 基于单片机的快速按键识别方法摘要:在使用单片机实现的智能控制系统中,快速、可靠的按键识别控制非常关键,一定程度上决定了整个系统的高效运行。本文在分析传统的按键扫描或识别方法的基础上,对比各种方法的优缺点,重点讨论一种高效的按键识别方法,并给出该方法对应的程序设计思路,它可快速识别对按键的一次响应,解决多次冗余响应的缺陷。关键词:单片机 按键识别 一次响应中图分类号:tp368.12 文献标识码:a 文章编号:1007-9416(2012)08-0175-021、引言在以单片机为核心控制的应用系统中,键盘按键能实现向单片机输入数据、传送命令等功能,是单片机应用系统中人工干预单片机的主要手段。而

2、单片机对按键闭合与否的判断,主要是通过其引脚上的电压高低进行的。本文以 51 单片机为例说明,所述键盘按键的硬件电路设计也非常简单轻触开关的一端接地,另一端连接单片机引脚,该引脚同时接 10k 上拉电阻1。很明显,单片机引脚呈现高电平表示按键开关断开;反之,引脚电压呈现低电平表示按键开关闭合。因此,对单片机的按键识别只要通过对其引脚电平的高低状态的检测,即可确认按键按下与否2。众所周知,按键为机械弹性开关,加之按键按下或抬起瞬间均会产生抖动现象,因此消除按键抖动也是整个系统的关键。为更突出本文的讨论重点,这里不再重点讨论按键去抖的方法。2、传统按键识别方法2.1 简单的按键识别该按键识别方法虽

3、然简单,但当按下按键的瞬间,却可能让系统多次循环处理同一按键事件,造成 cpu 资源的浪费。以下为该方法的程序设计思路,下述中的“按键确实按下”表示延迟 10ms后,按键仍处于按下状态。(1)初始化按键;(2)if(按下按键)延迟 10ms 去抖;if(按键确实按下)事件处理,退出else 未按按键,退出单片机程序可能是一个循环执行的过程,当按键按下闭合,程序进入按键事件,执行完该事件,若按键仍未被抬起,则程序循环又再一次进入同样的按键事件执行。事实上,如果采用 12mhz外部晶振,单片机处理器执行一个指令通常只要 2 个机器周期的时间,也即 4us。如此短暂的时间,当我们松开按键时,程序可能

4、早已经循环执行很多次按键事件。因此该按键识别的程序思路并不合适。为了不重复执行同一个按键事件,可改进为如下所述的按键识别的方法:(1)初始化按键;(2)if(按下按键)延迟 10ms 去抖;if(按键确实按下)事件处理,等待按键释放,退出else 未按按键,退出此方法虽然可识别按键释放,即实现每一次按键,系统只会调用一次按键处理事件。但若按键一直不释放,则程序只可在此原地踏步等待,浪费系统执行时间,cpu 每个时钟周期均做无用功。解决方法是,在识别到第一次按键,并执行完按键事件后,将忽略后续的按键状态,从而实现对按键的一次响应,解决多次冗余响应的缺陷。2.2 带标志的按键识别为了解决多次冗余响

5、应的缺陷,可设置按键按下与释放两种状态的标志,在程序执行过程中,检测标志位内容,识别按键的状态。根据该思路,可在初始化按键时,设置按键按下与否的标志位,并赋予“0”与“1”两种状态。标志状态为“0”表示按键无效,为“1”表示按键被按下。以下为带标志位的按键识别的程序设计思路2,这里假定标志位为 key_mark,初始值为 0。(1)初始化按键;(2)if(按下按键 & !key_mark)延迟 10ms 去抖;key_mark = 1; /将状态“1”赋予标志位。表示按键已按下if(按键确实按下)事件处理,退出else if(未按按键)key_mark = 0,退出该方法可行有效,其中标志位

6、key_mark 起了至关重要的作用。只有当按键按下,key_mark=0,且延迟 10ms 去抖后,程序才会确认是否真的有按键被按下。此时马上对 key_mark=1,使得下一次查询 key_mark 标志时,得知按键正处于按下状态。如此,不仅使得按键被按下时可被准确检测到,还可以在按键还没被抬起释放时,不重复响应同一个按键事件。由于此时标志位 key_mark 的值被赋值为“1” ,因此 if(按下按键 & !key_mark)将不再成立,直到按键抬起,才重新赋值 key_mark 为“0” ,实现了每一次按键,系统只会调用一次按键处理事件。3、快速按键识别方法对于程序员来说,实现同样功能

7、的程序,简洁、高效对设计非常关键。本文讨论的快速按键识别方法,尝试使用单片机 c 语言中的逻辑运算方法,同样快速有效地解决了按键识别的程序设计问题。该方法在初始化设置后,只需要使用一句异或运算语句,两句赋值语句,即可快速进行按键识别。下面给出该快速按键识别方法的思路。先初始化三个标志位:key_now,key_old,key_change。其中,key_now 表示当前读取到的按键电平;key_old 表示之前一次读取到的按键电平;key_change 表示按键被按下后出现的变化情况,即当key_change=0,表示按键处于断开状态,key_change=1,表示按键处于闭合状态。这三个标志位的初始化值均为“1” 。现在给出该方法的程序设计思路。(1)初始化按键(2)key_now = p1.?内容

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。