軟件去抖動檢測到按鍵按下后資料_第1頁
軟件去抖動檢測到按鍵按下后資料_第2頁
軟件去抖動檢測到按鍵按下后資料_第3頁
軟件去抖動檢測到按鍵按下后資料_第4頁
軟件去抖動檢測到按鍵按下后資料_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

軟件去抖動檢測到按鍵按下后

獨立連接式鍵盤連接圖如右圖所示。當沒有鍵被按下時,所有的數據輸入線都為高電平;當有任意一個鍵被按下時,與之相連的數據輸入線將變?yōu)榈碗娖?;通過相應指令,可以判斷是否有鍵按下。2.矩陣連接式鍵盤

鍵按矩陣排列,各鍵處于矩陣行/列的結點處,CPU通過對連在行(列)的I/O線送已知電平的信號,然后讀取列(行)線的狀態(tài)信息。逐線掃描,得出鍵碼。其特點是鍵多時占用I/O口線少,硬件資源利用合理,但判鍵速度慢。適用場合:多用于設置數字鍵,適用于鍵數多的場合。

4行4列矩陣式鍵盤連接圖如右圖所示。這種鍵盤適合采取動態(tài)掃描的方式進行識別。掃描方式:低電平掃描(回送線必須被上拉為高電平)、高電平掃描(回送線需被下拉為低電平)。右圖中給出了低電平掃描的電路。3.薄膜開關特點:不需要進行導線與開關間的焊接,結構簡單、體積小、防塵、防水、防有害氣體侵蝕、壽命長、可靠性高。應用:與按鍵式鍵盤類似,多個薄膜開關也可按照獨立式或矩陣式設計內部電路,其原理與普通鍵盤相同。

按鍵開關去抖動問題

*鍵盤的抖動時間一般為5~10ms,抖動現象會引起CPU對一次鍵操作進行多次處理,從而可能產生錯誤。⑴硬件去抖動

消除抖動不良后果的方法:其中RC濾波電路去抖動電路簡單實用,效果較好。⑵軟件去抖動檢測到按鍵按下后,執(zhí)行延時10ms子程序后再確認該鍵是否確實按下,消除抖動影響。

(1)開關狀態(tài)的可靠輸入。必須消除鍵抖動??梢圆捎糜布蛙浖煞N方法,硬件方法就是在按鍵輸入通道上添加去抖動電路;軟件方法則采用延遲10~20ms

(2)鍵盤狀態(tài)的監(jiān)測方法——中斷方式還是查詢方式。

(3)鍵盤編碼方法。

(4)鍵盤控制程序的編制。。

6.1.3鍵盤接口

功能:對鍵盤上所按下的鍵進行識別。分類:

(1)編碼鍵盤:采用專用的編碼/譯碼器件,被按下的鍵由該器件譯碼輸出相應的鍵碼/鍵值。其特點是增加了硬件開銷,編碼固定,但編程簡單。適用于規(guī)模大的鍵盤。

6.1.2使用鍵盤時必須解決的問題

(2)非編碼鍵盤:采用軟件編/譯碼的方式,通過掃描,對每個被按下的鍵判別輸出相應的鍵碼/鍵值。其特點是不增加硬件開銷,編碼靈活,但編程較復雜,占CPU時間。適用于小規(guī)模的鍵盤,特別是單片機系統。鍵盤。1.鍵盤接口的工作原理

對于矩陣式鍵盤,如上頁圖所示,鍵盤的行線X0~X3通過電阻接+5V,當鍵盤上沒有鍵閉合時,所有的掃描線和回送線都斷開,無論掃描線處于何種狀態(tài),回送線都呈高電平。當鍵盤上某一鍵閉合時,則該鍵所對應的掃描線和回送線被短路,可以確定,變?yōu)榈碗娖降幕厮途€與掃描線相交處的鍵閉合。

CPU對鍵盤掃描的方式:程序控制的隨機方式(CPU空閑時掃描鍵盤)、定時控制方式(定時掃描鍵盤)、中斷方式。

CPU對鍵盤上閉合鍵的鍵號確定方法:根據掃描線和回送線的狀態(tài)計算求得,或根據行線和列線的狀態(tài)查表求得。

2.鍵輸入程序的設計方法

