專利名稱::檢測按鍵輸入的方法和裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及按鍵輸入檢測領(lǐng)域,特別是指一種檢測按鍵輸入的方法和裝置。
背景技術(shù):
:按鍵在電路設(shè)計(jì)中經(jīng)常會用到,例如,應(yīng)用于固定電話、移動電話、電腦、或單片機(jī)中。以單片機(jī)為例,單片機(jī)控制系統(tǒng)中大多使用控制鍵來實(shí)現(xiàn)控制功能。通過按鍵的按下或者抬起,輸出按鍵信號。組成鍵盤的按鍵有觸點(diǎn)式和非觸點(diǎn)式兩種,對于機(jī)械式觸點(diǎn),當(dāng)機(jī)械觸點(diǎn)斷開、閉合時,會有抖動。因此按鍵的按下與抬起都會有1020ms的抖動毛剌存在,這種抖動對于人來說是感覺不到的,但對計(jì)算機(jī)來說,則是完全可以感應(yīng)到的,因?yàn)橛?jì)算機(jī)處理的速度是在微秒級,而機(jī)械抖動的時間至少是毫秒級,對計(jì)算機(jī)而言,這已是一個"漫長"的時間了。只按了一次按鍵,計(jì)算機(jī)卻已執(zhí)行了多次中斷的過程,現(xiàn)有技術(shù)的算法會將機(jī)械抖動作為一次按鍵輸入,如果執(zhí)行的次數(shù)正好是奇數(shù)次,那么運(yùn)算結(jié)果是正確的,如果執(zhí)行的次數(shù)是偶數(shù)次,那運(yùn)算結(jié)果就不對了。因此造成按下按鍵時有時有按鍵輸出,有時沒有按鍵輸出,輸出的按鍵信號不穩(wěn)定。
發(fā)明內(nèi)容本發(fā)明要解決的技術(shù)問題是提供一種能夠消除機(jī)械抖動的檢測按鍵輸入的方法和裝置。為解決上述技術(shù)問題,本發(fā)明的實(shí)施例提供技術(shù)方案如下—方面,提供一種檢測按鍵輸入的方法,包括每一采樣周期采集一次按鍵輸入狀態(tài),生成3個相鄰采樣周期的按鍵輸入狀態(tài),分別為當(dāng)前采樣周期的按鍵輸入狀態(tài)Kinput(n)、所述當(dāng)前采樣周期的前一采樣周期的按鍵輸入狀態(tài)Kinput(n-l)以及前一采樣周期的前一采樣周期的按鍵輸入狀態(tài)Ki即ut(n-2);如果Kinput(n-2)、Kinput(n-l)和Kinput(n)中的至少兩個都為沒有按鍵按下,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出;如果Kinput(n-2)、Kinput(n_l)、Kinput(n)中的至少兩個為有按鍵按下且按下的鍵值都不相同,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出;如果Kinput(n-2)、Kinput(n_l)、Kinput(n)中的至少兩個為有按鍵按下且至少兩個按下的鍵值相同,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為有鍵值輸出且輸出的鍵值為相同的所述鍵值。所述按鍵輸入狀態(tài)為沒有按鍵按下或有按鍵按下;所述按鍵輸出狀態(tài)為沒有鍵值輸出或有鍵值輸出。所述的檢測按鍵輸入的方法,還包括比較所述當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-l),生成比較結(jié)果;根據(jù)所述比較結(jié)果,生成當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n);根據(jù)所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n),輸出按鍵處理控制信號。所述根據(jù)所述比較結(jié)果,生成當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)的步驟包括如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)都為沒有鍵值輸出時,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)沒有按下按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)都為有鍵值輸出時,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)按下按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為有鍵值輸出,前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)為沒有鍵值輸出,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為抬起按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出,前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)為有鍵值輸出,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為按下按鍵。所述根據(jù)所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n),輸出按鍵處理控制信號的步驟為如果所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)沒有按下按鍵,則不輸出按鍵處理控制信號;如果所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)按下按鍵、抬起按鍵或按下按鍵,則輸出按鍵處理控制信號。另一方面,提供一種檢測按鍵輸入的裝置,包括采集單元,用于每一采樣周期采集一次按鍵輸入狀態(tài),生成3個相鄰采樣周期的按鍵輸入狀態(tài),分別為當(dāng)前采樣周期的按鍵輸入狀態(tài)Kinput(n)、當(dāng)前采樣周期的前一采樣周期的按鍵輸入狀態(tài)Kinput(n-l)以及前一采樣周期的前一采樣周期的按鍵輸入狀態(tài)Kinput(n_2);按鍵輸出狀態(tài)生成單元,用于如果Kinput(n-2)、Kinput(n_l)和Kinput(n)中的至少兩個都為沒有按鍵按下,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出;如果Kinput(n_2)、Kinput(n_l)、Kinput(n)中的至少兩個為有按鍵按下且按下的鍵值都不相同,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出;如果Kinput(n_2)、Kinput(n_l)、Kinput(n)中的至少兩個為有按鍵按下且至少兩個按下的鍵值相同,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為有鍵值輸出且輸出的鍵值為相同的所述鍵值。所述的檢測按鍵輸入的裝置,還包括比較單元,用于比較所述當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1),生成比較結(jié)果;按鍵狀態(tài)變化生成單元,用于根據(jù)所述比較結(jié)果,生成當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n);6輸出單元,用于根據(jù)所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n),輸出按鍵處理控制信號。所述按鍵狀態(tài)變化生成單元具體為如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)都為沒有鍵值輸出時,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)沒有按下按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)都為有鍵值輸出時,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)按下按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為有鍵值輸出,前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)為沒有鍵值輸出,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為抬起按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出,前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)為有鍵值輸出,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為按下按鍵。所述輸出單元具體為如果所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)沒有按下按鍵,則不輸出按鍵處理控制信號;如果所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)按下按鍵、抬起按鍵或按下按鍵,則輸出按鍵處理控制信號。所述按鍵輸入狀態(tài)為沒有按鍵按下或有按鍵按下;所述按鍵輸出狀態(tài)為沒有鍵值輸出或有鍵值輸出。本發(fā)明的實(shí)施例具有以下有益效果上述方案中,根據(jù)前一采樣周期的前一采樣周期的按鍵輸入狀態(tài)Kinput(n-2)、前一采樣周期的按鍵輸入狀態(tài)Kinput(n-1)、當(dāng)前采樣周期的按鍵輸入狀態(tài)Kinput(n),生成當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n),當(dāng)前采樣周期的按鍵輸出狀態(tài)不僅與當(dāng)前采樣周期的按鍵輸入狀態(tài)有關(guān),而且與前一個采樣周期的前一個采樣周期的按鍵輸入狀態(tài)和前一個采樣周期的按鍵輸入狀態(tài)有關(guān),因此,在一定程度上能夠消除按鍵抖動帶來的影響,避開按鍵按下時的抖動時間,由于在每個周期采集一次按鍵輸入狀態(tài),因此對每一次按鍵只作一次響應(yīng),從而輸出穩(wěn)定的按鍵信號。圖1為本發(fā)明所述的檢測按鍵輸入的方法的一實(shí)施例的流程示意圖;圖2為本發(fā)明所述的檢測按鍵輸入的方法的另一實(shí)施例的流程示意圖圖3為本發(fā)明所述的檢測按鍵輸入的裝置的一實(shí)施例的結(jié)構(gòu)示意圖;圖4為本發(fā)明所述的檢測按鍵輸入的裝置的另一實(shí)施例的結(jié)構(gòu)示意圖,具體實(shí)施例方式為使本發(fā)明的實(shí)施例要解決的技術(shù)問題、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例進(jìn)行詳細(xì)描述。本發(fā)明的實(shí)施例針對現(xiàn)有技術(shù)中由于按鍵抖動產(chǎn)生的按鍵輸出信號不穩(wěn)定的問題,提供一種檢測按鍵輸入的方法和裝置。如圖1所示,本發(fā)明所述的一種檢測按鍵輸入的方法,包括步驟11,每一采樣周期采集一次按鍵輸入狀態(tài),生成3個相鄰采樣周期的按鍵輸入狀態(tài),分別為當(dāng)前采樣周期的按鍵輸入狀態(tài)Kinput(n)、前一采樣周期的按鍵輸入狀態(tài)Kinput(n-1)以及前一采樣周期的前一采樣周期的按鍵輸入狀態(tài)Kinput(n-2)。其中,所述按鍵輸入狀態(tài)可以包括沒有按鍵按下、有按鍵按下。步驟11具體包括在當(dāng)前采樣周期的前一個采樣周期的前一個采樣周期時,采集按鍵輸入狀態(tài),生成前一個采樣周期的前一個采樣周期的按鍵輸入狀態(tài)Kinput(n-2);在當(dāng)前采樣周期的前一個采樣周期時,采集按鍵輸入狀態(tài),生成前一個采樣周期的按鍵輸入狀態(tài)Kinput(n-1);在當(dāng)前采樣周期,采集按鍵輸入狀態(tài),生成當(dāng)前采樣周期的按鍵輸入狀態(tài)Kinput(n)。步驟12,根據(jù)所述Kinput(n_2)、Kinput(n_l)和Kinput(n),生成當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)。其中,所述步驟12具體為如果Kinput(n_2)、Kinput(n_l)和Kinput(n)中的至少兩個都為沒有按鍵按下,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出;如果Kinput(n_2)、Kinput(n_l)、Kinput(n)中的至少兩個為有按鍵按下且按下的鍵值都不相同,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出;如果Kinput(n_2)、Kinput(n_l)、Kinput(n)中的至少兩個為有按鍵按下且至少兩個按下的鍵值相同,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為有鍵值輸出且輸出的鍵值為相同的所述鍵值。上述方案中,根據(jù)前一個采樣周期的前一個采樣周期的按鍵輸入狀態(tài)Kinput(n-2)、前一個采樣周期的按鍵輸入狀態(tài)Kinput(n_l)、當(dāng)前采樣周期的按鍵輸入狀態(tài)Kinput(n),生成當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n),當(dāng)前采樣周期的按鍵輸出狀態(tài)不僅與當(dāng)前采樣周期的按鍵輸入狀態(tài)有關(guān),而且與前一個采樣周期的前一個采樣周期的按鍵輸入狀態(tài)、前一個采樣周期的按鍵輸入狀態(tài)有關(guān),因此,在一定程度上能夠消除按鍵抖動帶來的影響,避開按鍵按下時的抖動時間,由于在每個周期采集一次按鍵輸入狀態(tài),因此對每一次按鍵只作一次響應(yīng),從而輸出穩(wěn)定的按鍵信號。如圖2所示,本發(fā)明所述的一種檢測按鍵輸入的方法,包括步驟21,每隔一個采樣周期,采集按鍵輸入狀態(tài),分別生成前一個采樣周期的前一個采樣周期的按鍵輸入狀態(tài)Kinput(n-2)、前一個采樣周期的按鍵輸入狀態(tài)Kinput(n_l)、當(dāng)前采樣周期的按鍵輸入狀態(tài)Kinput(n)。其中,所述按鍵輸入狀態(tài)可以包括沒有按鍵按下或有按鍵按下。步驟21具體包括在當(dāng)前采樣周期的前一個采樣周期的前一個采樣周期時,采集按鍵輸入狀態(tài),生成前一個采樣周期的前一個采樣周期的按鍵輸入狀態(tài)Kinput(n-2);在當(dāng)前采樣周期的前一個采樣周期時,采集按鍵輸入狀態(tài),生成前一個采樣周期的按鍵輸入狀態(tài)Kinput(n-1);在當(dāng)前采樣周期,采集按鍵輸入狀態(tài),生成當(dāng)前采樣周期的按鍵輸入狀態(tài)Kinput(n)。步驟22,根據(jù)所述Kinput(n_2)、Kinput(n_l)和Kinput(n),生成當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)。其中,所述按鍵輸出狀態(tài)包括沒有鍵值輸出或有鍵值輸出。其中,所述步驟22具體為如果Kinput(n_2)、Kinput(n_l)和Kinput(n)中的至少兩個都為沒有按鍵按下,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出;如果Kinput(n_2)、Kinput(n_l)、Kinput(n)中的至少兩個為有按鍵按下且按下的鍵值都不相同,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出;如果Kinput(n_2)、Kinput(n_l)、Kinput(n)中的至少兩個為有按鍵按下且至少兩個按下的鍵值相同,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為有鍵值輸出且輸出的鍵值為相同的所述鍵值。步驟23,比較所述當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1),生成比較結(jié)果。步驟24,根據(jù)所述比較結(jié)果,生成當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)。其中,步驟24具體為如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)都為沒有鍵值輸出時,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)沒有按下按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)都為有鍵值輸出時,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)按下按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為有鍵值輸出,前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)為沒有鍵值輸出,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為抬起按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出,前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)為有鍵值輸出,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為按下按鍵。步驟25,根據(jù)當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n),輸出按鍵處理控制信號。其中,步驟25具體為如果所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)沒有按下按鍵,則不輸出按鍵處理控制信號;如果所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)按下按鍵、抬起按鍵或按下按鍵,則輸出按鍵處理控制信號,這樣,持續(xù)沒有按下按鍵的時候,不需要通知MCU(MicroControllerUnit,微型控制單元)或者CPU(Centralprocessingunit,中央處理器)等進(jìn)行處理,減輕了MCU或者CPU負(fù)擔(dān)。上述方案中,不是將采集到的按鍵輸入狀態(tài)立刻輸出,而是將按鍵輸入狀態(tài)延遲一個或兩個采樣周期后再輸出,因此避開了按鍵按下時的抖動時間,對每一次按鍵只作一次響應(yīng),能夠輸出穩(wěn)定的按鍵信號。以下描述本發(fā)明實(shí)施例在單片機(jī)中的應(yīng)用場景,它借助于單片機(jī)內(nèi)的定時中斷資源,通過運(yùn)算邏輯表達(dá)消除按鍵瞬間的抖動。這個方法效率高,不耗機(jī)時且易實(shí)現(xiàn)。為了獲取穩(wěn)定的按鍵信息,須要避開按鍵的抖動期。每個按鍵都代表一個特定的健值,例如1、2或tKi即ut(n)中。每次:的值計(jì)算出按鍵輸出3。沒有按鍵時,采樣的鍵值是一個特殊的值,可以用O來表示。在實(shí)際設(shè)計(jì)時,需要區(qū)分0是代表沒有按鍵還是按下的鍵值是0。每次采集按鍵輸入狀態(tài)是按照定時器設(shè)置的采樣周期來采集的,并不是有按鍵才采集按鍵輸入狀態(tài),并不關(guān)心是否有按鍵。定時器可以根據(jù)用戶設(shè)置,采樣周期的范圍可以為5ms至20ms之間。在該實(shí)施例中,首先,設(shè)置定時中斷周期為20ms。然后設(shè)置以下變量。Kinput(n_2),表示前一個采樣周期的前一個采樣周期的按鍵輸入狀態(tài)。Kinput(n_l),表示前一個采樣周期的按鍵輸入狀態(tài)。Kinput(n),表示當(dāng)前采樣周期的按鍵瑜入狀態(tài),沒有按鍵按下可以表示為0、有按鍵按下以及按下的鍵值可以表示為按下的鍵值數(shù)字表示,例如,在第一個采樣周期時,Kinput(1)可以表示為2。Kout(n-1),表示前一個采樣周期的按鍵輸出狀態(tài)。Kout(n),表示當(dāng)前采樣周期的按鍵輸出狀態(tài)。Sstatus(n),表示當(dāng)前采樣周期的按鍵狀態(tài)變化。在定時中斷服務(wù)程序中讀取按鍵,并把讀取的數(shù)據(jù)存于變』按鍵后定時讀取對應(yīng)的按鍵值,同時更新對應(yīng)的鍵的變量,根據(jù)變』狀態(tài)。當(dāng)Kinput(n_2)、Kinput(n_l)、Kinput(n)中有兩個都為輸入鍵值,并且輸入的鍵值相同,就認(rèn)為有按鍵,按鍵的值為比較結(jié)果中相同的鍵值。如果按鍵一直按下,則以采樣周期的間隔重復(fù)輸出鍵值。如果Kout(n-1)為無鍵值輸出,Kout(n)為有鍵值輸出,按鍵狀態(tài)變化為當(dāng)前采樣時刻按下按鍵;如果Kout(n-1)為有鍵值輸出,Kout(n)為無鍵值輸出,按鍵狀態(tài)變化為當(dāng)前采樣時刻抬起按鍵;如果Kout(n-1)為有鍵值輸出,Kout(n)為有鍵值輸出,按鍵狀態(tài)變化為當(dāng)前采樣時刻持續(xù)按下按鍵;如果Kout(n-1)為無鍵值輸出,Kout(n)為無鍵值輸出,按鍵狀態(tài)變化為當(dāng)前采樣時刻持續(xù)沒有按下按鍵;只要Kout(n-1)和Kout(n)中有一個是有鍵值輸出,則發(fā)送按鍵處理控制信號給MCU,否則不需要通知MCU,減輕了MCU的負(fù)擔(dān)。以下以表格l為例,描述采集的不同按鍵輸入狀態(tài),生成的不同按鍵輸出狀態(tài)。在表格l中,0表示沒有鍵值。2、3、4等表示按鍵的鍵值。表格1<table>tableseeoriginaldocumentpage10</column></row><table><table>tableseeoriginaldocumentpage11</column></row><table>表格1中,在第1個采樣周期時刻,采樣的按鍵輸入狀態(tài)Kinput(1)為有按鍵按下且按鍵值為2,Kinput(n-2)、Kinput(n_l)、Kout(n_l)、Kout(n)初始默認(rèn)值為0,因此,在第l個采樣周期時刻,按鍵輸出狀態(tài)Kout(l)為沒有鍵值輸出,Sstatus(1)為無按鍵,不輸出按鍵處理控制信號。在第2個采樣周期時刻,采樣的按鍵輸入狀態(tài)Kinput(2)為有按鍵按下且按鍵值為2;比較Kinput(l)和Kinput(2)的按鍵輸入狀態(tài),Kinput(1)為有按鍵按下且按鍵值為2,Kinput(2)為有按鍵按下且按鍵值為2,因此,在第2個采樣周期時刻,按鍵輸出狀態(tài)Kout(2)為有鍵值輸出,并且輸出的鍵值為2。由于Kout(l)為沒有鍵值輸出,Kout(2)為有鍵值輸出,因此按鍵狀態(tài)變化Sstatus(2)為按下按鍵,因此輸出按鍵處理控制信號。在第3個采樣周期時刻,按鍵輸入狀態(tài)Kinput(3)無按鍵按下。比較這三個按鍵輸入狀態(tài)Kinput(1)、Kinput(2)、Kinput(3),他們中有兩個相同,即Kinput(1)、Kinput(2)都為有按鍵按下且按鍵值為2,因此,在第3個采樣周期時刻,按鍵輸出狀態(tài)按鍵輸出狀態(tài)Kout(3)為有鍵值輸出,并且輸出的鍵值為2。由于Kout(2)為有鍵值輸出,Kout(3)為有鍵值輸出,因此按鍵狀態(tài)變化Sstatus(3)為持續(xù)按下按鍵,因此輸出按鍵處理控制信號。在第4個采樣周期時刻,按鍵輸入狀態(tài)Kinput(4)為無按鍵按下;比較這三個按鍵輸入狀態(tài)Kinput(2)、Kinput(3)、Kinput(4),他們中有兩個相同,即Kinput(3)、Kinput(4)都為無按鍵按下,因此,在第4個采樣周期時刻,按鍵輸出狀態(tài)按鍵輸出狀態(tài)Kout(4)為無鍵值輸出。由于Kout(3)為有鍵值輸出,Kout(4)為無鍵值輸出,因此按鍵狀態(tài)變化Sstatus(4)為抬起按鍵,因此輸出按鍵處理控制信號。在第5個采樣周期時刻,按鍵輸入狀態(tài)Kinput(5)為有按鍵按下,并且按下的鍵值為4;比較這三個按鍵輸入狀態(tài)Kinput(3)、Kinput(4)、Kinput(5),他們都不相同,因此,在第5個采樣周期時刻,按鍵輸出狀態(tài)按鍵輸出狀態(tài)Kout(5)為無鍵值輸出。由于Kout(4)為無鍵值輸出,Kout(5)為無鍵值輸出,因此按鍵狀態(tài)變化Sstatus(5)為持續(xù)沒有按下按鍵,因此不輸出按鍵處理控制信號。其他采樣周期時刻以此類推。如圖3所示,本發(fā)明所述的一種檢測按鍵輸入的裝置3,包括采集單元31,用于每一采樣周期采集一次按鍵輸入狀態(tài),生成3個相鄰采樣周期的按鍵輸入狀態(tài),分別為當(dāng)前采樣周期的按鍵輸入狀態(tài)Kinput(n)、當(dāng)前采樣周期的前一采樣周期的按鍵輸入狀態(tài)Kinput(n-l)以及前一采樣周期的前一采樣周期的按鍵輸入狀態(tài)Kinput(n-2);所述按鍵輸入狀態(tài)為沒有按鍵按下或有按鍵按下;所述按鍵輸出狀態(tài)為沒有鍵值輸出或有鍵值輸出。按鍵輸出狀態(tài)生成單元32,用于根據(jù)所述Kinput(n_2)、Kinput(n_l)和Kinput(n),生成當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)。具體為如果Kinput(n_2)、Kinput(n-1)和Kinput(n)中的至少兩個都為沒有按鍵按下,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出;如果Kinput(n-2)、Kinput(n-1)、Kinput(n)中的至少兩個為有按鍵按下且按下的鍵值都不相同,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出;如果Kinput(n-2)、Kinput(n-1)、Kinput(n)中的至少兩個為有按鍵按下且至少兩個按下的鍵值相同,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為有鍵值輸出且輸出的鍵值為相同的所述鍵值。上述方案中,根據(jù)前一個采樣周期的前一個采樣周期的按鍵輸入狀態(tài)Kinput(n-2)、前一個采樣周期的按鍵輸入狀態(tài)Kinput(n_l)、當(dāng)前采樣周期的按鍵輸入狀態(tài)Kinput(n),生成當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n),當(dāng)前采樣周期的按鍵輸出狀態(tài)不僅與當(dāng)前采樣周期的按鍵輸入狀態(tài)有關(guān),而且與前一個采樣周期的前一個采樣周期的按鍵輸入狀態(tài)、前一個采樣周期的按鍵輸入狀態(tài)有關(guān),并不是將采集到的按鍵輸入狀態(tài)立刻輸出,而是將按鍵輸入狀態(tài)延遲一個或兩個采樣周期后再輸出,因此避開了按鍵按下時的抖動時間,對每一次按鍵只作一次響應(yīng),能夠輸出穩(wěn)定的按鍵信號。因此,在一定程度上能夠消除按鍵抖動帶來的影響,避開按鍵按下時的抖動時間。如圖4所示,所述的檢測按鍵輸入的裝置3,還包括比較單元33,用于比較所述當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1),生成比較結(jié)果;按鍵狀態(tài)變化生成單元34,用于根據(jù)所述比較結(jié)果,生成當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)。具體為如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)都為沒有鍵值輸出時,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)沒有按下按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)都為有鍵值輸出時,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)按下按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為有鍵值輸出,前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)為沒有鍵值輸出,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為抬起按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出,前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)為有鍵值輸出,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為按下按鍵。輸出單元35,根據(jù)當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n),輸出按鍵處理控制信號。具體為如果所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)沒有按下按鍵,則不輸出按鍵處理控制信號;如果所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)按下按鍵、抬起按鍵或按下按鍵,則輸出按鍵處理控制信號。當(dāng)沒有按鍵按下時,則不需要通知MCU或者CPU等進(jìn)行處理,減輕了MCU或者CPU負(fù)擔(dān)。本發(fā)明所述的按鍵輸入的方法可以應(yīng)用于座機(jī)、移動電話、電腦、或單片機(jī)控制裝置。本發(fā)明所述的按鍵輸入的裝置可以為座機(jī)、移動電話、電腦、或單片機(jī)控制裝置。以上所述是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對于本
技術(shù)領(lǐng)域:
的普通技術(shù)人員來說,在不脫離本發(fā)明所述原理的前提下,還可以作出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。權(quán)利要求一種檢測按鍵輸入的方法,其特征在于,包括每一采樣周期采集一次按鍵輸入狀態(tài),生成3個相鄰采樣周期的按鍵輸入狀態(tài),分別為當(dāng)前采樣周期的按鍵輸入狀態(tài)Kinput(n)、所述當(dāng)前采樣周期的前一采樣周期的按鍵輸入狀態(tài)Kinput(n-1)以及前一采樣周期的前一采樣周期的按鍵輸入狀態(tài)Kinput(n-2);如果Kinput(n-2)、Kinput(n-1)和Kinput(n)中的至少兩個都為沒有按鍵按下,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出;如果Kinput(n-2)、Kinput(n-1)、Kinput(n)中的至少兩個為有按鍵按下且按下的鍵值都不相同,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出;如果Kinput(n-2)、Kinput(n-1)、Kinput(n)中的至少兩個為有按鍵按下且至少兩個按下的鍵值相同,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為有鍵值輸出且輸出的鍵值為相同的所述鍵值。2.根據(jù)權(quán)利要求1所述的檢測按鍵輸入的方法,其特征在于,所述按鍵輸入狀態(tài)為沒有按鍵按下或有按鍵按下;所述按鍵輸出狀態(tài)為沒有鍵值輸出或有鍵值輸出。3.根據(jù)權(quán)利要求2所述的檢測按鍵輸入的方法,其特征在于,還包括比較所述當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1),生成比較結(jié)果;根據(jù)所述比較結(jié)果,生成當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n);根據(jù)所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n),輸出按鍵處理控制信號。4.根據(jù)權(quán)利要求3所述的檢測按鍵輸入的方法,其特征在于,所述根據(jù)所述比較結(jié)果,生成當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)的步驟包括如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)都為沒有鍵值輸出時,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)沒有按下按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)都為有鍵值輸出時,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)按下按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為有鍵值輸出,前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)為沒有鍵值輸出,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為抬起按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出,前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-1)為有鍵值輸出,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為按下按鍵。5.根據(jù)權(quán)利要求4所述的檢測按鍵輸入的方法,其特征在于,所述根據(jù)所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n),輸出按鍵處理控制信號的步驟為如果所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)沒有按下按鍵,則不輸出按鍵處理控制信號;如果所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)按下按鍵、抬起按鍵或按下按鍵,則輸出按鍵處理控制信號。6.—種檢測按鍵輸入的裝置,其特征在于,包括采集單元,用于每一采樣周期采集一次按鍵輸入狀態(tài),生成3個相鄰采樣周期的按鍵輸入狀態(tài),分別為當(dāng)前采樣周期的按鍵輸入狀態(tài)Kinput(n)、當(dāng)前采樣周期的前一采樣周期的按鍵輸入狀態(tài)Kinput(n-l)以及前一采樣周期的前一采樣周期的按鍵輸入狀態(tài)Ki即ut(n-2);按鍵輸出狀態(tài)生成單元,用于如果Kinput(n-2)、Kinput(n-l)和Kinput(n)中的至少兩個都為沒有按鍵按下,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出;如果Kinput(n-2)、Kinput(n-l)、Kinput(n)中的至少兩個為有按鍵按下且按下的鍵值都不相同,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出;如果Kinput(n-2)、Kinput(n-l)、Kinput(n)中的至少兩個為有按鍵按下且至少兩個按下的鍵值相同,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為有鍵值輸出且輸出的鍵值為相同的所述鍵值。7.根據(jù)權(quán)利要求6所述的檢測按鍵輸入的裝置,其特征在于,還包括比較單元,用于比較所述當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-l),生成比較結(jié)果;按鍵狀態(tài)變化生成單元,用于根據(jù)所述比較結(jié)果,生成當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n);輸出單元,用于根據(jù)所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n),輸出按鍵處理控制信號。8.根據(jù)權(quán)利要求7所述的檢測按鍵輸入的裝置,其特征在于,所述按鍵狀態(tài)變化生成單元具體為如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-l)都為沒有鍵值輸出時,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)沒有按下按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)和前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-l)都為有鍵值輸出時,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)按下按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為有鍵值輸出,前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-l)為沒有鍵值輸出,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為抬起按鍵;如果當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出,前一個采樣周期的按鍵輸出狀態(tài)Koutput(n-l)為有鍵值輸出,則所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為按下按鍵。9.根據(jù)權(quán)利要求7所述的檢測按鍵輸入的裝置,其特征在于,所述輸出單元具體為如果所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)沒有按下按鍵,則不輸出按鍵處理控制信號;如果所述當(dāng)前采樣周期的按鍵狀態(tài)變化Sstatus(n)為持續(xù)按下按鍵、抬起按鍵或按下按鍵,則輸出按鍵處理控制信號。10.根據(jù)權(quán)利要求6所述的檢測按鍵輸入的裝置,其特征在于,所述按鍵輸入狀態(tài)為沒有按鍵按下或有按鍵按下;所述按鍵輸出狀態(tài)為沒有鍵值輸出或有鍵值輸出。全文摘要本發(fā)明提供一種檢測按鍵輸入的方法和裝置,涉及按鍵輸入檢測領(lǐng)域,為消除按鍵抖動引起的按鍵輸出信號不穩(wěn)定的技術(shù)問題而發(fā)明。該方法包括每一采樣周期采集一次按鍵輸入狀態(tài),生成3個相鄰采樣周期的按鍵輸入狀態(tài),分別為Kinput(n)、Kinput(n-1)以及Kinput(n-2);如果Kinput(n-2)、Kinput(n-1)和Kinput(n)中的至少兩個都為沒有按鍵按下,則當(dāng)前采樣周期的按鍵輸出狀態(tài)Koutput(n)為沒有鍵值輸出。本發(fā)明實(shí)現(xiàn)方法簡單。文檔編號H03M11/02GK101741394SQ20091023707公開日2010年6月16日申請日期2009年11月3日優(yōu)先權(quán)日2009年11月3日發(fā)明者艾國申請人:北京中星微電子有限公司