CN112073046A - 一种按键触发事件的检测方法、检测装置、终端 - Google Patents
一种按键触发事件的检测方法、检测装置、终端 Download PDFInfo
- Publication number
- CN112073046A CN112073046A CN202010710013.3A CN202010710013A CN112073046A CN 112073046 A CN112073046 A CN 112073046A CN 202010710013 A CN202010710013 A CN 202010710013A CN 112073046 A CN112073046 A CN 112073046A
- Authority
- CN
- China
- Prior art keywords
- level signal
- level
- key
- duration
- edges
- 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.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title abstract description 45
- 230000000630 rising effect Effects 0.000 claims abstract description 117
- 238000000034 method Methods 0.000 claims abstract description 37
- 238000001914 filtration Methods 0.000 claims abstract description 19
- 238000004590 computer program Methods 0.000 claims description 22
- 230000004913 activation Effects 0.000 claims 3
- 238000003825 pressing Methods 0.000 abstract description 2
- 238000012545 processing Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 241000238876 Acari Species 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000001808 coupling effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000003631 expected effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03K—PULSE TECHNIQUE
- H03K17/00—Electronic switching or gating, i.e. not by contact-making and –breaking
- H03K17/94—Electronic switching or gating, i.e. not by contact-making and –breaking characterised by the way in which the control signals are generated
- H03K17/96—Touch switches
- H03K17/9618—Touch switches using a plurality of detectors, e.g. keyboard
Landscapes
- Input From Keyboards Or The Like (AREA)
- Telephone Function (AREA)
Abstract
本申请属于按键检测技术领域,提供了一种按键触发事件的检测方法、检测装置、终端,在电平信号出现上升沿或下降沿时,对电平信号进行延时滤波,然后计算电平信号出现上升沿的次数以及电平信号出现下降沿的次数,并在电平信号每次出现上升沿或下降沿时,从零开始记录电平信号位于高电平状态的持续时间或低电平状态的持续时间,若电平信号出现上升沿的次数大于零,电平信号位于高电平状态的持续时间大于预设高电平持续时间阈值,并且电平信号出现上升沿的次数与电平信号出现下降沿的次数相等,则确认按键存在点击触发事件,从而完成对点击事件的判断,解决了现有的查询式按键事件检测方法存在的处理器运算资源消耗多、按键时间容易丢失的问题。
Description
技术领域
本申请属于按键检测技术领域,尤其涉及一种按键触发事件的检测方法、检测装置、终端。
背景技术
传统的查询式按键事件检测方法是程序每隔预设的查询间隔Δt_check_cycle(10ms级,并且该检测频率会随其他程序运行时间的波动而波动,并非精确的检测频率)就要去查询按键的当前状态是处于低电平还是高电平,且需要连续保持M个Δt_check_cycle周期的低电平才能确认这是一个有效的低电平,同理,连续保持N个Δt_check_cycle周期的高电平才能确认这是一个有效的高电平。一对连续的有效低高电平(或者高低电平,为了方便描述,后续以低高电平进行说明,低则按键按下,高则按键弹起)可初步认为是一个单击事件,如果在Δt_clicks_valid时间内还有更多的有效低高电平连续对出现,则可初步认为是双击、三击或者多击事件。对于按键的长按触发事件,则以出现持续低电平的时间超过时间间隔Δt_longpress_valid即可确认是长按触发事件。
然而,现有的查询式按键事件检测方法需要高频率检测,尤其是在多任务操作***中,容易产生频繁的***调度,存在处理器运算资源消耗多、按键时间容易丢失的问题。
发明内容
本申请实施例提供一种按键触发事件的检测方法、检测装置、终端,可以解决现有的查询式按键事件检测方法存在的处理器运算资源消耗多、按键时间容易丢失的问题。
本申请实施例第一方面提供一种直按键触发事件的检测方法,包括:
在电平信号出现上升沿或下降沿时,对所述电平信号进行延时滤波;其中,所述电平信号用于检测按键触发事件;
计算所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数,并在所述电平信号每次出现上升沿或下降沿时,从零开始记录所述电平信号位于高电平状态的持续时间或低电平状态的持续时间;
判断所述电平信号出现上升沿的次数是否大于零,并判断所述电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值;
若所述电平信号出现上升沿的次数大于零,并且所述电平信号位于高电平状态的持续时间大于预设高电平持续时间阈值,则判断所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数是否相等;
若所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数相等,则确认所述按键存在点击触发事件。
本申请实施例第二方面提供的一种按键触发事件的检测装置,包括:
延时滤波单元,用于在电平信号出现上升沿或下降沿时,对所述电平信号进行延时滤波;其中,所述电平信号用于检测按键触发事件;
计算单元,用于计算所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数,并在所述电平信号每次出现上升沿或下降沿时,从零开始记录所述电平信号位于高电平状态的持续时间或低电平状态的持续时间;
点击判断单元,用于判断所述电平信号出现上升沿的次数是否大于零,并判断所述电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值;若所述电平信号出现上升沿的次数大于零,并且所述电平信号位于高电平状态的持续时间大于预设高电平持续时间阈值,则判断所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数是否相等;若所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数相等,则确认所述按键存在点击触发事件。
本申请实施例第三方面提供一种终端,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
本申请实施例第四方面提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。
第五方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端上运行时,使得终端执行时实现上述方法的步骤。
本申请实施例中,电平信号用于检测按键触发事件,在电平信号出现上升沿或下降沿时,对电平信号进行延时滤波,然后计算电平信号出现上升沿的次数以及电平信号出现下降沿的次数,并在电平信号每次出现上升沿或下降沿时,从零开始记录电平信号位于高电平状态的持续时间或低电平状态的持续时间,判断电平信号出现上升沿的次数是否大于零,并判断电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值,若电平信号出现上升沿的次数大于零,并且电平信号位于高电平状态的持续时间大于预设高电平持续时间阈值,则判断所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数是否相等;若电平信号出现上升沿的次数与电平信号出现下降沿的次数相等,则确认按键存在点击事件,从而完成对点击事件的判断,解决了现有的查询式按键事件检测方法存在的处理器运算资源消耗多、按键时间容易丢失的问题。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种按键触发事件的检测方法的实现流程示意图;
图2是本申请实施例提供的另一种按键触发事件的检测方法的实现流程示意图;
图3为本申请实施例提供的中断式按键事件检测方法的检测示意图;
图4是本申请实施例提供的另一种按键触发事件的检测方法的实现流程示意图;
图5所为本申请实施例提供一种按键触发事件的检测装置的一种结构示意图;
图6所为本申请实施例提供一种按键触发事件的检测装置的另一种结构示意图;
图7是本申请实施例提供的终端的结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了说明本申请的技术方案,下面通过具体实施例来进行说明。
图1为传统的查询式按键事件检测方法的检测示意图,参见图1所示,每隔预设的查询间隔Δt_check_cycle(10ms级,并且该检测频率会随其他程序运行时间的波动而波动,并非精确的检测频率)就要去查询按键的当前状态是处于低电平还是高电平,且需要连续保持M个Δt_check_cycle周期的低电平才能确认这是一个有效的低电平,即T_LOW_VALID<=Δt_low=M*Δt_check_cycle才能确认这是一个有效的低电平。同理,连续保持N个Δt_check_cycle周期的高电平才能确认这是一个有效的高电平,即T_HIGH_VALID<=Δt_high=N*Δt_check_cycle才能确认这是一个有效的高电平。一对连续的有效低高电平(或者高低电平,为了方便描述,后续以低高电平进行说明,低则按键按下,高则按键弹起)可初步认为是一个单击事件,如果在Δt_clicks_valid时间内还有更多的有效低高电平连续对出现,则可初步认为是双击、三击或者多击事件。对于按键的长按触发事件,则以出现持续低电平的时间超过时间间隔Δt_longpress_valid即可确认是长按触发事件。
因此,现有的查询式按键事件检测方法存在以下弊端:1查询式按键事件检测方法中的检测步骤复杂,变量太多,在具体应用中难以理解与维护;2)查询式按键事件检测方法需要高频率(10ms级)检测,特别是在多任务操作***中,会发生频繁的***调度,非常耗费CPU的运算资源;3)查询时间不确定,很容易受到其他程序影响,叠加用户的按下弹起持续时间的不确定,会出现T_LOW_VALID>Δt_low或T_HIGH_VALID>Δt_high或同时发生的情况,容易发生按键丢失事件。
本申请实施例提供一种按键触发事件的检测方法、检测装置、终端,可以对按键触发事件进行检测,检测方法更简单,时间更精确,更容易理解和维护;减少了因不停查询按键状态而带来的CPU资源耗费;同时也提高了按键检测的灵敏度,确保按键事件的不丢失。
图2是本申请实施例提供的一种按键触发事件的检测方法的实现流程示意图,参见图2所示,本实施例中的按键触发事件的检测方法包括步骤10至步骤40。
步骤10,在电平信号出现上升沿或下降沿时,对所述电平信号进行延时滤波;其中,所述电平信号用于检测按键触发事件。
在本实施例中,可以通过终端检测电平信号的上升沿和下降沿,例如,该终端可以为进行按键检测的控制芯片,该控制芯片可以为一个可编程控制芯片,其IO管脚与按键连接,并且支持电平信号的上下边沿中断功能。
图3为本申请实施例提供的中断式按键事件检测方法的检测示意图,参见图3所示,在本实施例中,当电平信号的上下边沿中断时,通过设置一个延时时间段delay,用于过滤按键的抖动。
在一个实施例中,按键抖动的时间随按键的材料工艺不同而不同,该抖动时间一般很小,本实施例的按键抖动时间在200us以内。该延时时间段delay与按键特性相关,例如,在工程实施中,可以根据按键特性去调整到一个合适的delay值,具体的,例如,设置按键特性与延时时间段的映射关系表,每一个按键特性及其特性组合对应一个预设的延时时间段,在进行按键触发事件的检测之前,根据按键特性与延时时间段的映射关系表确定延时时间段delay。
在本实施例中,这个delay时间对按键检测的准确性有很大影响,因为当发生按键抖动时,控制芯片的IO管脚极有可能会在delay时间内产生多次的IO中断,如果delay过小,按键按下一次实际上可能会进入多次IO中断,影响了按键检测的准确性,所以该delay值的调整很关键。
步骤20,计算所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数,并在所述电平信号每次出现上升沿或下降沿时,从零开始记录所述电平信号位于高电平状态的持续时间或低电平状态的持续时间。
在本实施例中,还可以在终端中设置一个定时器,用于在所述电平信号每次出现上升沿或下降沿时,从零开始记录所述电平信号位于高电平状态的持续时间或低电平状态的持续时间,并计算所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数。
当按下或弹起按键时,触发了控制芯片中的IO上下边沿中断,进入了IO上下边沿中断处理流程,在该中断处理流程中,首先进行delay延时滤波,消除外部多次的按键抖动,保证按键按下一次时只进入一次该中断处理流程。接着读取IO管脚的电平,判断是按下则标记为KeyInfo.down++,判断是弹起则标记为KeyInfo.up++,例如,当IO管脚的电平信号位于低电平状态,则判断按键按下,并将该按键按下事件标记为KeyInfo.down++,当IO管脚的电平信号位于高电平状态,则判断按键弹起,并将该按键弹起事件标记为KeyInfo.up++。
在本实施例中,计算所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数,并在所述电平信号每次出现上升沿或下降沿时,从零开始记录所述电平信号位于高电平状态的持续时间或低电平状态的持续时间。具体的,在检测到电平信号出现上升沿或者下降沿时,将定时器中的电平信号位于高电平状态的持续时间KeyInfo.up_timer与电平信号位于低电平状态的持续时间KeyInfo.down_timer清0,即在预设高电平持续时间阈值Δt_clicks_valid或预设低电平持续时间阈值Δt_longpress_valid时间内,如果有按键按下或弹起,则重新计时,暂不判定为超时,因为接着后面可能还有更多的按下弹起,所以也无法确认当前的按键事件的完整性。
进一步的,在一个实施例中,在KeyInfo.up_timer与KeyInfo.down_timer清0后,每隔预设的定时中断时间间隔xms(例如xms=1ms)进入一次的定时器中断处理流程,在定时器中断处理流程中,将定时器中的KeyInfo.up_timer与KeyInfo.down_timer从0开始往上累加自增1,以计算电平信号处于高电平状态或者低电平状态的持续时间。
步骤30,判断所述电平信号出现上升沿的次数是否大于零,并判断所述电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值。
在本实施例中,判断所述电平信号出现上升沿的次数是否大于零,以确定当前的按键触发事件类型,例如,若当前的电平信号上升沿的次数的次数为0,则当前的按键触发事件类型为长按触发事件,若当前的电平信号上升沿的次数大于0,则当前的按键触发事件类型可能为点击触发事件。进一步的,还需要判断电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值,以判断当前的按键事件是否结束,例如,若电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值Δt_clicks_valid,则确定当前的按键事件结束。
步骤40,若所述电平信号出现上升沿的次数大于零,并且所述电平信号位于高电平状态的持续时间大于预设高电平持续时间阈值,则判断所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数是否相等;若所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数相等,则确认所述按键存在点击触发事件。
在本实施例中,若电平信号出现上升沿的次数大于零,且电平信号位于高电平状态的持续时间大于预设高电平持续时间阈值,则判断所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数是否相等,若所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数相等,则确认所述按键存在点击触发事件。
例如,在本实施例中,如果用户期望按键按下的是点击触发事件(clicks事件),则按键一定是经历了至少一个上升沿(KeyInfo.up++)然后处于弹起状态,所以电平信号出现上升沿的次数(KeyInfo.up)应该是大于0的,并且一定是按完后放开手一段时间(电平信号位于高电平状态的持续时间大于预设高电平持续时间阈值Δt_clicks_valid),在这段时间内由于不再发生IO上下边沿中断,所以KeyInfo.up_timer不会进入定时器中断处理流程,只会一直累加时间直到超时,所以超时条件:KeyInfo.up_timer>Δt_clicks_valid一定会发生,并且按下弹起按下再弹起,以此类推,则一定有按下次数等于弹起的次数,即KeyInfo.up(电平信号出现上升沿的次数)=KeyInfo.down(电平信号出现下降沿的次数),并且读IO一定会返回弹起状态,因此,当电平信号出现上升沿的次数大于零,电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值,电平信号出现上升沿的次数与电平信号出现下降沿的次数相等,则最终可以确认这是个点击触发事件。
在一个实施例中,若确认所述按键存在点击触发事件,则所述点击触发事件对应的点击次数为所述电平信号出现上升沿的次数。
在本实施例中,若确定按键存在点击触发事件,则点击次数clicks=KeyInfo.up=KeyInfo.down。
在一个实施例中,在所述确认所述按键存在点击触发事件之后,包括:
将所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数清零。
在本实施例中,在确认所述按键存在点击触发事件之后,将电平信号出现上升沿的次数以及电平信号出现下降沿的次数清零。
为了方便按键事件的统一管理,在程序中可以定义按键长按(longpress)事件为1,其他点击(clicks)事件则补在后面,例如单击则等于2、双击则等于3,以此类推。所以程序最终产生的clicks事件标识等于KeyInfo.key_event=clicks+1,也就是clicks事件标识KeyInfo.key_event=KeyInfo.up+1。clicks事件的检测是在KeyInfo.up>0且KeyInfo.up_timer>Δt_clicks_valid时把KeyInfo.up清0,并且控制芯片的IO管脚的电平信号最终处于高电平状态,而在上述四个条件(KeyInfo.up>0;KeyInfo.up_timer>Δt_clicks_valid;KeyInfo.up=KeyInfo.down;IO管脚的电平信号最终处于高电平状态)都成立的时候才把KeyInfo.down清0,目的是如果确认是发生了clicks事件(点击触发事件),那么就不需要检查按键长按(longpress)事件了。
在一个实施例中,还可以用电平信号的上升沿表示按键按下,电平信号的下降沿表示按键弹起,此时,本实施例中的按键触发事件的检测方法还可以为:
在所述计算所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数,并在所述电平信号每次出现上升沿或下降沿时,从零开始记录所述电平信号位于高电平状态的持续时间或低电平状态的持续时间之后,包括:
若所述电平信号出现下降沿的次数大于零,并且所述所述电平信号位于低电平状态的持续时间大于预设低电平持续时间阈值,则判断所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数是否相等;
若所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数相等,则确认所述按键存在点击触发事件,并且所述点击触发事件对应的点击次数为所述电平信号出现下降沿的次数。
在一个实施例中,参见图4所示,所述判断所述电平信号出现上升沿的次数是否大于零,并判断所述电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值之后,包括步骤50和步骤60。
步骤50,若所述电平信号出现上升沿的次数不大于零,或者,所述电平信号位于高电平状态的持续时间不大于预设高电平持续时间阈值,或者,所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数不相等,则判断所述电平信号出现下降沿的次数是否大于零,以及所述电平信号位于低电平状态的持续时间是否大于预设低电平持续时间阈值。
步骤60,若所述电平信号出现下降沿的次数大于零,并且所述所述电平信号位于低电平状态的持续时间大于预设低电平持续时间阈值,则确认所述按键存在长按触发事件。
在本实施例中,若所述电平信号出现上升沿的次数不大于零,或者,所述电平信号位于高电平状态的持续时间不大于预设高电平持续时间阈值,或者,所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数不相等,则判断所述电平信号出现下降沿的次数是否大于零,以及所述电平信号位于低电平状态的持续时间是否大于预设低电平持续时间阈值,若所述电平信号出现下降沿的次数大于零,并且所述所述电平信号位于低电平状态的持续时间大于预设低电平持续时间阈值,则确认所述按键存在长按触发事件。
具体的,在一个实施例中,如果用户期望按下的是longpress事件,则按键一定是经历了至少一个下降沿(KeyInfo.down++),然后最终处于按下状态,所以电平信号出现下降沿的次数KeyInfo.down应该是大于0的,并且一定是一直按下一段时间,在这段时间内由于不再发生IO上下边沿中断,所以KeyInfo.down_timer是不会被清0的,此时定时器会一直累加时间直到超时,所以超时条件KeyInfo.down_timer>Δt_longpress_valid一定会发生,又由于按键一直按下所以读IO一定会返回按下状态,即控制芯片的IO管脚最终读取的电平信号一定位于低电平状态,当上述三个条件(KeyInfo.down大于0;KeyInfo.down_timer>Δt_longpress_valid;控制芯片的IO管脚最终读取的电平信号位于低电平状态)同时成立时,则可以最终确认这是个长按触发事件,也就是KeyInfo.key_event=1。
在本实施例中,在长按触发事件的检测中,若KeyInfo.down>0且KeyInfo.down_timer>Δt_longpress_valid,则可以将KeyInfo.down清0。
在一个实施例中,若在操作***中的一个任务里实现该按键触发事件的检测方法,则此时可以调用***函数,主动释放CPU,引起任务调度,让CPU去处理其他任务,直到本任务重新得到CPU控制权,然后再次扫描一次是否有按键事件发生。
在一个实施例中,本实施例中的按键触发事件的检测方法可以采用操作***中的一个任务进行实现,扫描的时间周期为200ms即可达到预期效果,比传统查询式按键事件的10ms级检测方法节省出非常多的CPU资源。
在一个实施例中,由于本方案使用硬件定时器来进行计时,所以跟按键事件检查相关的时间是很精确的,它的准确度可以大大减弱了其他程序在时间上的耦合影响,如果是传统查询式方案,如果后续每次在其他应用代码中又新增或减少了一些代码,那么该查询方式的查询时间需要重新调整与确定,存在非常繁琐而且不可靠的问题。同时,对于clicks事件,在最终确认按键事件前,因为用户的反应按下弹起速度相对较慢,所以不管用户的连续按下弹起时间的忽长忽短,或者人连续很快地手动让按键按下弹起,在最终确认按键事件时,本方案都能最终确认按键事件,因为对于clicks事件主要是判断按下跟弹起的个数是否相等,而不是他们各自低高电平保持时间的长短,因此按键灵敏度也随之提升,不容易丢失按键事件。
在一个实施例中,在所述确认所述按键存在长按触发事件之后,包括:将所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数清零。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为根据本申请,某些步骤可以采用其它顺序进行。
如图5所示为本申请实施例提供一种按键触发事件的检测装置500的结构示意图,所述按键触发事件的检测装置500可以包括:延时滤波单元501、计算单元502和点击判断单元503。
延时滤波单元501,用于在电平信号出现上升沿或下降沿时,对所述电平信号进行延时滤波;其中,所述电平信号用于检测按键触发事件;
计算单元502,用于计算所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数,并在所述电平信号每次出现上升沿或下降沿时,从零开始记录所述电平信号位于高电平状态的持续时间或低电平状态的持续时间;
点击判断单元503,用于判断所述电平信号出现上升沿的次数是否大于零,并判断所述电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值;若所述电平信号出现上升沿的次数大于零,并且所述电平信号位于高电平状态的持续时间大于预设高电平持续时间阈值,则判断所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数是否相等;若所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数相等,则确认所述按键存在点击触发事件。
在本实施例中,当电平信号的上下边沿中断时,通过延时滤波单元501设置一个延时时间段delay,用于过滤按键的抖动。
在本实施例中,计算单元502用于在所述电平信号每次出现上升沿或下降沿时,从零开始记录所述电平信号位于高电平状态的持续时间或低电平状态的持续时间,并计算所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数。
当按下或弹起按键时,触发了控制芯片中的IO上下边沿中断,进入了IO上下边沿中断处理流程,在该中断处理流程中,首先进行delay延时滤波,消除外部多次的按键抖动,保证按键按下一次时只进入一次该中断处理流程。接着读取IO管脚的电平,判断是按下则标记为KeyInfo.down++,判断是弹起则标记为KeyInfo.up++,例如,当IO管脚的电平信号位于低电平状态,则判断按键按下,并将该按键按下事件标记为KeyInfo.down++,当IO管脚的电平信号位于高电平状态,则判断按键弹起,并将该按键弹起事件标记为KeyInfo.up++。
在本实施例中,计算单元502计算所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数,并在所述电平信号每次出现上升沿或下降沿时,计算单元502从零开始记录所述电平信号位于高电平状态的持续时间或低电平状态的持续时间。具体的,在检测到电平信号出现上升沿或者下降沿时,将定时器中的电平信号位于高电平状态的持续时间KeyInfo.up_timer与电平信号位于低电平状态的持续时间KeyInfo.down_timer清0,即在预设高电平持续时间阈值Δt_clicks_valid或预设低电平持续时间阈值Δt_longpress_valid时间内,如果有按键按下或弹起,则重新计时,暂不判定为超时,因为接着后面可能还有更多的按下弹起,所以也无法确认当前的按键事件的完整性。
进一步的,在一个实施例中,在KeyInfo.up_timer与KeyInfo.down_timer清0后,每隔预设的定时中断时间间隔xms(例如xms=1ms)进入一次的定时器中断处理流程,在定时器中断处理流程中,将定时器中的KeyInfo.up_timer与KeyInfo.down_timer从0开始往上累加自增1,以计算电平信号处于高电平状态或者低电平状态的持续时间。
在本实施例中,点击判断单元503判断所述电平信号出现上升沿的次数是否大于零,以确定当前的按键触发事件类型,例如,若当前的电平信号上升沿的次数的次数为0,则当前的按键触发事件类型为长按触发事件,若当前的电平信号上升沿的次数大于0,则当前的按键触发事件类型可能为点击触发事件。进一步的,还需要判断电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值,以判断当前的按键事件是否结束,例如,若电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值Δt_clicks_valid,则确定当前的按键事件结束。
在本实施例中,若电平信号出现上升沿的次数大于零,且电平信号位于高电平状态的持续时间大于预设高电平持续时间阈值,则点击判断单元503判断所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数是否相等,若所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数相等,则确认所述按键存在点击触发事件。
在一个实施例中,参见图6所示,所述检测装置还包括:
清零单元504,用于在所述确认所述按键存在点击触发事件之后,将所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数清零。
在一个实施例中,参见图6所示,所述检测装置还包括:
长按判断单元505,用于在所述电平信号出现上升沿的次数不大于零,或者,所述电平信号位于高电平状态的持续时间不大于预设高电平持续时间阈值,或者,所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数不相等时,判断所述电平信号出现下降沿的次数是否大于零,以及所述电平信号位于低电平状态的持续时间是否大于预设低电平持续时间阈值;若所述电平信号出现下降沿的次数大于零,并且所述所述电平信号位于低电平状态的持续时间大于预设低电平持续时间阈值,则确认所述按键存在长按触发事件。
在本实施例中,若所述电平信号出现上升沿的次数不大于零,或者,所述电平信号位于高电平状态的持续时间不大于预设高电平持续时间阈值,或者,所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数不相等,则长按判断单元505判断所述电平信号出现下降沿的次数是否大于零,以及所述电平信号位于低电平状态的持续时间是否大于预设低电平持续时间阈值,若所述电平信号出现下降沿的次数大于零,并且所述所述电平信号位于低电平状态的持续时间大于预设低电平持续时间阈值,则确认所述按键存在长按触发事件。
具体的,在一个实施例中,如果用户期望按下的是longpress事件,则按键一定是经历了至少一个下降沿(KeyInfo.down++),然后最终处于按下状态,所以电平信号出现下降沿的次数KeyInfo.down应该是大于0的,并且一定是一直按下一段时间,在这段时间内由于不再发生IO上下边沿中断,所以KeyInfo.down_timer是不会被清0的,此时定时器会一直累加时间直到超时,所以超时条件KeyInfo.down_timer>Δt_longpress_valid一定会发生,Δt_longpress_valid为预设低电平持续时间阈值,又由于按键一直按下所以读IO一定会返回按下状态,即控制芯片的IO管脚最终读取的电平信号一定位于低电平状态,当上述三个条件(KeyInfo.down大于0;KeyInfo.down_timer>Δt_longpress_valid;控制芯片的IO管脚最终读取的电平信号位于低电平状态)同时成立时,则可以最终确认这是个长按触发事件,也就是KeyInfo.key_event=1。
需要说明的是,为描述的方便和简洁,上述描述的按键触发事件的检测装置500的具体工作过程,可以参考图1至图4所述方法的对应过程,在此不再赘述。
如图7所示,为本申请实施例提供的一种终端的示意图。该终端6可以包括:处理器60、存储器61以及存储在所述存储器61中并可在所述处理器60上运行的计算机程序62,例如按键触发事件的检测程序。所述处理器60执行所述计算机程序62时实现上述各个按键触发事件的检测方法实施例中的步骤,例如图1所示的步骤101至103。或者,所述处理器60执行所述计算机程序62时实现上述各装置实施例中各模块/单元的功能,例如图7所示单元501至503的功能。
所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器61中,并由所述处理器60执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述终端中的执行过程。
例如,所述计算机程序可以被分割成延时滤波单元501、计算单元502和点击判断单元503。
延时滤波单元501,用于在电平信号出现上升沿或下降沿时,对所述电平信号进行延时滤波;其中,所述电平信号用于检测按键触发事件;
计算单元502,用于计算所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数,并在所述电平信号每次出现上升沿或下降沿时,从零开始记录所述电平信号位于高电平状态的持续时间或低电平状态的持续时间;
点击判断单元503,用于判断所述电平信号出现上升沿的次数是否大于零,并判断所述电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值;若所述电平信号出现上升沿的次数大于零,并且所述电平信号位于高电平状态的持续时间大于预设高电平持续时间阈值,则判断所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数是否相等;若所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数相等,则确认所述按键存在点击触发事件。
所述终端可以是电视机、智能手机、桌上型计算机、掌上电脑及云端服务器等具有显示屏的计算设备。所述终端可包括,但不仅限于,处理器60、存储器61。本领域技术人员可以理解,图7仅仅是终端的示例,并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端还可以包括输入输出设备、网络接入设备、总线等。
所称处理器60可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字直线位移舵机的位置标定器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器61可以是所述终端的内部存储单元,例如终端的硬盘或内存。所述存储器61也可以是所述终端的外部存储设备,例如所述终端上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器61还可以既包括所述终端的内部存储单元也包括外部存储设备。所述存储器61用于存储所述计算机程序以及所述终端所需的其他程序和数据。所述存储器61还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述***中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/终端和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种按键触发事件的检测方法,其特征在于,包括:
在电平信号出现上升沿或下降沿时,对所述电平信号进行延时滤波;其中,所述电平信号用于检测按键触发事件;
计算所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数,并在所述电平信号每次出现上升沿或下降沿时,从零开始记录所述电平信号位于高电平状态的持续时间或低电平状态的持续时间;
判断所述电平信号出现上升沿的次数是否大于零,并判断所述电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值;
若所述电平信号出现上升沿的次数大于零,并且所述电平信号位于高电平状态的持续时间大于预设高电平持续时间阈值,则判断所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数是否相等;
若所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数相等,则确认所述按键存在点击触发事件。
2.如权利要求1所述的按键触发事件的检测方法,其特征在于,若确认所述按键存在点击触发事件,则所述点击触发事件对应的点击次数为所述电平信号出现上升沿的次数。
3.如权利要求1所述的按键触发事件的检测方法,其特征在于,在所述确认所述按键存在点击触发事件之后,包括:
将所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数清零。
4.如权利要求1所述的按键触发事件的检测方法,其特征在于,所述判断所述电平信号出现上升沿的次数是否大于零,并判断所述电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值之后,包括:
若所述电平信号出现上升沿的次数不大于零,或者,所述电平信号位于高电平状态的持续时间不大于预设高电平持续时间阈值,或者,所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数不相等,则判断所述电平信号出现下降沿的次数是否大于零,以及所述电平信号位于低电平状态的持续时间是否大于预设低电平持续时间阈值;
若所述电平信号出现下降沿的次数大于零,并且所述所述电平信号位于低电平状态的持续时间大于预设低电平持续时间阈值,则确认所述按键存在长按触发事件。
5.如权利要求4所述的按键触发事件的检测方法,其特征在于,在所述确认所述按键存在长按触发事件之后,包括:
将所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数清零。
6.一种按键触发事件的检测装置,其特征在于,所述检测装置包括:
延时滤波单元,用于在电平信号出现上升沿或下降沿时,对所述电平信号进行延时滤波;其中,所述电平信号用于检测按键触发事件;
计算单元,用于计算所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数,并在所述电平信号每次出现上升沿或下降沿时,从零开始记录所述电平信号位于高电平状态的持续时间或低电平状态的持续时间;
点击判断单元,用于判断所述电平信号出现上升沿的次数是否大于零,并判断所述电平信号位于高电平状态的持续时间是否大于预设高电平持续时间阈值;若所述电平信号出现上升沿的次数大于零,并且所述电平信号位于高电平状态的持续时间大于预设高电平持续时间阈值,则判断所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数是否相等;若所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数相等,则确认所述按键存在点击触发事件。
7.如权利要求6所述的按键触发事件的检测装置,其特征在于,所述检测装置还包括:
清零单元,用于在所述确认所述按键存在点击触发事件之后,将所述电平信号出现上升沿的次数以及所述电平信号出现下降沿的次数清零。
8.如权利要求6所述的按键触发事件的检测装置,其特征在于,所述检测装置还包括:
长按判断单元,用于在所述电平信号出现上升沿的次数不大于零,或者,所述电平信号位于高电平状态的持续时间不大于预设高电平持续时间阈值,或者,所述电平信号出现上升沿的次数与所述电平信号出现下降沿的次数不相等时,判断所述电平信号出现下降沿的次数是否大于零,以及所述电平信号位于低电平状态的持续时间是否大于预设低电平持续时间阈值;若所述电平信号出现下降沿的次数大于零,并且所述所述电平信号位于低电平状态的持续时间大于预设低电平持续时间阈值,则确认所述按键存在长按触发事件。
9.一种终端,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-5任一项所述方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-5任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010710013.3A CN112073046A (zh) | 2020-07-22 | 2020-07-22 | 一种按键触发事件的检测方法、检测装置、终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010710013.3A CN112073046A (zh) | 2020-07-22 | 2020-07-22 | 一种按键触发事件的检测方法、检测装置、终端 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112073046A true CN112073046A (zh) | 2020-12-11 |
Family
ID=73656088
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010710013.3A Pending CN112073046A (zh) | 2020-07-22 | 2020-07-22 | 一种按键触发事件的检测方法、检测装置、终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112073046A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116754831A (zh) * | 2023-08-16 | 2023-09-15 | 北京智芯微电子科技有限公司 | 应用于智能断路器的抗谐波干扰的频率测量方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102540940A (zh) * | 2011-12-23 | 2012-07-04 | 四川泛华电器有限责任公司 | 开关消抖***及其方法 |
CN107003783A (zh) * | 2017-02-16 | 2017-08-01 | 深圳市汇顶科技股份有限公司 | 一种按键检测方法及装置 |
CN110221709A (zh) * | 2019-05-28 | 2019-09-10 | 深圳超酷科技有限公司 | 一种按键检测方法、键盘及按键*** |
-
2020
- 2020-07-22 CN CN202010710013.3A patent/CN112073046A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102540940A (zh) * | 2011-12-23 | 2012-07-04 | 四川泛华电器有限责任公司 | 开关消抖***及其方法 |
CN107003783A (zh) * | 2017-02-16 | 2017-08-01 | 深圳市汇顶科技股份有限公司 | 一种按键检测方法及装置 |
CN110221709A (zh) * | 2019-05-28 | 2019-09-10 | 深圳超酷科技有限公司 | 一种按键检测方法、键盘及按键*** |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116754831A (zh) * | 2023-08-16 | 2023-09-15 | 北京智芯微电子科技有限公司 | 应用于智能断路器的抗谐波干扰的频率测量方法及装置 |
CN116754831B (zh) * | 2023-08-16 | 2023-11-07 | 北京智芯微电子科技有限公司 | 应用于智能断路器的抗谐波干扰的频率测量方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5440722A (en) | System bus monitor for compiling data regarding use of a system bus | |
US5944840A (en) | Continuous monitor for interrupt latency in real time systems | |
CN108038130B (zh) | 虚假用户的自动清理方法、装置、设备及存储介质 | |
CN110222504B (zh) | 用户操作的监控方法、装置、终端设备及介质 | |
WO2018122890A1 (ja) | ログ分析方法、システムおよびプログラム | |
CN108197002B (zh) | 移动设备无埋点数据统计方法、***、终端及介质 | |
CN112073046A (zh) | 一种按键触发事件的检测方法、检测装置、终端 | |
CN110597694A (zh) | 一种监控前端页面的方法及终端 | |
CN112434238A (zh) | 网页质量检测方法、装置、电子设备及存储介质 | |
US9009537B2 (en) | Diagnostic data capture in a computing environment | |
CN108520063B (zh) | 事件日志的处理方法、装置及终端设备 | |
CN110275639B (zh) | 触摸数据处理方法、装置、终端及存储介质 | |
CN106648916B (zh) | 计步器消息的上报方法及装置 | |
CN109213589B (zh) | 一种消息处理的方法及装置 | |
CN112181479A (zh) | 代码文件版本间差异的确定方法、装置及电子设备 | |
CN111124519A (zh) | 基于输入响应优化安卓应用程序启动速度的方法及*** | |
CN107748711B (zh) | 自动优化Storm并行度的方法、终端设备及存储介质 | |
CN111399746B (zh) | 分屏显示方法、装置、移动终端及计算机可读存储介质 | |
CN114968726A (zh) | ***资产变更的监控方法、***、电子设备及存储介质 | |
CN115914064A (zh) | 网络***服务性能评估方法、装置、计算设备和存储介质 | |
CN112394856A (zh) | 信息统计方法、装置、电子设备及存储介质 | |
CN114238476A (zh) | 数据处理方法、装置、终端设备及存储介质 | |
CN111356971A (zh) | 手写板的输入数据处理方法、电子设备以及存储介质 | |
US12026217B2 (en) | Quality evaluation apparatus, quality evaluation method and program | |
CN112948214B (zh) | 一种软件过载告警方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |