CN103677282A - 一种基于堆栈的去除键抖动的软件实现方法 - Google Patents
一种基于堆栈的去除键抖动的软件实现方法 Download PDFInfo
- Publication number
- CN103677282A CN103677282A CN201210359952.3A CN201210359952A CN103677282A CN 103677282 A CN103677282 A CN 103677282A CN 201210359952 A CN201210359952 A CN 201210359952A CN 103677282 A CN103677282 A CN 103677282A
- Authority
- CN
- China
- Prior art keywords
- data
- storehouse
- agreement
- implementation method
- equipment
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Communication Control (AREA)
- Storage Device Security (AREA)
Abstract
本发明属于光电产品应用技术领域,具体涉及一种基于堆栈的去除键抖动的软件实现方法。包括以下步骤:(1)打开设备与DSP连接的串口,设置设备主板与DSP两端的串口参数一致;分配读取串口数据的缓冲区;建立堆栈组,清空堆栈组;(2)循环监听按键的操作;(3)按键操作产生的数据,由DSP获取并通过串口发送到设备,存放到设备的临时数据缓冲区中;依次读取缓冲区中的数据;(4)设定一个时间阈值,每隔一个时间阈值,扫描一次数据缓冲区;(5)根据协议中规定的长度读取堆栈组中的每个堆栈栈顶相应数目的元素进行处理;(6)系统退出程序时,进行下一步骤;否则,重复进行步骤(2)~步骤(5);(7)关闭串口,清空堆栈组,释放为接收数据分配的内存资源。
Description
技术领域
本发明属于光电产品应用技术领域,具体涉及一种基于堆栈的去除键抖动的软件实现方法。
背景技术
通过按键实现人机交互或控制功能是数字电路设计中经常遇到的一种方式。因为按键都是机械开关结构,由于机械触点的弹性及电压突跳等原因,在触点闭合和断开的瞬间会出现电压抖动,导致在按键的初始状态和终止状态之间会产生一个或多个中间状态,如果不加处理,会产生意想不到的后果,尤其是在需要精确控制的地方。去除按键抖动的软件方法有延迟法和抖动法。延迟法需要知道按键抖动的时间长短,扫描时间设置不当会导致等待时间过长或漏掉数据;采样法由于对噪声的不敏感,很容易出现错误。
因此,亟需一种基于堆栈的去除键抖动的实现方法,在获取按键的信号后,通过利用堆栈数据结构的后入先出特性,将键抖动产生的中间状态去除,从而达到精确控制的目的。
发明内容
本发明要解决的技术问题是提供一种基于堆栈的去除键抖动的实现方法,在获取按键的信号后,通过利用堆栈数据结构的后入先出特性,将键抖动产生的中间状态去除,从而达到精确控制的目的。
为了实现这一目的,本发明采取的技术方案是:
一种基于堆栈的去除键抖动的软件实现方法,包括以下步骤:
(1)打开设备与DSP(数字信号处理器)连接的串口,设置设备主板与DSP两端的以下串口参数一致:波特率、数据位数、奇偶校验、停止位数;
分配读取串口数据的缓冲区;
建立堆栈组以同时获取N个按键操作产生的数据,N≥1;
堆栈组的长度为通信协议的条数;
清空堆栈组;
(2)循环监听按键的操作;
(3)按键操作产生的数据,由DSP获取并通过串口发送到设备,存放到设备的临时数据缓冲区中;
同步控制对象,将读取操作放在同步控制对象限制的范围内以防止数据缓冲区发生读取和写入引起的冲突;
依次读取缓冲区中的数据,依照DSP和设备的通信协议,根据标识位将协议规定长度的数据压入到堆栈组的相应索引位置的堆栈中;
控制每条协议的标识位彼此不同,且与协议中的其它信息不同;
(4)设定一个时间阈值,每隔一个时间阈值,扫描一次数据缓冲区;
在一个时间阈值内,当数据缓冲区中持续有数据到来时,按键操作产生的信号仍在发送,进行步骤(3);
在一个时间阈值内,数据缓冲区中没有数据到来,按键操作产生的信号已经全部获取,进行下一步骤;
(5)根据协议中规定的长度读取堆栈组中的每个堆栈栈顶相应数目的元素进行处理;
步骤(5)中,采取如下措施保证数据的正确性:①在读取数据前,通过对比数据长度对堆栈组中的每个堆栈中的数据进行判断,以确定读取到协议的完整性;②在取得按照协议规定长度的数据后,校验数据的头部、尾部是否与协议规定的相同,数据的校验和是否与校验位相同;
分析数据以保证数据的正确性;然后对数据行解析,进行系统规定的操作,同时清空堆栈组;
(6)系统退出程序时,进行下一步骤;
否则,重复进行步骤(2)~步骤(5);
(7)关闭串口,清空堆栈组,释放为接收数据分配的内存资源。
进一步的,如上所述的一种基于堆栈的去除键抖动的实现方法,其中:步骤(3)中,同步控制对象采用以下方式中的一种或多种:临界区、信号量、事件。
进一步的,如上所述的一种基于堆栈的去除键抖动的实现方法,其中:步骤(3)中,各条协议的长度相同。
进一步的,如上所述的一种基于堆栈的去除键抖动的实现方法,其中:步骤(4)中,时间阈值为10~30ms。
进一步的,如上所述的一种基于堆栈的去除键抖动的实现方法,其中:步骤(5)中,采取如下措施保证数据的正确性:①在读取数据前,通过对比数据长度对堆栈组中的每个堆栈中的数据进行判断,以确定读取到协议的完整性;②在取得按照协议规定长度的数据后,校验数据的头部、尾部是否与协议规定的相同,数据的校验和是否与校验位相同。
采用本发明技术方案的一种基于堆栈的去除键抖动的软件实现方法,在切换具有多个状态的开关时,通过串口调试助手可以看到会有多个中间状态。利用该方法,可以正确获取最后一个状态信息,即最终状态。
附图说明
图1是本发明一种基于堆栈的去除键抖动的软件实现方法的流程示意图。
具体实施方式
下面结合附图对本发明技术方案进行进一步详细说明。
按键操作后,DSP通过串口和设备进行通信。考虑到按键操作后,无论从初始状态经过多少个中间过程,都会停在终止状态。利用堆栈的后入先出特性,将从串口接收的数据依次压入堆栈中,这样初始状态压入栈底,中间状态依次压入栈中,最终状态会位于栈顶。然后取出栈顶的数据,即为最终状态数据。最后清空整个堆栈,用于下次按键操作的数据处理。
如图1所示,本发明一种基于堆栈的去除键抖动的软件实现方法的具体步骤包括:
(1)打开设备与DSP连接的串口,设置设备主板与DSP两端的以下串口参数一致:波特率、数据位数、奇偶校验、停止位数;
分配读取串口数据的缓冲区;
建立堆栈组以同时获取N个按键操作产生的数据,N≥1;
堆栈组的长度为通信协议的条数;
清空堆栈组;
(2)循环监听按键的操作;
(3)按键操作产生的数据,由DSP获取并通过串口发送到设备,存放到设备的临时数据缓冲区中;
采用以下方式中的一种或多种:临界区、信号量、事件来同步控制对象,将读取操作放在同步控制对象限制的范围内以防止数据缓冲区发生读取和写入引起的冲突;
依次读取缓冲区中的数据,依照DSP和设备的通信协议,根据标识位将协议规定长度的数据压入到堆栈组的相应索引位置的堆栈中;
控制每条协议的标识位彼此不同,且与协议中的其它信息不同;
此具体实施例中,各条协议的长度相同。
(4)设定一个时间阈值,每隔一个时间阈值,扫描一次数据缓冲区;
在一个时间阈值内,当数据缓冲区中持续有数据到来时,按键操作产生的信号仍在发送,进行步骤(3);
在一个时间阈值内,数据缓冲区中没有数据到来,按键操作产生的信号已经全部获取,进行下一步骤;
此具体实施例中,时间阈值为10~30ms。
(5)根据协议中规定的长度读取堆栈组中的每个堆栈栈顶相应数目的元素进行处理;
步骤(5)中,采取如下措施保证数据的正确性:①在读取数据前,通过对比数据长度对堆栈组中的每个堆栈中的数据进行判断,以确定读取到协议的完整性;②在取得按照协议规定长度的数据后,校验数据的头部、尾部是否与协议规定的相同,数据的校验和是否与校验位相同;
分析数据以保证数据的正确性;然后对数据行解析,进行系统规定的操作,同时清空堆栈组;
(6)系统退出程序时,进行下一步骤;
否则,重复进行步骤(2)~步骤(5);
(7)关闭串口,清空堆栈组,释放为接收数据分配的内存资源。
Claims (5)
1.一种基于堆栈的去除键抖动的软件实现方法,其特征在于:包括以下步骤:
(1)打开设备与DSP连接的串口,设置设备主板与DSP两端的以下串口参数一致:波特率、数据位数、奇偶校验、停止位数;
分配读取串口数据的缓冲区;
建立堆栈组以同时获取N个按键操作产生的数据,N≥1;
堆栈组的长度为通信协议的条数;
清空堆栈组;
(2)循环监听按键的操作;
(3)按键操作产生的数据,由DSP获取并通过串口发送到设备,存放到设备的临时数据缓冲区中;
同步控制对象,将读取操作放在同步控制对象限制的范围内以防止数据缓冲区发生读取和写入引起的冲突;
依次读取缓冲区中的数据,依照DSP和设备的通信协议,根据标识位将协议规定长度的数据压入到堆栈组的相应索引位置的堆栈中;
控制每条协议的标识位彼此不同,且与协议中的其它信息不同;
(4)设定一个时间阈值,每隔一个时间阈值,扫描一次数据缓冲区;
在一个时间阈值内,当数据缓冲区中持续有数据到来时,按键操作产生的信号仍在发送,进行步骤(3);
在一个时间阈值内,数据缓冲区中没有数据到来,按键操作产生的信号已经全部获取,进行下一步骤;
(5)根据协议中规定的长度读取堆栈组中的每个堆栈栈顶相应数目的元素进行处理;
分析数据以保证数据的正确性;然后对数据行解析,进行系统规定的操作,同时清空堆栈组;
(6)系统退出程序时,进行下一步骤;
否则,重复进行步骤(2)~步骤(5);
(7)关闭串口,清空堆栈组,释放为接收数据分配的内存资源。
2.如权利要求1所述的一种基于堆栈的去除键抖动的软件实现方法,其特征在于:步骤(3)中,同步控制对象采用以下方式中的一种或多种:临界区、信号量、事件。
3.如权利要求1所述的一种基于堆栈的去除键抖动的软件实现方法,其特征在于:步骤(3)中,各条协议的长度相同。
4.如权利要求1所述的一种基于堆栈的去除键抖动的软件实现方法,其特征在于:步骤(4)中,时间阈值为10~30ms。
5.如权利要求1所述的一种基于堆栈的去除键抖动的软件实现方法,其特征在于:步骤(5)中,采取如下措施保证数据的正确性:①在读取数据前,通过对比数据长度对堆栈组中的每个堆栈中的数据进行判断,以确定读取到协议的完整性;②在取得按照协议规定长度的数据后,校验数据的头部、尾部是否与协议规定的相同,数据的校验和是否与校验位相同。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210359952.3A CN103677282B (zh) | 2012-09-24 | 2012-09-24 | 一种基于堆栈的去除键抖动的软件实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210359952.3A CN103677282B (zh) | 2012-09-24 | 2012-09-24 | 一种基于堆栈的去除键抖动的软件实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103677282A true CN103677282A (zh) | 2014-03-26 |
CN103677282B CN103677282B (zh) | 2016-08-31 |
Family
ID=50315090
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210359952.3A Active CN103677282B (zh) | 2012-09-24 | 2012-09-24 | 一种基于堆栈的去除键抖动的软件实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103677282B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106773974A (zh) * | 2016-12-27 | 2017-05-31 | 河南理工大学 | 一种抖动开关信号的处理方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5420912A (en) * | 1993-02-27 | 1995-05-30 | Alcatel N.V. | Telephone having portable voice control module for playing back speech or performing a hands-free telephone function |
CN1818715A (zh) * | 2006-03-06 | 2006-08-16 | 中南大学 | 信号放大倍数控制电路 |
CN1953334A (zh) * | 2006-11-17 | 2007-04-25 | 北京中星微电子有限公司 | 一种扫描键盘的方法和系统 |
-
2012
- 2012-09-24 CN CN201210359952.3A patent/CN103677282B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5420912A (en) * | 1993-02-27 | 1995-05-30 | Alcatel N.V. | Telephone having portable voice control module for playing back speech or performing a hands-free telephone function |
CN1818715A (zh) * | 2006-03-06 | 2006-08-16 | 中南大学 | 信号放大倍数控制电路 |
CN1953334A (zh) * | 2006-11-17 | 2007-04-25 | 北京中星微电子有限公司 | 一种扫描键盘的方法和系统 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106773974A (zh) * | 2016-12-27 | 2017-05-31 | 河南理工大学 | 一种抖动开关信号的处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103677282B (zh) | 2016-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104385787B (zh) | 一种激光打标机的控制方法及激光打标机 | |
CN202870808U (zh) | 一种spi串口模块的fpga实现装置 | |
CN105676023A (zh) | 故障录波数据的记录方法和系统 | |
CN106100939B (zh) | 网络设备启动时间测试方法及测试控制台 | |
CN103699509A (zh) | 基于定时器录波的串口通讯方法 | |
CN109787867B (zh) | 区块生成方法、装置、计算机设备和存储介质 | |
CN102981116A (zh) | 一种验证专用集成电路的装置和方法 | |
CN104038316A (zh) | 空间相机高可靠高时效异步串行通讯方法 | |
CN111130917B (zh) | 线路测试的方法、装置及系统 | |
CN103677282A (zh) | 一种基于堆栈的去除键抖动的软件实现方法 | |
CN103107862A (zh) | 逻辑器件及其mdio数据发送方法 | |
CN106708761A (zh) | 一种业务报文的处理方法及装置 | |
CN104954133A (zh) | 证书写入校验方法及装置 | |
CN108243323B (zh) | 一种软件升级方法及装置 | |
CN103647729A (zh) | 一种基于令牌桶的延迟请求处理方法及装置 | |
CN106487421A (zh) | 电力线载波通信测试系统及其测试方法 | |
CN104731992B (zh) | 配电自动化建模方法及装置 | |
CN110727448B (zh) | 用于充电桩的ota空中升级方法 | |
CN101902436A (zh) | 板间通信方法、装置及系统 | |
CN102124673B (zh) | 用于测试通信电路的装置和方法 | |
US9838229B2 (en) | Method for verifying the functionality of a digital circuit | |
CN104809038B (zh) | 一种fifo异常处理方法及装置 | |
CN101303709B (zh) | 可编程逻辑器件的仿真控制方法及系统 | |
CN104267925B (zh) | 弹性先进先出存储器及存储方法 | |
CN104572537A (zh) | 一种基于fpga的容错主从同步串行通讯系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |