当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]嵌入式系统智能键盘的软件设计

引言

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

嵌入式系统键盘软件设计存在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体感控制器替代传统的人机交互方式,采集手部数据,将识别到的手势动作经过计算机分析处理后,通过无线传输的方式给开发板...

关键字: 人机交互 嵌入式系统 机械手臂

嵌入式教程

6897 篇文章

关注

发布文章

编辑精选

技术子站

关闭