引言
键盘是智能化测控系统主要的信息输入方式,是实现人机对话的重要途径,因此如何有效地控制键盘并为系统服务是每个设计者需要切实考虑的问题。
嵌入式系统键盘软件设计存在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的作用,即静态变量会被分配一个内存固定、每次操作的值不会丢失、却又被函数私有处理的类似全局变量的变量。
结语
本文针对实时应用的嵌入式系统中智能键盘软件设计的软件去抖动问题、等待按键抬起问题和连击处理问题,给出基于查询结构的软件解决方案。该方案不但能够满足系统的实时性要求,而且软件直接调用,大大降低了系统开发的难度。
嵌入式系统智能键盘的软件设计
- 嵌入式系统(128115)
- 智能键盘(9059)
相关推荐
嵌入式系统智能键盘软件设计有什么问题?
键盘是智能化测控系统主要的信息输入方式,是实现人机对话的重要途径,因此如何有效地控制键盘并为系统服务是每个设计者需要切实考虑的问题。
2019-09-26 06:48:19
嵌入式系统键盘软件设计存在3方面问题
键盘是智能化测控系统主要的信息输入方式,是实现人机对话的重要途径,因此如何有效地控制键盘并为系统服务是每个设计者需要切实考虑的问题。嵌入式系统键盘软件设计存在3方面问题:软件去抖动、等待按键抬起和连击处理。
2019-07-25 06:07:32
嵌入式系统和智能家用电器
单片机最早是以嵌入式微控制器(Embedded Microcontroller)的面貌出现的。在嵌入式系统中,它是最重要也是应用最多的智能核心器件。无论在交通、通讯、工业、仪器、医疗等领域,都有大量
2019-07-03 08:15:26
嵌入式系统开源软件的过去和未来
这片领域,开始是智能手机、MID,到现在的上网本(netbook),还有未来的智能本(一种称为smartbook,尺寸更小、更轻便的上网本)。开源软件也在慢慢地向嵌入式系统靠拢。在国内,嵌入式系统行业已经形成了ARM+Linux的模式。
2019-07-23 06:49:02
嵌入式系统是如何使用的
;智能"。嵌入式系统不是像台式电脑、服务器和其他类似的计算领域那样由独立的部件组成,而是被封闭在产品中,包括完整的硬件和软件。Parasoft是一家专门提供软件测试解决方案的公司,帮助企业打造
2021-08-31 07:30:06
嵌入式系统智键盘软件设计问题解决方案
系统键盘软件设计存在3方面问题:软件去抖动、等待按键抬起和连击处理。1嵌入式系统键盘软件设计的3个问题1.1软件去抖动问题一次完整按键过程的时序波形如图1所示。当按键未被按下时,单片机端口输入为通过
2019-06-21 07:32:55
嵌入式系统的应用范围有哪些
外围设备等)。从这些应用可以看出, 要完成一个以MCU为核心的嵌入式系统应用产品设计,需要硬件、软件及行业领域相关知识。硬件主要有MCU的硬件最小系统、输入/输出外围电路、人机接口 设计。软件设计有固...
2021-10-27 06:06:37
嵌入式系统的开源软件发展如何?
Smart-book,尺寸更小、更轻便的上网本)。开源软件也在慢慢地向嵌入式系统靠拢。在国内,嵌入式系统行业已经形成了ARM+Linux的模式。
2019-09-27 07:51:58
嵌入式系统软件开发环境
嵌入式系统的概念嵌入式系统的基本架构嵌入式操作系统的基本组成和分类嵌入式数据库管理嵌入式网络嵌入式系统设计的核心技术嵌入式系统软件的设计流程嵌入式软件设计模型嵌入式系统软件开发环境1.嵌入式系统
2021-11-08 08:37:48
嵌入式系统软件设计中的数据结构].(陆玲,周航慈)
本帖最后由 lee_st 于 2018-2-21 17:01 编辑
嵌入式系统软件设计中的数据结构].(陆玲,周航慈)
2018-02-21 11:57:51
嵌入式系统软件设计的原则是什么
嵌入式系统软件设计的原则1、基本原则是“物尽其用”,嵌入式系统的硬件和软件都必须高效率地设计,去除冗杂 还应尽可能采用高效率的设计方法,标准化开发方法和开发流程 嵌入式系统一般由下面几个模块组成:...
2021-12-24 06:29:05
嵌入式系统软件设计资料分享
1、摘要在嵌入式系统软件设计的过程中,总是要经常性地操作GPIO口,在ESP32平台中,我们可以使用下面的函数来初始化GPIO口:在图1-1所示的函数的时候,用到了一个结构体:如图1-2所示,在该
2022-02-08 06:56:01
嵌入式软件代码保护系统是由什么构成的?
嵌入式产品由于其独特的稳定性、低廉的成本优势以及优良的可移植性, 已经在互联网、科学研究、军事技术、工业控制、通讯以及人们的日常生活中得到了广泛的应用。在嵌入式系统中, 如何保护核心的嵌入式软件代码
2019-08-15 07:59:15
嵌入式软件设计有什么安全理念?
嵌入式软件应用场合、硬件平台及操作系统的多样性,使嵌入式软件在各种不同条件下可能出现未知、不可预测的状况,即其潜在风险往往比通用PC机的软件要高。由于嵌入式软件应用场合特殊,往往在无人值守的情况下运行,高可靠性和安全性自然成为嵌入式系统的重要指标。
2019-09-03 07:17:47
嵌入式软件设计笔记相关资料分享
嵌入式软件设计—笔记1.1 引言、计算机系统由硬件系统和软件系统所组成,软件系统中最为重要的是操作系统。Linux作为操作系统管理着计算机内所有的硬件资源和软件资源,仿佛是计算机的灵魂。Linux
2021-11-08 08:54:51
嵌入式Linux系统的键盘驱动程序怎么编写?
Linux由于其具有内核强大且稳定,易于扩展和裁减,丰富的硬件支持等诸多优点,在嵌入式系统中得到了广泛的应用。很多嵌入式Linux系统,特别是一些具有与用户强交互的嵌入式系统,往往需要配备一个特殊键盘,此时开发者需要根据实际情况,为自己的特殊键盘编写驱动程序。
2020-03-31 07:08:59
嵌入式Linux矩阵式键盘的工作原理是什么?
随着电子信息技术飞速发展,嵌入式系统构成的各种设备得到了广泛的应用, 嵌入式Linux是一种开放源码、 软实时、 多任务的操作系统,是开发嵌入式产品的优秀操作系统平台,其中键盘是人机界面中人类监控
2019-10-31 07:51:16
嵌入式实时操作系统如何简化应用软件的设计
在嵌入式领域中,嵌入式实时操作系统(RTOS)正得到越来越广泛的应用。采用嵌入式实时操作系统可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。内存资源作为嵌入式系统中极为重要的资源之一,其管理机制历来是嵌入式系统设计的重点和难点。
2020-11-25 06:48:44
嵌入式应用软件设计方法
第十章 嵌入式应用软件设计方法请分析前后台软件结构是否提供优先级服务能力。没有。假设设备A2的中断优先级高于设备A1的,且在后台程序处理A3事件时,事件A1、A2终端先后到来,A1中断程序未完成时被
2021-12-22 07:33:06
嵌入式环境下软件设计的特点是什么
详见微信公众号,二进制人生。目录:嵌入式环境下软件设计的特点设计目标设计思路多进程解耦嵌入式环境下软件设计的特点要谈嵌入式的软件架构,首先必须了解嵌入式软件设计的特点。下面的这一段摘自http
2021-11-09 06:31:11
嵌入式硬件与软件区别!
软件的开发,若不全面考虑高功能软件对底 层硬件的可能调用,也会使封装或参数设计得不合理或不完备,导致高层功能软件调用困难。 由此可以看出,若把嵌入式系统的开发孤立地分为硬件设计、底层硬件驱动 软件设计
2017-07-05 09:57:48
嵌入式组态软件系统应用举例
操作系统、控制与应用软件开发来实现各种自动化处理任务的电子设备或装置。 嵌入式系统的主要作用是实时控制、监视、管理移动计算机、数据处理等,或者辅助其它设备运转,完成各种自动化处理的任务。嵌入式系统以
2019-06-25 08:25:11
嵌入式非编码矩阵键盘怎么实现?
随着电子信息技术的飞速发展,信息家电和各式各样的移动终端得到越来越广泛的应用。在这些人机交互(HMI)较频繁的嵌入式系统中,键盘是一种应用昀为广泛的输入设备。由于嵌入式系统具有功耗低、体积小、专用性强等特点,因此嵌入式键盘常常要求具有特殊的工作方式和特定的驱动设计。
2019-08-22 08:00:05
智能交通中的嵌入式系统
现象,建立现代化的交通指挥控制系统是非常必要的。从某种意义上来说,交通运输业及其管理方式是一个城市、一个地区甚至于一个国家经济水平的一个缩影。从表面上看,智能交通系统与嵌入式系统产品似乎没有什么必然
2019-06-24 08:19:16
DIY分享:嵌入式导航系统硬件+软件设计教程
特点。模块与 S3C2440A 接口电路如图 2 所示。其中,RX_GPS,RX_GPS 接入 UART 端。3 嵌入式导航系统软件设计该系统软件由嵌入式系统软件(Win CE 5.0)和应用软件
2020-02-12 08:00:00
SPB嵌入式音频处理系统该怎么设计?
的软件构架.SPB中的软件IP模块可以屏蔽底层细节,为FPGA嵌入式设计的快速开发提供便利,提高研发效率.介绍了基于SPB的FPGA嵌入式设计关键技术,并在智能开发平台NanoBoard 3000上实现了基于SPB的嵌入式音频处理系统设计.
2019-09-18 06:09:18
Windows CE在嵌入式工业控制系统要满足什么要求?
嵌入式系统(Embedded System)是指有特定功能或用途的计算机硬、软件的集合体,分为嵌入式软件系统和嵌入式硬件系统。在智能控制设备、便携式智能仪器等应用场合,出于对产品体积、成本等诸因素
2019-11-11 06:27:36
【下载】《嵌入式系统软件设计中的数据结构》
`编辑推荐 《嵌入式系统软件设计中的数据结构》可作为从事嵌入式系统软件设计的电子技术人员自学"数据结构"的教材,也可供高等院校电子技术类专业本科生、研究生作为
2017-11-30 17:46:03
什么是嵌入式软件
概述:什么是嵌入式软件?与传统软件不同,嵌入式软件需要将软件分析、设计、编码后烧录至硬件环境中才能实现所对应功能,随着智能应用的发展,越来越多的嵌入式产品走进大众视野,常用的路由器、交换机和家电
2021-10-28 08:45:05
公司招聘嵌入式软件开发,求推荐!
软件设计熟悉PCIe者优先[size=13.3333330154419px]开发过产品级嵌入式软件熟悉软件产品开发 测试流程[size=13.3333330154419px]熟悉SoC软硬件协同设计硬件
2016-09-07 14:51:59
决定嵌入式系统软件架构的因素和架构的影响
嵌入式系统软件架构设计目录1.前言42.决定架构的因素和架构的影响42.1.常见的误解52.1.1.小型的系统不需要架构52.1.2.敏捷开发不需要架构73.嵌入式环境下软件设计的特点73.1.
2021-11-08 06:54:50
分布式嵌入式系统软件升级有什么困难?
嵌入式系统具有智能化程度高、体积小、可靠性高、实时性强等诸多优点,已经越来越多地应用于消费电子、工业控制、汽车电子等各个行业。往往一个大的系统又由许多小的嵌入式系统共同构成,它们之间通过相互通信协同
2019-08-23 07:12:23
基于嵌入式Linux系统的键盘驱动该怎么设计?
随着微处理器技术的不断发展和数字化产品的普及,嵌入式系统的研究开发逐渐成为热点,Linux也以其开源、稳定、可裁剪的优势成为嵌入式操作系统的主流。在众多的嵌入式系统中,键盘成为一种应用最为广泛的输入
2019-08-26 07:33:59
基于嵌入式WEB的网络视频监控系统该如何去设计?
基于嵌入式WEB技术的网络视频监控系统特征及原理是什么?基于嵌入式WEB技术的网络视频监控系统硬件设计基于嵌入式WEB技术的网络视频监控系统软件设计
2021-06-02 07:15:51
基于ARM嵌入式系统的人机界面组态软件设计方案
基于ARM嵌入式系统的人机界面组态软件设计方案本文介绍基于ARM嵌入式系统的人机界面组态软件设计方案,嵌入式系统具有RS232,RS485串口,单片机TTL电平串口,I2C通讯接口,以太网接口
2017-10-14 14:59:14
基于ARM嵌入式系统的人机界面组态软件设计方案
本文介绍基于ARM嵌入式系统的人机界面组态软件设计方案,嵌入式系统具有RS232,RS485串口,单片机TTL电平串口,I2C通讯接口,以太网接口,无线通讯,U盘存储,语音播放等功能。可以配套
2016-08-19 09:46:20
基于ARM嵌入式系统的人机界面组态软件设计方案
本文介绍基于ARM嵌入式系统的人机界面组态软件设计方案,嵌入式系统具有RS232,RS485串口,单片机TTL电平串口,I2C通讯接口,以太网接口,无线通讯,U盘存储,语音播放等功能。可以配套
2016-09-18 15:45:39
基于QT的嵌入式linux图形应用软件设计
对嵌入式数据库或图形软件开发有兴趣,可以进一步学习嵌入式linux数据库开发或基于 QT的嵌入式linux图形应用软件设计。...
2021-11-05 08:11:52
基于SPB怎么实现嵌入式音频处理系统设计?
的软件构架。SPB中的软件IP模块可以屏蔽底层细节,为FPGA嵌入式设计的快速开发提供便利,提高研发效率。介绍了基于SPB的FPGA嵌入式设计关键技术,并在智能开发平台NanoBoard 3000上实现了基于SPB的嵌入式音频处理系统设计。
2020-03-11 07:12:23
如何对嵌入式软件进行覆盖测试?
嵌入式软件的覆盖测试原理是什么?嵌入式实时操作系统的覆盖测试工具是什么?Logiscope在嵌入式操作系统DeltaCORE测试中的应用是什么?
2021-05-13 07:30:16
怎么实现基于RapidIO的双主机节点嵌入式系统互联的设计?
本文讨论了一种基于RapidIO的具有双主机节点的嵌入式系统互联设计,给出系统设计方案及驱动软件设计,并在具体应用环境中对设计方案进行了系统验证。
2021-05-24 06:24:37
掌握嵌入式系统软件设计方法
实验目的(1)掌握嵌入式系统软件设计方法,培养分析问题、解决问题、应用知识的能力和创新精神,全面提高综合素质。(2)熟悉嵌入式Linux开发环境,学会基于UP-CUP6410-II型平台的Linux
2021-11-09 09:05:20
求一种基于μC/OS-II的嵌入式构件系统设计
本文尝试将构件化软件设计思想引入嵌入式软件设计中,提出了一种适用于嵌入式软件的基于构件的软件体系结构,并且在常用输入设备键盘的应用实践中,验证了此体系结构的可行性。
2021-04-27 07:02:28
诚聘嵌入式软件设计师
猎头职位:嵌入式软件设计师【成都】岗位职责:1.负责燃气类产品的嵌入式开发及调试;2.参与产品开发方案的设计;3.协助硬件设计师完成产品硬件设计;4.负责项目研发过程中的技术文档编写及归档;5.参与
2017-03-13 10:29:11
采用构件技术实现嵌入式系统复用软件设计
应用软件设计时的集成和调试。为了方便软件构件的管理,可以将系统级和应用级的软件构件库综合成一个功能完备的软件构件库。它包括从嵌入式控制系统的系统层、支撑层和应用层所需的一切软件构件,因而具有功能的完整性[1
2019-05-07 07:00:02
基于ARM的嵌入式系统软件设计
嵌入式软件的启动代码嵌入式软件开发关键技术嵌入式实时操作系统程序的链接定位软件调试技术http://“ARM”软件设计基础“ARM”软件调试与运行启动代
2006-03-25 15:03:06
203
![](https://skin.elecfans.com/images/2021-soft/load.png)
嵌入式系统软件设计中的数据结构
根据嵌入式系统软件设计需要的“数据结构”知识编写而成。书中基本内容有:常用线性数据结构在嵌入式系统中的实现和相关算法;树和图在嵌入式系统中的实现和相关算法
2009-03-28 12:30:54
294
![](https://skin.elecfans.com/images/2021-soft/load.png)
嵌入式系统高可用性应用软件设计Strategies of I
在简单阐述了嵌入式系统特点的基础上,本文介绍了嵌入式系统高可用性应用软件设计的两种策略:自启动过程和主备用方式。详细讨论了两种策略实现方法。结合自行开发的C
2009-05-31 17:00:55
21
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于嵌入式的脑卒中康复仪的软件设计
本文介绍一种新型嵌入式脑卒中康复治疗仪系统的软件设计。以Qt/Embedded为核心实现治疗仪的软件设计,利用Qt/Embedded的多线程技术来实现肌电信号的采集、实时描绘肌电信号以及
2009-08-14 09:30:28
28
![](https://skin.elecfans.com/images/2021-soft/load.png)
嵌入式软件在计算机软件设计中应用
文章主要是在计算机软件设计中应用嵌入式实时软件,满足人们对计算机高性能的需求,不仅仅分析了嵌入式的软件系统结构,同时也实现嵌入式实时软件的动态性分配过程,体现指令执行的功能特点,并体现独特性的缓存
2017-11-01 15:27:33
14
![](https://skin.elecfans.com/images/2021-soft/load.png)
评论