[导读]嵌入式系统智能键盘的软件设计
引言
键盘是智能化测控系统主要的信息输入方式,是实现人机对话的重要途径,因此如何有效地控制键盘并为系统服务是每个设计者需要切实考虑的问题。
嵌入式系统键盘软件设计存在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为短击/长击的示意图。
[!--empirenews.page--]软件流程如下:
①定义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的作用,即静态变量会被分配一个内存固定、每次操作的值不会丢失、却又被函数私有处理的类似全局变量的变量。
结语
本文针对实时应用的嵌入式系统中智能键盘软件设计的软件去抖动问题、等待按键抬起问题和连击处理问题,给出基于查询结构的软件解决方案。该方案不但能够满足系统的实时性要求,而且软件直接调用,大大降低了系统开发的难度。
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
Lua RTOS 是一个实时操作系统,设计在嵌入式系统上运行,对 FLASH 和 RAM 内存的要求最低。目前 Lua RTOS 可用于 ESP32, ESP8266 和 PIC32MZ 平台,并可以轻松移植到其他32位...
关键字:
Lua RTOS
操作系统
嵌入式系统
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UATR,是一种串行、异步、全双工的收发器。全双工的UART支持同时双向通信,是嵌入式系统必不可少的d...
关键字:
异步收发
传输器
嵌入式系统
Flash Memory 是一种非易失性的存储器。在嵌入式系统中通常用于存放系统、应用和数据等。在 PC 系统中,则主要用在固态硬盘以及主板 BIOS 中。
关键字:
Flash
存储器
嵌入式系统
近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。 嵌入式系统一般由嵌入式微处理器、外...
关键字:
嵌入式
嵌入式系统
计算机
深圳2022年8月26日 /美通社/ -- 8月17日 – 深圳,AMD Xilinx举办为期一天的线下技术日活动,在AMD Xilinx主办下宜鼎国际作为合作伙伴的身份被邀...
关键字:
AMD
Xilinx
AGENT
嵌入式系统
单向散列算法,又称hash哈希函数,Hash函数(也称杂凑算法)就是把任意长的输入消息串变化成固定长的输出串的一种函数,该过程是不可逆的。Hash函数可用于数字签名、消息的完整性检测、消息起源的认证检测等。较为常用的方法...
关键字:
嵌入式算法
嵌入式系统
作为消费者,在我们考虑购买电池供电设备时,通常首先要检查的关键指标之一是一次充电可以使用多长时间。电池寿命已成为许多可穿戴设备的重要卖点,但对于越来越多的工业物联网传感器和其他类似应用来说,电池寿命同样也是一个重要的考虑...
关键字:
贸泽电子
嵌入式系统
自俄乌冲突爆发之后,以苹果、戴尔、三星等为代表的科技企业,纷纷暂停了自己在俄罗斯当地的相关业务。在被这些企业断供之后,俄罗斯当地遇到了“以键盘为代表的PC外设出现缺货”的困扰。
关键字:
PC
键盘
英国里士满2022年7月11日 /美通社/ -- 2022年7月11日,高性能电子产品压力传感触控用户界面的领先创新者Peratech公司宣布,其全系列压力传感技术将应用于最新的联想Legion 7i和7(16...
关键字:
联想
键盘
TE
IO
摘要:设计了一种新型的基于LeapMotion体感控制器的仿生机械臂交互控制系统,利用LeapMotion体感控制器替代传统的人机交互方式,采集手部数据,将识别到的手势动作经过计算机分析处理后,通过无线传输的方式给开发板...
关键字:
人机交互
嵌入式系统
机械手臂
上海2022年6月9日 /美通社/ -- 近期,雪碧视觉形象更新换代,以更加简洁清爽的白绿配色酷爽再出发,旋即发起了一场具有里程碑意义的全球营销活动"Heat Happens"(燥不可挡 酷爽以对)。...
关键字:
BSP
APP
大屏
键盘
摘要:在工业领域供配电设计过程中,设计一次接线图时,每台配电柜安装几个供电回路、安装哪些供电回路需要花费较多精力来确定。对此,编制一款软件自动计算各回路断路器宽度,模拟断路器置入配电柜,最终算出总共需要的GGD配电柜数量...
关键字:
GGD配电柜
断路器排列
软件设计
摘要:根据四旋翼飞行器工作原理,以STM32控制器为基础,对四旋翼飞行器飞行控制系统的软硬件设计进行了分析,可有效调整四旋翼飞行器飞行姿态与飞行位置,实现了控制模块与地面站的有效联系。
关键字:
STM32
控制系统
软件设计
虽然嵌入式系统已经有30多年的历史,但是原来一直隐藏在背后的,自从物联网上升为国家战略后,嵌入式系统也从后台走到前台。成为备受瞩目的一部分。作为物联网重要技术的嵌入式系统,嵌入式系统视角有助于深刻、全面理解物联网的本质。...
关键字:
嵌入式系统
物联网
控制逻辑
中国上海—2021年12月—全球领先的嵌入式开发软件工具和服务提供商IAR Systems®日前宣布:其最新发布的IAR Embedded Workbench for Arm® version 9.20已全面支持航顺芯片...
关键字:
IAR Systems
芯片
嵌入式系统
摘 要:在分析了嵌入式系统与专业对应关系的基础上,以设计能力为主线,对嵌入式课程体系进行了探讨,阐述了嵌入 式人才培养的教学改革,实践结果表明,改革后的教学可提高学生的设计能力和创新能力,培养出的学生更适合市场需求。
关键字:
嵌入式系统
课程体系
人才培养
教学改革
摘 要:21世纪的信息化社会已经向传统房屋提出了新的要求,为顺应家庭生活的现代化,出现了智能家居这样一个多 样化网络结构系统。基于ARM开发平台设计的智能家居演示系统,涵盖的主要功能包含智能厨房、智能门禁、智能照明、智能...
关键字:
智能控制
Zigbee
嵌入式系统
智能家居
智能家居网络随着集成技术、通信技术、互操作能力和布线标准的实现而不断改进。它涉及对家庭网络内所有的智能家具、设备和系统的操作、管理以及集成技术的应用。
关键字:
智能家居
嵌入式系统
通信技术
摘 要 :工业生产中,经常需要测量类似单容水箱的液位高度。文中设计了一款简易液位测控系统。系统硬件设计包括单片机最小电路、数据采集模块、光耦隔离与驱动模块、按键与显示模块 ;软件设计包括按键扫描设计、PID 控制设计和...
关键字:
液位
测控系统
PID
硬件设计
软件设计
MSP430F5529
摘 要 :基于物联网的污水监测系统利用传感器、ZigBee 多节点组网、STM32 嵌入式系统、PC 端等通过数据采集、无线通信、数据处理、多终端显示等手段对污水情况进行监控。与有线通信的污水监测系统或人工不定期监测相比...
关键字:
物联网
Zigbee
污水监测
嵌入式系统