(1)判斷鍵盤上是否有鍵閉合;(2)消除鍵的機械抖動;(3)確定閉合鍵的物理位置;(4)得到閉合鍵的編號;(5)確保CPU對鍵的一次閉合只做一次處理3.鍵盤接口方式(1)獨立式鍵盤接口(靜態(tài)方式)特點:結構簡單,每個按鍵接單片機的一條I/O線,通過對輸入線的查詢,可以識別每個按鍵的狀態(tài)。[例題]

在MCS-51單片機系統中,設計一個含8個按鍵的獨立式鍵盤。解:在MCS-51中,含8個按鍵的獨立式鍵盤的線路連接如下頁圖所示,8個按鍵經上拉電阻拉高后分別接到MCS-51單片機P1口的8條I/O線上(P1.0~P1.7)。

在無鍵按下的情況下,P1.0~P1.7線上輸入均為高電平。當有鍵按下時,與被按鍵相連的I/O線將得到低電平輸入,其他位按鍵的輸入線上仍維持高電平輸入。

P1口8條I/O線經與非門74LS30實現邏輯與非后,再經過1個非門74LS04進行信號變換,然后接至MCS-51的引腳上,可通過中斷的方式處理鍵盤。在中斷服務程序中,先延時20ms消除鍵抖動,再對各鍵進行查詢,找到所按鍵,并轉到相應的處理程序中去。

CLOSE: JNB ACC.7,KEY7 ;查詢7號鍵

JNB ACC.6,KEY6 ;查詢6號鍵

JNB ACC.5,KEY5 ;查詢5號鍵

JNB ACC.4,KEY4 ;查詢4號鍵

JNB ACC.3,KEY3 ;查詢3號鍵

JNB ACC.2,KEY2 ;查詢2號鍵

JNB ACC.1,KEY1 ;查詢1號鍵

JNB ACC.0,KEY0 ;查詢0號鍵

INT0: RETIKEY7: …… ;7號鍵處理程序

KEY71: MOV A,P1 ;再讀P1口各引腳

JNBACC.7,FUNC71 ;確認鍵是否釋放

RETIKEY6: …… ;其他鍵處理程序

…… D20: …… ;20ms延時子程序

…… END

主程序如下:

ORG 0000H LJMP MAIN ORG 0003H ;外部中斷0中斷服務入口地址

LJMP INT ;轉中斷服務

ORG 0100H MAIN: SETB EA ;開總中斷允許

SETB EX0 ;開INT0中斷

SETB IT0 ;下降沿有效

……中斷服務程序清單如下:

INTI CALL D20 ;延時去抖動

MOV P1,#0FFH ;P1口送全1值(準雙向口原因)

MOV A,P1 ;讀P1口各引腳

CJNE A,#0FFH,CLOSE ;驗證是否確實有鍵閉合

AJMP INT0 ;無鍵按下(按鍵時間過短)則退 ;出中斷(2)矩陣式鍵盤接口——行反轉法

矩陣式鍵盤按鍵識別方法有行反轉法和掃描法等。行反轉法需要兩個雙向I/O口分別接行、列線。步驟如下:

(1)由行線輸出全“0”,讀入列線,判有無鍵按下。(2)若有鍵按下,再將讀入的列列線輸出,讀進行線的值。(3)第一步讀進的列線值與第二步讀進的行線值運算,從而得到代表此鍵的唯一的特征值。行反轉法因輸入與輸出線反過來用而得名。優(yōu)點是判鍵速度快,兩次即可。[例題]請為8051微處理器設計一個由4行4列鍵陣構成的鍵盤。解:4×4矩陣鍵盤的線路連接如下頁圖所示。其中P2口的低4位作為輸出線。P1口的低4位作為輸入線,輸入線通過74LS21進行邏輯相與后作為8051的一個外部中斷源輸入。當有鍵按下時就將引起中斷。中斷服務程序要對所按的鍵進行判別。

(1)查詢閉合鍵的位置子程序KEYR

KEYR子程序用以確定每組線中哪一位為0,是否有多個0。在調用前,應將讀某組線的數據存入累加器A中。KEYR子程序返回時,某組線中0的位置(0~3)保存在R3中。按鍵閉合引起中斷后,執(zhí)行中斷服務程序。表2-5工作寄存器組選擇控制表KEYR子程序如下:

KEYR: CJNE A,#0FEH,TESTP11 ;測試P1.0 MOV R3,#0 ;P1.0=0,說明被按鍵的輸入線為P1.0 LJMP FINISH ;返回

TESTP11: CJNE A,#0FDH,TESTP12 ;測試P1.1 MOV R3,#1 LJMP FINISHTESTP12: CJNE A,#0FBH,TESTP13 ;測試P1.2 MOV R3,#2 LJMP FINISHTESTP13: CJNE A,#0F7H,FINISH ;測試P1.3 MOV R3,#3FINISH: RET

(2)中斷服務程序

中斷服務程序開始部分應利用軟件延時消除鍵抖動,然后再對所按的鍵做出處理。中斷服務程序如下:

ORG1000H INT11:LCALLDELAY ;延時去抖動

MOV A,P1 ;讀輸入線

ANL A,#0FH ;判斷是否有鍵閉合

CJNE A,#0FH,TEST ;有鍵閉合,轉判斷按鍵程序

RETI ;無鍵閉合,返回

TEST:MOV B,A ;暫存

LCALL KEYR ;調用讀取子程序

MOV 40H,R3 ;暫存在40H單元

MOV P2,#0FFH ;輸出線寫1 MOV P1,B ;輸入線寫入數據

MOV A,P2 ;讀輸出線

LCALL KEYR ;調用讀取子程序

XCH A,R3 SWAP A ORL 40H,A ;得按鍵特征值

RETI

中斷程序結束后,鍵的特征值存放在40H單元中。此鍵的輸出線號位于40H單元的高4位,其輸入線號位于低4位。此后,根據40H單元的內容去查表,得到相應鍵的代碼,可進行顯示或其他處理。(3)去抖動的延時子程序DELAY

利用CPU的空閑方式,通過定時器T1實現延時,T1必須預先置初值,以得到需要的延遲時間。設晶振頻率為6MHz,欲延時20ms,定時時間為:(216-TC)×6/12=20×103μs,初值:TC=25536=63C0H。程序如下:

DELAY: MOV TOMD,#11H ;方式1定時

MOV TL1,#0C0H ;定時器1定時初值

MOV TH1,#63H SETB EA ;開中斷

SETB ET1 ;開定時器1中斷

SETB PT1 ;定時器1為高級中斷(因被鍵盤中斷調用)

SETB TR1 ;啟動定時器

ORL PCON,#1 ;啟動空閑方式,實際CPU在此處等待

CLR TR1;以下四條指令只有在延時后,定時器被喚醒,才能執(zhí)行

CLR PT1 CLR ET1 RET END (4)通過串行口擴展鍵盤接口

MCS-51系列單片機的串行口與串/并轉換芯片配合(如串入并出芯片74LS164)可以擴展鍵盤。[例題]

利用MCS-51的串行口與串/并轉換芯片配合,擴展2行8列的鍵盤接口,鍵號為0~15。要求給出其硬件連接和鍵盤查詢子程序。解:串口與串/并轉換芯片配合擴展鍵盤的線路連接如下圖所示。

其中,P1.0和P1.1作為行線。鍵盤的編碼為:P1.0線上的8個鍵分別為00H+(00H~07H),P1.1線上的8個鍵分別為08H+(00H~07H)。掃描線(00H~07H)的具體值存放在R4中。程序采取查詢方式讀取鍵號,并且考慮了鍵的抖動問題。DLY1是延時子程序。

程序如下:

ORG1000H SERKEY:MOVSCON,#00H ;設置串行口

MOVA,#00H ;鍵盤初始化,送00H到列線上

LCALLVARTO ;發(fā)送數據

CHK:JNBP1.0,CHK0 ;檢查是否有鍵按下

JNBP1.1,CHK0 ;檢查是否有鍵按下

AJMPCHK ;無鍵按下,繼續(xù)查找

CHK0:LCALLDLY1 ;調用10ms延時子程序,去抖

JNBP1.0,CHEN ;確實有鍵按下,轉CHEN JNBP1.1,CHEN AJMPCHK ;無鍵按下,繼續(xù)查找

CHEN:MOVR2,#0FEH ;首列掃描字送R2,查鍵號,最低位為0 MOVR4,#00H ;首列偏移值送R4

CHKN:MOVA,R2 ;發(fā)送列掃描字

LCALLVARTO JB P1.0,CH1 ;檢查P1.0有無鍵按下;若無,轉CH1 MOVA,#0 ;第一行首列值送A,00H+(R4)

AJMPCKEY ;轉求鍵號

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論