李秋霞
【摘要】 通常的按鍵所用開關(guān)為機(jī)械彈性開關(guān),由于機(jī)械觸點(diǎn)的彈性作用,一個按鍵開關(guān)在閉合時不會馬上穩(wěn)定地接通,斷開時也不會一下子斷開,因而在閉合及斷開的瞬間均伴隨有一連串的抖動,引起一次按鍵被誤讀多次。為確保CPU對按鍵的一次閉合僅作一次處理,必須消除按鍵抖動。本文對鍵盤抖動的檢測及消除方法進(jìn)行了探討。
【關(guān)鍵詞】 鍵盤抖動 檢測 消除
鍵盤是計(jì)算機(jī)和工業(yè)控制等領(lǐng)域不可缺少的輸入設(shè)備,通過它可以實(shí)現(xiàn)人機(jī)對話, 完成各種功能操作。通常的按鍵所用開關(guān)為機(jī)械彈性開關(guān),由于機(jī)械觸點(diǎn)的彈性作用, 一個按鍵開關(guān)在閉合時不會馬上穩(wěn)定地接通,斷開時也不會一下子斷開,因而在閉合及斷開的瞬間均伴隨有一連串的抖動,會引起一次按鍵被誤讀多次。為了確保CPU對按鍵的一次閉合僅作一次處理,必須消除按鍵抖動。
一、鍵盤抖動的檢測
按鍵的檢測與消抖是處理非編碼鍵盤必須考慮的一部分。在FPGA中鍵盤的檢測主要通過“脈沖邊緣檢測法”進(jìn)行。按鍵與單片機(jī)的連接方式為按鍵的一端與地相連,另一端直接與單片機(jī)的I/O口相連。此時我們在程序中先給I/O口賦值高電平,然后不斷的檢測I/O口電平的變化。當(dāng)按鍵沒有被按下時,此I/O口的電平一直為高;當(dāng)按鍵被按下時,由于按鍵的另一端直接與地相連,相當(dāng)于低電平,此時我們從I/O口讀出的即為高電平,程序一旦檢測到I/O口由高電平變?yōu)榈碗娖綍r,說明按鍵被按下,此時馬上執(zhí)行相應(yīng)的動作,這就是按鍵檢測的原理。
具體檢測方法如下:不停的讀取端口,假設(shè)讀取的序列為:按下表示為0,沒有按下就是1。將數(shù)據(jù)存入另一個寄存器。根據(jù)數(shù)電知識,存入數(shù)據(jù)會存在一個時鐘的移動。這樣按鍵的檢測到的時間是一按下就會檢測到,而不是松開時。同時不會出現(xiàn)松開過程的干擾。這樣就會看見這樣在按鍵以后存在一個脈沖,也就是1,那個1可以表示有按鍵被按下,而且是在按下的瞬間就能檢測到。這樣延時20ms左右再次用同樣的方法檢測確定那個鍵被按下。這樣也就實(shí)現(xiàn)了鍵盤的消抖和檢測,不會每次都檢測,只有有檢測到有按鍵按下的脈沖才會判斷哪個鍵被按下。新存入寄存器的數(shù)據(jù)是原寄存器上個時鐘的數(shù)值,即寄存器的基本原理。取反電路時組合電路,不會出現(xiàn)時延,取反的值與原寄存器值對齊。
二、鍵盤抖動的消除
(1)硬件消抖。在鍵數(shù)較少時,可用硬件方法消除鍵抖動。RS觸發(fā)器為常用的硬件去抖,兩個“與非”門構(gòu)成一個RS觸發(fā)器。當(dāng)按鍵未按下時,輸出為1;當(dāng)鍵按下時,輸出為 0。此時即使用按鍵的機(jī)械性能,使按鍵因彈性抖動而產(chǎn)生瞬時斷開(抖動跳開B),中要按鍵不返回原始狀態(tài)A,雙穩(wěn)態(tài)電路的狀態(tài)不改變,輸出保持為 0,不會產(chǎn)生抖動的波形。也就是說,即使 B點(diǎn)的電壓波形是抖動的,但經(jīng)雙穩(wěn)態(tài)電路之后,其輸出為正規(guī)的矩形波。這一點(diǎn)通過分析RS 觸發(fā)器的工作過程很容易得到驗(yàn)證。此外,利用電容的放電延時,采用并聯(lián)電容法,也可以實(shí)現(xiàn)硬件消抖。
(2)軟件消抖。如果按鍵較多,常用軟件方法去抖。軟件消抖主要是采用延時多次讀取鍵盤接口數(shù)據(jù),通過比較前后兩次讀取鍵盤端口的數(shù)據(jù)通過RC振蕩電路實(shí)現(xiàn)鍵盤消抖,適合對消除抖動要求不高的場合。軟件消抖的實(shí)質(zhì)在于降低鍵盤輸入端口的采樣頻率,將高頻抖動略去。實(shí)際應(yīng)用中通常采用延時跳過高頻抖動區(qū)間,然后再檢測輸入做出相應(yīng)處理。即檢測出鍵閉合后執(zhí)行一個延時程序,產(chǎn)生5ms~10ms 的延時,讓前沿抖動消失后再一次檢測鍵的狀態(tài),如果仍保持閉合 狀態(tài)電平,則確認(rèn)為真正有鍵按下。當(dāng)檢測到按鍵釋放后,也要給5ms~10ms 的延時,待后沿抖動消失后才能轉(zhuǎn)入該鍵的處理程序。一般來說,軟件消抖的方法是不斷檢測按鍵值,直到按鍵值穩(wěn)定。實(shí)現(xiàn)方法:假設(shè)未按鍵時輸入1,按鍵后輸入為0,抖動時不定。可以做以下檢測:檢測到按鍵輸入為0之后,延時5ms~10ms,再次檢測,如果按鍵還為0,那么就認(rèn)為有按鍵輸入。延時的5ms~10ms恰好避開了抖動期。為節(jié)省硬件,通常在單片機(jī)系統(tǒng)中,一般不采用硬件方法消除鍵的抖動,而是用軟件消抖方法。 軟件消抖要占用系統(tǒng)資源,在系統(tǒng)資源充足的情況下使用軟件消抖更加簡單。軟件延時消抖并不需要增加新的硬件,但采用這種方式來設(shè)計(jì), 一般通過軟件指令或者定時器的方式來設(shè)定延時的時間, 采用通用處理器,由于運(yùn)行速度不一致,需要將軟件做相應(yīng)的 修改,比較麻煩。
此外,在鍵盤消抖實(shí)驗(yàn)中用到的方法,是建立2個寄存器,形成二級寄存器,在時鐘觸發(fā)中,首先把數(shù)據(jù)送入第一個寄存器中,然后在下一個時鐘上沿到來時,將第一個寄存器中的數(shù)據(jù)存入第二個寄存器,也就是說第二個寄存器中的數(shù)據(jù)始終比第一個寄存器晚一個周期,即晚一個數(shù)據(jù),然后再將第一個寄存器中的數(shù)據(jù)取反與第二個寄存器的數(shù)據(jù)相與,產(chǎn)生的數(shù)存入一個新的寄存器里,這樣產(chǎn)生的結(jié)果是當(dāng)?shù)谝粋€寄存器中的數(shù)據(jù)由1變?yōu)?時,就會在新的寄存器里產(chǎn)生一個高電平,并維持一個周期。
參 考 文 獻(xiàn)
[1]李運(yùn)兵;微控制器中按鍵處理技巧及應(yīng)用[J];計(jì)算機(jī)系統(tǒng)應(yīng)用;2010年02期
[2]劉天時;劉賞;付春;一種單片機(jī)鍵盤電路設(shè)計(jì)與消抖處理[J];計(jì)算機(jī)與網(wǎng)絡(luò);2010年10期
[3]趙鵬飛;俞建定;基于嵌入式微控制器的一種新型GPIO擴(kuò)展鍵盤技術(shù)[J];寧波大學(xué)學(xué)報(bào)(理工版);2013年02期