嵌入式系统智能键盘的软件设计

发布者:jingyan最新更新时间:2010-03-16 来源: 中电网关键字:智能键盘  嵌入式系统  连击  单击 手机看文章 扫描二维码
随时随地手机看文章

  键盘是智能化测控系统主要的信息输入方式,是实现人机对话的重要途径,因此如何有效地控制键盘并为系统服务是每个设计者需要切实考虑的问题。

  嵌入式系统键盘软件设计存在3方面问题:软件去抖动、等待按键抬起和连击处理。

  1嵌入式系统键盘软件设计的3个问题

  1.1软件去抖动问题

  一次完整按键过程的时序波形如图1所示。当按键未被按下时,单片机端口输入为通过上拉电阻获得的高电平;按下时,端口接至地,端口输入为低电平。当机械触点断开、闭合时会有抖动,这种抖动对人来说是感觉不到的,但对计算机来说,则是完全可以感应到的。计算机处理的速度是us级,而机械抖动的时间至少是ms级,对计算机而言,这已是漫长的时间了。

  为使单片机能正确地读出端口的状态,对每一次按键只作一次响应,这就必须考虑如何去除抖动的问题。嵌入式系统一般采用软件延时去除抖动。软件延时去除抖动其实很简单,就是在单片机获得端口有按键动作时,不是立即认定按键开关已被按下,而是延时10 ms或更长一段时间后再次检测端口,如果仍为动作电平,则说明按键开关的确按下了,这实际上是避开了按键按下时的抖动时间;而在检测到按键释放后(端口为高)再延时5~10 ms,消除后沿的抖动,然后再对键值处理。当然,实际应用中对按键的要求也是千差万别,要根据不同的需要来编制处理程序,但以上是软件延时去除抖动的基本原则。

  1.2等待按键抬起问题

  单片机在查询读取按键时,不断地扫描键盘,扫描到有键按下后,进行键值处理。它并不等待键盘释放再退出键盘程序,而是直接退出键盘程序,返回主程序继续工作。计算机系统执行速度快,很快又一次执行到键盘程序,并再次检测到键还处于按下的状态,单片机还会去执行键值处理程序。这样周而复始,按一次按键系统会执行相应处理程序很多次。而程序员的意图一般是只执行一次,这就是等待按键抬起问题。通常的解决办法是,当按键抬起后再次按下才再次执行相应的处理程序,等待时间一般在几百ms以上。通常在软件编程中,当执行完相应处理程序后,要加一个非常大的延时函数,再向下执行。

  对于软件去抖动问题和等待按键抬起问题,若采用软件延时,会大大削弱系统的实时性;若采用中断方式延时,会占用定时器,耗费了系统资源,且软件的多任务编程会增大软件设计的复杂度。

  1.3连击处理问题

  工业控制设备中有这样一种键盘方案设计要求:如果长时间按下同一个按键,表征有重复执行该键对应处理程序的需求。比如使用“+”和“-”二键控制显示数值,要求按一次“+”键使显示值加1,要求按一次“-”键使显示值减1。如果按“+”键超过一定时间(如2 s),则显示值将很快地增加,即连击处理,减号键也是如此。这样就可以用很少的键完成多位数的输人工作。

  针对这3个问题,本文给出一个解决方案。该软件方案实现计数器自然去抖动和等待按键抬起功能,而非采取延时等待的方法,同时实现了连击处理。

  2智能键盘的软件设计

  为了解决智能键盘在应用中的一些技术问题,下面分析各种击键类型的软件处理方法。

  2.1短击和长击区分的软件设计

  图2为短击/长击的示意图。

  软件流程如下:

  ①定义1个变量,KEY_Counter=按键闭合计数器。

  ②定义1个常数,c_keyover_time=按键长击时间常数。

  ③定时检测按键,当按键闭合时,KEY_Counter按一定的频率递增。

  ④当KEY_Counter≥c_keyover_time时,确认一次有效长击。

  ⑤当按键释放时,再判断一次KEY_Counter,如果KEY_Counter
