專利名稱:一種去除按鍵抖動(dòng)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種按鍵信息的處理方法和系統(tǒng),尤其是一種能夠去除按4定抖 動(dòng)的方法和系纟充。
背景技術(shù):
在目前各種電子設(shè)備中,如電視機(jī)及其它單片機(jī)控制系統(tǒng)的產(chǎn)品,通過按鍵 實(shí)現(xiàn)控制功能很常見。
對(duì)按鍵處理的重要環(huán)節(jié)是去抖動(dòng),包括去除按下和抬起瞬間的抖動(dòng)。
去抖動(dòng)的方法有很多種,如中國(guó)專利CN200720028725.7 (名稱為"一種消 除零售終端話筒按鍵抖動(dòng)的電路裝置")公開了一種使用R-S觸發(fā)器的硬件方法。 這種通過增加硬件的方法來解決按鍵的去抖動(dòng)問題,會(huì)增加成本和體積。
另外,還有通過信息處理的方法來解決按鍵的去抖動(dòng)問題,如經(jīng)常采用的 檢測(cè)到按鍵按下或抬起信息后,增加一段固定延時(shí),以去除按鍵按下或抬起瞬 間的抖動(dòng),這種方法以無謂的耗費(fèi)機(jī)時(shí)來實(shí)現(xiàn)去抖動(dòng),需要不斷延時(shí),在多按 鍵處理過程中,效率很低。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種去除按鍵抖動(dòng)的方法,通過對(duì)按鍵信息的處理, 實(shí)時(shí)判定按鍵的抖動(dòng),并在按鍵信息穩(wěn)定后將去除了抖動(dòng)信息的按鍵信息輸送 給接收元件,實(shí)現(xiàn)4^44去抖動(dòng)。
本發(fā)明的另一個(gè)目的是提供一種去除按鍵抖動(dòng)的系統(tǒng),該系統(tǒng)通過對(duì)輸入 其中的按鍵信息,實(shí)時(shí)判定按鍵的抖動(dòng),并在按鍵信息穩(wěn)定后將去除了抖動(dòng)信 息的按鍵信息輸出,實(shí)現(xiàn)4^去抖動(dòng)。
本發(fā)明的目的分別通過下述技術(shù)方案來實(shí)現(xiàn)
一種去除按鍵抖動(dòng)的方法包括如下步驟a. 設(shè)置定時(shí)中斷周期;
b. 在定時(shí)中斷周期內(nèi),在每個(gè)時(shí)刻連續(xù)讀取按4建信息;
c. 如果兩個(gè)以上相鄰時(shí)刻的按鍵信息都為表征按鍵按下的值,則判定按 鍵按下,否則判定按鍵處于抖動(dòng)狀態(tài);
d. 如果兩個(gè)以上相鄰時(shí)刻的按鍵信息都為表征按鍵抬起的值,則判定按 鍵抬起,否則判定按鍵處于抖動(dòng)狀態(tài);
e. 將步驟c判定按鍵按下、步驟d中判定按鍵抬起的信息分別作為有效 的穩(wěn)定按鍵信息送入接收按鍵動(dòng)作信息的元件,實(shí)現(xiàn)去除按鍵抖動(dòng)。
作為本發(fā)明的實(shí)施方式之一,所述步驟c之后還有步驟cl,即如果兩個(gè)以 上相鄰時(shí)刻直到下一個(gè)定時(shí)中斷周期內(nèi),按鍵信息都為表征按鍵按下的值,則 判定^44一直處于按下狀態(tài);步驟e中,間隔一個(gè)定時(shí)中斷周期,將按鍵按下 的有效的穩(wěn)定按鍵信息重復(fù)送入接收按鍵動(dòng)作信息的元件。
作為本發(fā)明的另一個(gè)實(shí)施方式之一,所述步驟c之后還有步驟c2,即如果 兩個(gè)以上相鄰時(shí)刻直到下一個(gè)定時(shí)中斷周期內(nèi),按鍵信息都為表征按鍵按下的 值,則判定按鍵一直處于按下狀態(tài);步驟e中,僅將4務(wù)睫按下的一次有效的穩(wěn) 定按鍵信息送入按鍵動(dòng)作信息的元件。
或者,作為本發(fā)明的一個(gè)實(shí)施方式之一,所述步驟c之后還有步驟c0,即 設(shè)置一個(gè)至少具有兩種狀態(tài)的標(biāo)識(shí),如果該標(biāo)識(shí)為A狀態(tài),兩個(gè)以上相鄰時(shí)刻 直到下一個(gè)定時(shí)中斷周期內(nèi),按鍵信息都為表征按鍵按下的值,則判定按^魄一 直處于按下狀態(tài),步驟e中,間隔一個(gè)定時(shí)中斷周期,將按鍵按下的有效的穩(wěn) 定按鍵信息重復(fù)送入接收按鍵動(dòng)作信息的元件;如果上述標(biāo)識(shí)為B狀態(tài),兩個(gè) 以上相鄰時(shí)刻直到下一個(gè)定時(shí)中斷周期內(nèi),按鍵信息都為表征按鍵按下的值, 則判定按鍵一直處于按下狀態(tài),步驟e中,僅將按鍵按下的一次有效的穩(wěn)定按 鍵信息送入^4建動(dòng)作信息的元件。
作為本發(fā)明的一個(gè)具體實(shí)施之一,所述步驟b中,設(shè)定變量Kinput接收每 個(gè)時(shí)刻的按鍵信息,O表示按鍵處于抬起狀態(tài),l表示按鍵處于按下狀態(tài);設(shè)定 變量Ktemp為中間變量,接收上一時(shí)刻的Ki叩ut值;設(shè)定變量Kready接收每個(gè)時(shí)刻穩(wěn)定的按鍵信息;
所述步驟c、 d通過下述邏輯表達(dá)式進(jìn)行 Kready=Ktemp & Ki叩ut lKready & (KterapAKinput) 其中,&表示位與符; l表示位或符; 八表示位異或符;
"="符號(hào)右邊的Kready表示上一時(shí)刻的穩(wěn)定按4建信息,"="符號(hào)左邊 的Kready表示當(dāng)前時(shí)刻的穩(wěn)定按鍵信息;
所述步驟e中,將Kready的值作為有效的穩(wěn)定按鍵信息送入接收按鍵動(dòng)作 信息的元件,Kready為1表示穩(wěn)定的按鍵按下的有效的穩(wěn)定按4建信息;Kready 為O表示穩(wěn)定的按鍵抬起的有效的穩(wěn)定按鍵信息。
作為本發(fā)明的一個(gè)具體實(shí)施方式
之一,所述步驟b中,設(shè)定變量Ki叩ut接 收每個(gè)時(shí)刻的按鍵信息,O表示按鍵處于抬起狀態(tài),l表示按鍵處于按下狀態(tài); 設(shè)定變量Ktemp為中間變量,接收上一時(shí)刻的H叩ut值;設(shè)定變量Kready接 收每個(gè)時(shí)刻穩(wěn)定的按鍵信息;設(shè)定Ks tore作為中間變量保存上一次去抖動(dòng)后的 按鍵信息;
所述步驟cO中,設(shè)定Kconst為具有至少雙狀態(tài)的標(biāo)識(shí)變量,所述的A狀 態(tài)表示其值為O,即表示按鍵一直按下為重復(fù)鍵;所述的B狀態(tài)表示其值為1, 即表示按鍵一直按下為非重復(fù)鍵;設(shè)定Koutput表示送入接收按鍵動(dòng)作信息的 元件內(nèi)的^^信息輸出變量;
所述步驟c、 d通過下述邏輯表達(dá)式進(jìn)行 Kready-Ktemp & Kinput IKready & (KtempAKinput) Koutput=Kready &(~Kstore | Kconst) 其中,&表示位與符; l表示位或符; "表示位異或符; ~表示位取反符;
7"="符號(hào)右邊的Kready表示上一時(shí)刻穩(wěn)定的按鍵信息,"="符號(hào)左邊 的Kready表示當(dāng)前時(shí)刻的穩(wěn)定按鍵信息;
所述步驟e中,將Koutput的值作為有效的穩(wěn)定按鍵信息送入接收按鍵動(dòng) 作信息的元件,Koutput為1表示有效的穩(wěn)定按鍵按下信息;Koutput為0表示 有效的穩(wěn)定按鍵抬起信息。
上述各實(shí)施方式中,所述定時(shí)中斷周期為20ms。
一種去除4^4定抖動(dòng)的系統(tǒng)包括如下模塊
周期定時(shí)中斷模塊,按周期連續(xù)產(chǎn)生定時(shí)中斷;
按鍵信息讀取模塊,在周期定時(shí)中斷模塊產(chǎn)生的定時(shí)中斷周期內(nèi),每個(gè)時(shí)刻 讀取按鍵信息;
去除抖動(dòng)模塊,接收上述每個(gè)時(shí)刻讀取的按鍵信息,如果兩個(gè)以上相鄰時(shí) 刻的按鍵信息都為表征按鍵按下的值,則輸出穩(wěn)定的按4定按下信息,否則輸出 按鍵處于抖動(dòng)狀態(tài)的信息;如果兩個(gè)以上相鄰時(shí)刻的按鍵信息都為表征按鍵抬 起的值,則輸出穩(wěn)定的按鍵抬起信息,否則輸出按鍵處于抖動(dòng)狀態(tài)的信息。
作為上述系統(tǒng)的實(shí)施方式之一,所述系統(tǒng)還包括標(biāo)識(shí)模塊,該標(biāo)識(shí)模塊至 少可以被輸入兩個(gè)狀態(tài)值,當(dāng)狀態(tài)值A(chǔ)被輸入上述標(biāo)識(shí);溪塊,去除抖動(dòng)模塊接 收每個(gè)時(shí)刻讀取的按鍵信息,兩個(gè)以上相鄰時(shí)刻直到下一個(gè)定時(shí)中斷周期內(nèi), 按鍵信息都為表征按鍵按下的值,則輸出穩(wěn)定的按鍵按下信息,并間隔一個(gè)定 時(shí)中斷周期,將有效的穩(wěn)定按鍵按下信息重復(fù)輸出;當(dāng)狀態(tài)值B被輸入上述標(biāo) 識(shí)模塊,去除抖動(dòng)模塊接收每個(gè)時(shí)刻讀取的按鍵信息,兩個(gè)以上相鄰時(shí)刻直到 下一個(gè)定時(shí)中斷周期內(nèi),按鍵信息都為表征按鍵按下的值,僅輸出一次有效的 穩(wěn)定##按下信息。
本發(fā)明采用上迷步驟的方法和/或上述結(jié)構(gòu)的系統(tǒng),通過信息處理的方法, 不需要延時(shí),在定時(shí)中斷周期內(nèi)實(shí)時(shí)處理按鍵的信息,判定抖動(dòng)信息,將抖動(dòng) 狀態(tài)去除后的穩(wěn)定按鍵信息輸出給接收元件,從而可以不必循環(huán)耗時(shí)等待,即 可識(shí)別按4建的正確信息,判定按鍵狀態(tài),具有效率高、處理步驟簡(jiǎn)單的優(yōu)點(diǎn)。
本發(fā)明將通過例子并參照附圖的方式說明,其中 圖1是本發(fā)明實(shí)施例1的卡諾圖; 圖2是本發(fā)明實(shí)施例1的真值表; 圖3是本發(fā)明實(shí)施例2的卡諾圖; 圖4是本發(fā)明實(shí)施例2的真值表。
具體實(shí)施例方式
下面結(jié)合具體實(shí)施例和附圖對(duì)本發(fā)明作進(jìn)一步的說明。 實(shí)施例1:
一種去除按4t抖動(dòng)的方法包括如下步驟
a. 設(shè)置定時(shí)中斷周期;
b. 在定時(shí)中斷周期內(nèi),在每個(gè)時(shí)刻連續(xù)讀取按4t信息;
c. 如果兩個(gè)以上相鄰時(shí)刻的4斜建信息都為表征##:按下的值,則判定按 鍵按下,否則判定按鍵處于抖動(dòng)狀態(tài);
d. 如果兩個(gè)以上相鄰時(shí)刻的按鍵信息都為表征4鍵抬起的值,則判定按 鍵抬起,否則判定按鍵處于抖動(dòng)狀態(tài);
e. 將步驟c判定按鍵按下、步驟d中判定按鍵抬起的信息分別作為有效 的穩(wěn)定按鍵信息送入接收按鍵動(dòng)作信息的元件,實(shí)現(xiàn)去除按鍵抖動(dòng)。
上述步驟b中,設(shè)定變量Ki叩ut接收每個(gè)時(shí)刻的按鍵信息,0表示按鍵處 于抬起狀態(tài),l表示按鍵處于按下狀態(tài);設(shè)定變量Ktemp為中間變量,接收上一 時(shí)刻的Kinput值;設(shè)定變量Kready接收每個(gè)時(shí)刻穩(wěn)定的按4建信息; 所述步驟c、 d通過下述邏輯表達(dá)式進(jìn)4亍 Kready=Ktemp & Kinput IKready & (KtempAKinput) 其中,&表示位與符; l表示位或符; A表示位異或符;
9"="符號(hào)右邊的Kready表示上一時(shí)刻的穩(wěn)定按鍵信息,"="符號(hào)左邊 的Kready表示當(dāng)前時(shí)刻的穩(wěn)定按鍵信息。
上述步驟e中,將Kready的值作為有效的穩(wěn)定按鍵:信息送入接收按鍵動(dòng)作 信息的元件,Kready為1表示有效的穩(wěn)定按M:按下信息;Kready為0表示有效 的穩(wěn)定按鍵抬起信息。
在一個(gè)具體的實(shí)施例中,由于按鍵的按下與抬起都會(huì)有10 ~ 20ms的抖動(dòng)毛
刺存在,因此,為了獲取穩(wěn)定的按鍵信息,須要避開這段抖動(dòng)期。設(shè)置3個(gè)變 量Kready、 Ktemp和Ki叩ut,并設(shè)置定時(shí)中斷周期為20ms (且不僅限于20ms )。 在定時(shí)中斷服務(wù)程序中讀取按鍵,并把讀取的數(shù)據(jù)存于變量Kinput中。變量 Kready中是所需要的穩(wěn)定的按鍵信息;Ktemp是中間變量,它的值是上一次的 Ki叩ut。根據(jù)當(dāng)前按^:的狀態(tài),考慮到Kready中是20ms抖動(dòng)后的有效的穩(wěn)定 按鍵信息,則Kready、 Ktemp和Kinput之間,在不同時(shí)刻的狀態(tài)關(guān)系如圖2的 表中所列。
時(shí)刻1為沒有鍵按下的初始狀態(tài);
時(shí)刻2的Kinput為1;
時(shí)刻3的Kinput又變?yōu)?,說明時(shí)刻2的Ki叩ut為1并不是有鍵按下,可 能只是干4尤,所以Kreqdy為0;
時(shí)刻4同時(shí)刻2的情況類似,j旦是時(shí)刻4和時(shí)刻5時(shí)Kinput都為1, i兌明 有按鍵按下,在時(shí)刻5時(shí)Kready為1;
時(shí)刻7時(shí)Ki叩ut為0,但時(shí)刻5、 6、 8時(shí)Kinput都為1,說明按鍵一直按 下,只不過有干擾,Kready保持為l;
時(shí)刻9、 10連續(xù)兩個(gè)時(shí)刻Kinput為0,表示4務(wù)建抬起,時(shí)刻10時(shí)Kready為0。
從上面可以看出,Kready中是消除了抖動(dòng)并在一定程度上排除了干擾的有 效按鍵信息。
從按一睫按下到Kready為1,最長(zhǎng)時(shí)間約為40ms,最短約為20ms。其時(shí)間長(zhǎng) 短取決于鍵按下時(shí)處于定時(shí)中斷周期的所在時(shí)刻。如果按鍵一直按下,則有效按鍵信息以2 Oms的間隔重復(fù)輸出。
從圖2的表中還可以看出,當(dāng)前時(shí)刻Kready的值不但與Ktemp和Ki叩ut 有關(guān),還與Kready前一時(shí)刻的值有關(guān)。
Kready的當(dāng)前時(shí)刻記作Kreadyn,作為因變量;前一時(shí)刻i己作Kreadyn-1, 并和Ktemp、 Ki叩ut —起作為自變量,依照?qǐng)D2的表繪出本實(shí)施例的卡諾圖如 圖1所示,并通過下述計(jì)算機(jī)編程的運(yùn)算式在定時(shí)中斷周期內(nèi)去除按鍵抖動(dòng), 將有效的穩(wěn)定按鍵信息輸入到變量Kready中。
Kready=Ktemp & Ki叩ut lKready & (KtempAKinput); "=,,符號(hào)右邊的Kready表示上一時(shí)刻的穩(wěn)定按鍵:信息,"="符號(hào)左邊 的Kready表示當(dāng)前時(shí)刻的穩(wěn)定按鍵信息。
Ktemp=Kinput (表示變量Ktemp為中間變量,接收上一時(shí)刻的Kinput值) 其中,&表示位與符; l表示位或符; A表示位異或符。
實(shí)施例2:
在實(shí)施例1的基礎(chǔ)上,步驟c之后還有步驟cO,即設(shè)置一個(gè)至少具有兩種 狀態(tài)的標(biāo)識(shí),如果該標(biāo)識(shí)為A狀態(tài),兩個(gè)以上相鄰時(shí)刻直到下一個(gè)定時(shí)中斷周 期內(nèi),4射建信息都為表征掩睫按下的值,則判定按鍵一直處于按下狀態(tài),步驟e 中,間隔一個(gè)定時(shí)中斷周期,將按一建按下的有效的穩(wěn)定按鍵信息重復(fù)送入接收 按鍵動(dòng)作信息的元件;如果上述標(biāo)識(shí)為B狀態(tài),兩個(gè)以上相鄰時(shí)刻直到下一個(gè) 定時(shí)中斷周期內(nèi),按鍵信息都為表征按鍵按下的值,則判定按鍵一直處于按下 狀態(tài),步驟e中,僅將按鍵按下的一次有效的穩(wěn)定^l定信息送入按鍵動(dòng)作信息 的元件。
通過計(jì)算機(jī)編程來實(shí)現(xiàn)步驟cO的方法是,設(shè)定Kconst為具有至少雙狀態(tài) 的標(biāo)識(shí)變量,所述的A狀態(tài)表示其值為0,即表示按鍵一直按下為重復(fù)鍵;所述 的B狀態(tài)表示其值為l,即表示按鍵一直按下為非重復(fù)鍵;設(shè)定Koutput表示送 入接收按鍵動(dòng)作信息的元件內(nèi)的4斜囊信息輸出變量;則步驟c 、 d通過下述邏輯表達(dá)式進(jìn)行 Kready=Ktemp & Ki叩ut lKready & (Ktemp八Kinput) Koutput=Kready & (~Kstore I Kconst) 其中,&表示位與符;
l表示位或符;
"表示位異或符;
-表示位取反符;
"-,,符號(hào)右邊的Kready表示上一時(shí)刻穩(wěn)定的按^鍵信息,"="符號(hào)左邊 的Kready表示當(dāng)前時(shí)刻的穩(wěn)定按4建信息。
表達(dá)式Koutput-Kready&(~Kstore | Kconst)的真值表如圖4所示,根據(jù) 圖4的表可以得到圖3的卡^若圖。
步驟e中,將Koutput的值作為有效的穩(wěn)定^4定信息送入接收按4建動(dòng)作信 息的元件,Koutput為1表示穩(wěn)定的按44按下的有效的穩(wěn)定按鍵信息;Koutput 為O表示穩(wěn)定的按鍵抬起的有效的穩(wěn)定按鍵信息。
在按鍵一 直按下狀態(tài)時(shí),本實(shí)施例既適用于需要重復(fù)的穩(wěn)定按鍵信息的應(yīng) 用系統(tǒng)或電子產(chǎn)品,又適用于不需要重復(fù)鍵值,按一次鍵獲得一次鍵值的按鍵 信息的應(yīng)用系統(tǒng)或電子產(chǎn)品。在對(duì)不同的按鍵有不同需要時(shí),設(shè)定變量Kconst 的不同值即可。 實(shí)施例3:
在實(shí)施例1的基礎(chǔ)上,步驟c之后還有步驟cl,即如果兩個(gè)以上相鄰時(shí)刻 直到下一個(gè)定時(shí)中斷周期內(nèi),按鍵信息都為表征按鍵按下的值,則判定按鍵一 直處于按下狀態(tài);步驟e中,間隔一個(gè)定時(shí)中斷周期,將按鍵按下的有效的穩(wěn) 定按鍵信息重復(fù)送入接收拾睫動(dòng)作信息的元件。如果定時(shí)中斷周期為20ms,則如 果按鍵一直按下,則有效的穩(wěn)定^4走信息以20ms的間隔重復(fù)輸出。
本實(shí)施例適用于按鍵一直按下需要重復(fù)的穩(wěn)定按鍵信息應(yīng)用系統(tǒng)或電子產(chǎn)
口O e
實(shí)施例4:在實(shí)施例1的基礎(chǔ)上,步驟C之后還有步驟c2,即如果兩個(gè)以上相鄰時(shí)刻 直到下一個(gè)定時(shí)中斷周期內(nèi),按鍵信息都為表征按鍵按下的值,則判定按鍵一
直處于按下狀態(tài);步驟e中,僅將按鍵按下的一次有效的穩(wěn)定按鍵信息送入按 一建動(dòng)作信息的元件。
本實(shí)施例適用于不需要重復(fù)鍵值,按一次鍵獲得一次鍵值的按鍵信息應(yīng)用 系統(tǒng)或電子產(chǎn)品。 實(shí)施例5:
一種去除按鍵抖動(dòng)的系統(tǒng)包括如下模塊周期定時(shí)中斷模塊、按鍵信息讀取 模塊、去除抖動(dòng)模塊和標(biāo)識(shí)模塊。
周期定時(shí)中斷模塊,按周期連續(xù)產(chǎn)生定時(shí)中斷。
按鍵信息讀取^f莫塊,在周期定時(shí)中斷^f莫塊產(chǎn)生的定時(shí)中斷周期內(nèi),每個(gè)時(shí)刻 讀取按4建信息。
標(biāo)識(shí)模塊,該標(biāo)識(shí)模塊至少可以被輸入兩個(gè)狀態(tài)值。
去除抖動(dòng)模塊,當(dāng)狀態(tài)值A(chǔ)被輸入上述標(biāo)識(shí)模塊,去除抖動(dòng)模塊接收每個(gè) 時(shí)刻讀取的按4建信息,兩個(gè)以上相鄰時(shí)刻直到下一個(gè)定時(shí)中斷周期內(nèi),按鍵信 息都為表征按鍵按下的值,則輸出穩(wěn)定的按鍵按下信息,并間隔一個(gè)定時(shí)中斷 周期,將穩(wěn)定的^4定按下信息重復(fù)輸出;當(dāng)狀態(tài)值B被輸入上述標(biāo)識(shí)模塊,去 除抖動(dòng)模塊接收每個(gè)時(shí)刻讀取的按鍵信息,兩個(gè)以上相鄰時(shí)刻直到下一個(gè)定時(shí) 中斷周期內(nèi),按鍵信息都為表征按鍵按下的值,僅輸出一次穩(wěn)定的按鍵按下信 息。
應(yīng)用包含上述模塊的系統(tǒng)來去除按鍵抖動(dòng),可以通過計(jì)算機(jī)編程的功能模 塊來實(shí)現(xiàn)。
周期定時(shí)中斷模塊可以用定時(shí)中斷周期的服務(wù)程序來實(shí)現(xiàn)。 按鍵信息讀取模塊,可以如此構(gòu)成設(shè)置3個(gè)變量Kready、Ktemp和Kinput, 并設(shè)置定時(shí)中斷周期為20ms (且不僅限于20ms)。在定時(shí)中斷服務(wù)程序中讀取 按鍵,并把讀取的數(shù)據(jù)存于變量Kinput中。變量Kready中是所需要的穩(wěn)定的 按鍵信息;Ktemp是中間變量,它的值是上一次的Ki叩ut。標(biāo)識(shí)模塊,設(shè)定Kconst為具有至少雙狀態(tài)的標(biāo)識(shí)變量,所述的狀態(tài)值A(chǔ)為 0,即表示按鍵一直按下為重復(fù)鍵;所述的狀態(tài)值B為l,即表示按鍵一直按下 為非重復(fù)鍵。
去除抖動(dòng)模塊,設(shè)定Koutput表示送入接收按鍵動(dòng)作信息的元件內(nèi)的按鍵 信息輸出變量,通過下述邏輯表達(dá)式構(gòu)成
Kready=Ktemp & Kinput lKready & (KtempAKinput) Koutput-Kready &(~Kstore | Kconst) 其中,&表示位與符;
l表示位或符;
a表示位弄或符;
表示位取反符;
"="符號(hào)右邊的Kready表示上一時(shí)刻穩(wěn)定的按4建信息,"="符號(hào)左邊 的Kready表示當(dāng)前時(shí)刻的穩(wěn)定按鍵信息。
本實(shí)施例的去除按鍵抖動(dòng)的系統(tǒng)可用于既有重復(fù)鍵輸出也有非重復(fù)鍵輸出 的系統(tǒng)中。對(duì)于只有重復(fù)鍵輸出的系統(tǒng),Kconst全為l,則Koutput=Kready, 如果系統(tǒng)只要求非重復(fù)鍵輸出,則Kconst全為0。
本發(fā)明的上述各實(shí)施例適用于通過按鍵實(shí)現(xiàn)控制功能的采用單片機(jī)控制系 統(tǒng)的電器產(chǎn)品上,尤其適用于采用單片才凡控制系統(tǒng)的電禍i/L上。
本說明書中公開的所有特征,或公開的所有方法或過程中的步驟,除了互相 排斥的特征和/或步驟以外,均可以以任何方式組合。
本說明書(包括任何附加權(quán)利要求、摘要和附圖)中公開的任一特征,除非 特別敘述,均可被其他等效或具有類似目的的替代特征加以替換。即,除非特 別敘述,每個(gè)特征只是一 系列等效或類似特征中的一個(gè)例子而已。
本發(fā)明并不局限于前述的具體實(shí)施方式
。本發(fā)明擴(kuò)展到任何在本說明書中披 露的新特征或任何新的組合,以及披露的任一新的方法或過程的步驟或任何新 的組合。
權(quán)利要求
1、一種去除按鍵抖動(dòng)的方法,其特征在于,包括如下步驟a. 設(shè)置定時(shí)中斷周期;b. 在定時(shí)中斷周期內(nèi),在每個(gè)時(shí)刻連續(xù)讀取按鍵信息;c. 如果兩個(gè)以上相鄰時(shí)刻的按鍵信息都為表征按鍵按下的值,則判定按鍵按下,否則判定按鍵處于抖動(dòng)狀態(tài);d. 如果兩個(gè)以上相鄰時(shí)刻的按鍵信息都為表征按鍵抬起的值,則判定按鍵抬起,否則判定按鍵處于抖動(dòng)狀態(tài);e. 將步驟c判定按鍵按下、步驟d中判定按鍵抬起的信息分別作為有效的穩(wěn)定按鍵信息送入接收按鍵動(dòng)作信息的元件,實(shí)現(xiàn)去除按鍵抖動(dòng)。
2、 如權(quán)利要求1所述一種去除按鍵抖動(dòng)的方法,其特征在于,所述步驟c 之后還有步驟cl,即如果兩個(gè)以上相鄰時(shí)刻直到下一個(gè)定時(shí)中斷周期內(nèi),按4建 信息都為表征按鍵按下的值,則判定按鍵一直處于按下狀態(tài);步驟e中,間隔 一個(gè)定時(shí)中斷周期,將有效的穩(wěn)定^l定按下信息重復(fù)送入接收按鍵動(dòng)作信息的 元件。
3、 如權(quán)利要求l所述一種去除按鍵抖動(dòng)的方法,其特征在于,所述步驟c 之后還有步驟c2,即如果兩個(gè)以上相鄰時(shí)刻直到下一個(gè)定時(shí)中斷周期內(nèi),按4建 信息都為表征按鍵按下的值,則判定按鍵一直處于按下狀態(tài);步驟e中,僅將 一次有效的穩(wěn)定按鍵按下信息送入接收按鍵動(dòng)作信息的元件。
4、 如權(quán)利要求l所述一種去除按鍵抖動(dòng)的方法,其特征在于,所述步驟c 之后還有步驟c0,即設(shè)置一個(gè)至少具有兩種狀態(tài)的標(biāo)識(shí),如果該標(biāo)識(shí)為A狀態(tài), 兩個(gè)以上相鄰時(shí)刻直到下一個(gè)定時(shí)中斷周期內(nèi),按4建信息都為表征按鍵按下的 值,則判定按4建一直處于按下狀態(tài),步驟e中,間隔一個(gè)定時(shí)中斷周期,將有 效的穩(wěn)定按鍵按下信息重復(fù)送入接收按鍵動(dòng)作信息的元件;如果上述標(biāo)識(shí)為B 狀態(tài),兩個(gè)以上相鄰時(shí)刻直到下一個(gè)定時(shí)中斷周期內(nèi),按鍵信息都為表征按鍵 按下的值,則判定按鍵一直處于按下狀態(tài),步驟e中,僅將一次有效的穩(wěn)定按鍵按下信息送入接收按鍵動(dòng)作信息的元件。
5、 如權(quán)利要求1所述一種去除按鍵抖動(dòng)的方法,其特征在于 所述步驟b中,設(shè)定變量Kinput接收每個(gè)時(shí)刻的按鍵信息,0表示按鍵處于抬起狀態(tài),l表示按鍵處于按下狀態(tài);設(shè)定變量Ktemp為中間變量,接收上 一時(shí)刻的Ki叩ut值;設(shè)定變量Kready接收每個(gè)時(shí)刻穩(wěn)定的按鍵信息; 所述步驟c、 d通過下述還輯表達(dá)式進(jìn)行 Kready=Ktemp & Kinput IKready & (Ktemp八Kinput) 其中,&表示位與符; l表示位或符; a表示位弄或符;"="符號(hào)右邊的Kready表示上一時(shí)刻的穩(wěn)定按4建信息,"="符號(hào)左邊 的Kready表示當(dāng)前時(shí)刻的穩(wěn)定4^4建信息;所述步驟e中,將Kready的值作為有效的穩(wěn)定按鍵信息送入接收按鍵動(dòng) 作信息的元件,Kready為1表示有效的穩(wěn)定按鍵按下信息;Kready為Q表示 有效的穩(wěn)定按鍵抬起信息。
6、 如權(quán)利要求4所述一種去除按鍵抖動(dòng)的方法,其特征在于 所述步驟b中,設(shè)定變量Kinput接收每個(gè)時(shí)刻的按鍵信息,0表示按鍵處于抬起狀態(tài),l表示按鍵處于按下狀態(tài);設(shè)定變量Ktemp為中間變量,接收上 一時(shí)刻的Kinput值;設(shè)定變量Kready接收每個(gè)時(shí)刻穩(wěn)定的按鍵信息;設(shè)定 "tore作為中間變量保存上一次去抖動(dòng)后的按鍵〃f言息;所述步驟cO中,i殳定Kconst為具有至少雙狀態(tài)的標(biāo)識(shí)變量,所述的A狀 態(tài)表示其值為0,即表示按鍵一直按下為重復(fù)鍵;所述的B狀態(tài)表示其值為1, 即表示按鍵一直按下為非重復(fù)鍵;設(shè)定Koutput表示送入接收按鍵動(dòng)作信息的 元件內(nèi)的按鍵信息輸出變量;所述步驟c、 d通過下述邏輯表達(dá)式進(jìn)行Kready=Ktemp & Kinput |Kready & (KtempHnput)Koutput-Kready &(~Kstore I Kconst)其中,&表示位與符; l表示位或符; "表示位異或符; 表示位取反符;"="符號(hào)右邊的Kready表示上一時(shí)刻穩(wěn)定的按^建信息,"="符號(hào)左邊 的Kready表示當(dāng)前時(shí)刻的穩(wěn)定按鍵信息;所述步驟e中,將Koutput的值作為有效的穩(wěn)定按鍵信息送入接收按鍵動(dòng) 作信息的元件,Koutput為1表示有效的穩(wěn)定按鍵按下信息;Koutput為0表 示有效的穩(wěn)定按鍵抬起信息。
7、 如權(quán)利要求1或2或3或4或5或6所述一種去除按鍵抖動(dòng)的方法, 其特征在于,所述定時(shí)中斷周期為20ms。
8、 一種去除按鍵抖動(dòng)的系統(tǒng),其特征在于,包括如下模塊 周期定時(shí)中斷模塊,按周期連續(xù)產(chǎn)生定時(shí)中斷;按鍵信息讀取模塊,在周期定時(shí)中斷模塊產(chǎn)生的定時(shí)中斷周期內(nèi),每個(gè)時(shí) 刻讀取^4定信息;去除抖動(dòng)模塊,接收上述每個(gè)時(shí)刻讀取的按鍵信息,如果兩個(gè)以上相鄰時(shí) 刻的按鍵信息都為表征按鍵按下的值,則輸出穩(wěn)定的^l建按下信息,否則輸出 按鍵處于抖動(dòng)狀態(tài)的信息;如果兩個(gè)以上相鄰時(shí)刻的^4定信息都為表征^4建抬 起的值,則輸出穩(wěn)定的按鍵抬起信息,否則輸出按鍵處于抖動(dòng)狀態(tài)的信息。
9、 如權(quán)利要求8所述一種去除按鍵抖動(dòng)的系統(tǒng),其特征在于,所述系統(tǒng) 還包括標(biāo)識(shí)模塊,該標(biāo)識(shí);漠塊至少可以禎:輸入兩個(gè)狀態(tài)^t,當(dāng)狀態(tài)值A(chǔ)被輸入 上述標(biāo)識(shí)模塊,去除抖動(dòng)模塊接收每個(gè)時(shí)刻讀取的按鍵信息,兩個(gè)以上相鄰時(shí) 刻直到下一個(gè)定時(shí)中斷周期內(nèi),按鍵信息都為表征^I建^J姿下的值,則輸出穩(wěn)定 的按鍵按下信息,并間隔一個(gè)定時(shí)中斷周期,將有效的穩(wěn)定按4定按下信息重復(fù) 輸出;當(dāng)狀態(tài)值B被輸入上述標(biāo)識(shí)模塊,去除抖動(dòng)模塊接收每個(gè)時(shí)刻讀取的按 鍵信息,兩個(gè)以上相鄰時(shí)刻直到下一個(gè)定時(shí)中斷周期內(nèi),按鍵信息都為表征按 鍵按下的值,僅輸出一次有效的穩(wěn)定按鍵按下信息。
全文摘要
本發(fā)明公開了一種去除按鍵抖動(dòng)的方法和系統(tǒng),一種按鍵信息的處理方法和系統(tǒng),目的是不用延時(shí)而解決按鍵抖動(dòng)的問題,包括如下步驟設(shè)置定時(shí)中斷周期;在定時(shí)中斷周期內(nèi),在每個(gè)時(shí)刻連續(xù)讀取按鍵信息;如果兩個(gè)以上相鄰時(shí)刻的按鍵信息都為表征按鍵按下的值,則判定按鍵按下,否則判定按鍵處于抖動(dòng)狀態(tài);如果兩個(gè)以上相鄰時(shí)刻的按鍵信息都為表征按鍵抬起的值,則判定按鍵抬起,否則判定按鍵處于抖動(dòng)狀態(tài);將前述兩個(gè)步驟中判定按鍵按下、抬起的信息分別作為有效按鍵鍵信息送入接收按鍵動(dòng)作信息的元件,實(shí)現(xiàn)去除按鍵抖動(dòng)。
文檔編號(hào)G05B19/04GK101520648SQ20091005884
公開日2009年9月2日 申請(qǐng)日期2009年4月3日 優(yōu)先權(quán)日2009年4月3日
發(fā)明者青 史 申請(qǐng)人:四川長(zhǎng)虹電器股份有限公司