◆一般来说,长击一旦被检测到就立即执行;

  ◆当按键刚被按下时,系统无法预知本次击键的时间长度,所以短击必须在释放后再执行。

  ⑥当按键释放后,KEY_Counter应当被清零。

  2.2单击和连击的软件识别

  一般来说,连击和单击是相伴随的。事实上,连击的本质就是多次单击。软件流程如下:

  ①定义1个变量,KEY_Counter=按键响应延时时间寄存器。

  ②定义2个常数:

  ◆c_wobble_time=按键初按(消抖)延时(用来确定消抖时间,一般取4~20 ms);

  ◆c_keyover_time=按键连按延时(用来确定连击的响应频率。比如,如果要每秒执行10次连击,则这个参数=100 ms)。

  ③按键未闭合前,先令KEY_Counter=0。

   ④当按键闭合时,KEY_Counter以一定的频率加1。抖动期间,若检测到按键抬起,令KEY_Counter=0。当KEY_Counter=c_wobble_time时,抖动时间已经过去,即可先执行一次按键功能,此为首次单击。之后,若按键一直处于闭合状态,则进入下一进程。

  ⑤KEY_Counter超过c_wobble_time,且按键一直闭合时,KEY_Counter仍以一定的频率加1。当KEY_Counter=c_keyover_time时,KEY_Counter=0,形成一次长击。

  ⑥当再次出现KEY_Counter=c_wobble_time时,即可再执行一次按键功能,此为连击。

  ⑦如果按键一直闭合,就重复执行⑤~⑦三个步骤,直到按键释放。

  单击/连击示意图如图3所示。

  本文以AVR单片机为例给出设计软件。例程中4个按键分别连接到PD口的低4位(若按钮更多,甚至是矩阵键盘也很好仿写)。WINAVR20071221例程如下(假定连接按键的I/O口已经成功地初始化):

  工程应用中随着主函数死循环中程序量的不同,需要调整3个参数。不过,该程序利用系统的嘀嗒定时中断定时读取,只需调整好一组参数。

  上面的例程中要深入理解static的作用,即静态变量会被分配一个内存固定、每次操作的值不会丢失、却又被函数私有处理的类似全局变量的变量。

  结语

  本文针对实时应用的嵌入式系统中智能键盘软件设计的软件去抖动问题、等待按键抬起问题和连击处理问题,给出基于查询结构的软件解决方案。该方案不但能够满足系统的实时性要求,而且软件直接调用,大大降低了系统开发的难度。

关键字:智能键盘  嵌入式系统  连击  单击 引用地址:嵌入式系统智能键盘的软件设计

上一篇:基于SOPC技术的内存映射型LCD控制器设计研究
下一篇:FTDI在IIC2009深圳站上展示USB产品

推荐阅读最新更新时间:2024-05-02 21:01

基于嵌入式系统的SD卡接口设计
SD卡是一种基于半导体快闪记忆器开发的新一代记忆设备,目前 SD卡 被广泛应用于各种便携式装置上,一般重量约为2 g,拥有较好的安全性、移动灵活性、快速数据传输率和高记忆容量。许多嵌入式设备都选择使用SD卡以提高系统的稳定性、降低成本。   1 嵌入式系统的特点   因为嵌入式系统是一种特殊的计算机系统,所以它和计算机系统一样,由软件和硬件构成。以PC为代表的通用计算机系统和嵌入式系统相比,不同的嵌入式系统有不同的特点,但是其主要特点一样。   (1)嵌入式系统是一种专用计算机系统。嵌人式系统的软件和硬件是针对特定任务和应用对象进行设计的,具有较强的多样性和专用性。嵌入式系统所能够提供的功能,均可提前预知,相对较为固定。
[模拟电子]
基于<font color='red'>嵌入式系统</font>的SD卡接口设计
基于嵌入式系统的RFID手持机系统设计
 RFID 手持机在交通运输、门禁、物流、考勤、货物管理、身份识别等方面有着十分广泛的应用。RFID 手持设备对电源的效率、使用寿命、可靠性、体积、成本等方面有较高的要求。因此,设计一个稳定性好、效率高、杂散小的电源对于RFID 手持机有着十分重要的意义。      1 RFID 手持机硬件结构      在基于嵌入式系统的RFID 手持机系统设计中,以微处理器LPC2142 为主控制器,根据系统的需求外扩了SRAM、Flash、SD 卡、键盘、LCD 显示、声响提示进行数据处理、数据存储、人机交互以及出错报警提示,通过USB 接口可以与主机进行数据通信,背光模块可以为LCD 和键盘提供背光,电压检测模块通过核心处理器的A/D 转
[工业控制]
基于<font color='red'>嵌入式系统</font>的RFID手持机系统设计
OpenCV的加速嵌入式系统开发中的应用
     嵌入式处理器的性能日益提升、价格不断下降,带来日益广泛的嵌入式计算机视觉应用,包括从安全及工业监控到自动化车辆与汽车安全等领域。开发人员可充分利用越来越高级的硬件,在不影响基本质量的同时,更快速、更低成本地开发具有突破性性能的产品。   开发周期缩短而带来的巨大压力,迫使嵌入式系统开发人员必须高效利用嵌入式领域与传统PC工作站领域的现有技术;适应并复用现有稳定软件可为嵌入式开发人员提供不断开发重大新项目的必备基础。   OpenCV就是PC软件进入嵌入式开发领域的一个实例。OpenCV是一款免费的开源计算机视觉库,可提供从影像过滤及转换,到特性抽象与机器学习等几十个不同类别的数百种算法。它已被成千上万的开发人员所
[嵌入式]
ARM嵌入式系统的ISP设计
应用程序的固化是嵌入式产品开发和生产过程中一个重要环节。基于ARM的嵌入式系统常用的程序固化方法是,用仿真器通过JTAG口将程序烧录到Flash里,在产品的开发阶段,使用仿真器几乎是必然的;然而到了产品的生产阶段,进行应用程序烧录或升级操作的往往是生产线上的工人,他们不易掌握仿真器的使用方法,而且在生产阶段也需要把JTAG调试口封住以防软件被窥视。笔者在使用意法半导体的STR730开发产品的过程中,设计了一种通过串口进行ISP(In System Programming,在系统编程)的方案。该方案成本低,生产线使用起来也很方便,而且即使升级过程中发生掉电之类的意外也不会影响下一次升级,安全而可靠。 1 硬件连接 ISP方案
[单片机]
ARM<font color='red'>嵌入式系统</font>的ISP设计
嵌入式系统中的USB总线接口电路图
  详细阐述了一种用于嵌入式系统中的USB总线接口电路,该电路是基于USB专用芯片CH375实现的,并给出了系统硬件实现和应用程序。实验结果表明,该电路具有成本低、可靠性高等特点,可方便地集成到各种嵌入式系统中。    接口电路设计 :单片机与CH375芯片的连接方式有串行接口和并行接口两种,串行接口连接方式虽然电路连接简单,不用扩展使用外部地址空间,但其要遵循一定的通信协议,软件设计较为复杂,并且传输速度较并行接口的传输速度要慢。对于大多数嵌入式系统应用,因串口资源较少,而且扩展外部地址空间技术非常成熟,故本接口电路采取了并口连接方式。其电路原理图如图2所示。      图2 接口电路图   图2中的X8为USB
[嵌入式]
VERTIGO (IST 033709)嵌入式系统设计验证平台
第六期研究框架计划中的一个战略目标研究项目 – 优先级2,信息社会科技项目 中国,2007年2月1日 – 代号为VERTIGO(嵌入式系统设计验证平台)的战略目标研究项目致力于确保欧洲电子工业在嵌入式系统领域继续保持竞争优势。该项目是由欧盟委员会在欧盟第六期研究框架计划的信息社会科技(IST)领域内发起的,该项目整合了意法半导体、Aerielogic、TransEDA以及四所欧洲大学的优势互补性专业技术;意法半导体是世界最大的半导体制造商之一,并是系统芯片(SoC)技术的领导者,Aerielogic和TransEDA是设计验证工具的专业厂商;四所大学分别是Link pings (瑞典), Southampton (英国),
[焦点新闻]
嵌入式系统在大射电望远镜5米模型上悬索控制中的应用
摘要:介绍了ARM9和嵌入式实时操作系统μC/OS-II在大射电望远镜5米模型上悬索控制中的应用。介绍了基于ARM9处理器(Atmel公司的AT91RM9200)的触摸屏、LCD等电路的设计。分析了用AT91RM9200产生6路独立的PWM信号的方法。给出了在嵌入式实时操作系统μC/OS-II下的多任务应用软件的设计实例,并成功实现了六轴联动。   关键词:ARM9 μC/OS(MicroC/OS) RTOS 六轴联动 “大射电望远镜FAST(Five hundred meter Aperture Spherical Telescope)预研究”是中国科学院知识创新设计方案 。通过六根悬索驱动馈源舱完成馈源的大范围跟踪,保证馈
[嵌入式]
AMD 以全新第二代 Versal 系列器件扩展领先自适应 SoC 产品组合
AMD 以全新第二代 Versal 系列器件扩展领先自适应 SoC 产品组合,为 AI 驱动型嵌入式系统提供端到端加速 — 第二代 Versal 系列产品组合中首批器件借助下一代 AI 引擎将每瓦 TOPS 提升至高 3 倍,同时将基于 CPU 的标量算力较之第一代提升至高 10 倍 — — 斯巴鲁位列首批宣布计划部署第二代 Versal AI Edge 系列的客户之中,为下一代EyeSight ADAS 视觉系统提供支持 — 2024 年 4 月 9 日,德国纽伦堡(国际嵌入式展)——AMD(超威,纳斯达克股票代码:AMD)今日宣布扩展 AMD Versal™ 自适应片上系统( SoC )产品组合,推出全新第二代 V
[网络通信]
AMD 以全新第二代 Versal 系列器件扩展领先自适应 SoC 产品组合
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved