第10章-LED顯示與鍵盤接口-10.2鍵盤接口工作原理_第1頁
第10章-LED顯示與鍵盤接口-10.2鍵盤接口工作原理_第2頁
第10章-LED顯示與鍵盤接口-10.2鍵盤接口工作原理_第3頁
第10章-LED顯示與鍵盤接口-10.2鍵盤接口工作原理_第4頁
第10章-LED顯示與鍵盤接口-10.2鍵盤接口工作原理_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第10章-LED顯示與鍵盤接口10.2鍵盤接口工作原理10.2鍵盤接口工作原理鍵盤人機交互的一個重要工具兩種基本類型編碼鍵盤除了按鍵以外,還包括產(chǎn)生鍵碼的硬件電路使用方便、價格較高非編碼鍵盤靠軟件來識別鍵盤上的閉合鍵,由此計算出編碼幾乎不需要附加硬件邏輯在單片機應(yīng)用系統(tǒng)中被普遍使用1.

非編碼鍵盤的工作原理分類硬件編碼式鍵盤、二維直讀式鍵盤獨立式鍵盤〔簡單鍵盤〕、行列式鍵盤(矩陣式鍵盤)獨立式按鍵行列式鍵盤01111011110111102.按鍵開關(guān)去抖動問題按鍵抖動在按下和釋放時,按鍵有抖動按鍵時間:>100ms前跳沿和后跳沿:<20ms,抖動時間一般為5~10msA為確保:對鍵的一次閉合僅作一次處理必須:去除抖動3.消除抖動不良后果的方法⑴硬件去抖動RC濾波電路去抖動電路簡單實用,效果較好。⑵軟件去抖動檢測到按鍵按下后,執(zhí)行延時10ms子程序后再確認(rèn)該鍵是否確實按下,消除抖動影響。鍵處理的流程圖

4.獨立式按鍵處理過程查鍵:掃描有否鍵按下,若無鍵按下,返回有鍵按下軟件去抖:延時20ms找鍵等鍵釋放軟件去抖:延時20ms[例1]有鍵按下,返回鍵值;否則,返回0FFHP10P118051

K1P12P13P14P15K2K3K4K5K6+5V;準(zhǔn)備輸入等放去抖查鍵KE2: CLR C MOV B,#0 ;保存鍵值0KE3: ANL A,#3FH RRC A ;(A.0)Cy JNC KE4

INC B SJMP KE3KE4: ORL P1,#3FH MOV A,P1 ANL A,#3FH CJNE A,#3FH,KE4

MOV A,B ;返回鍵值

CJNE A,#06H,KE5KE5: JC KE6 ;Cy=1,(A)<6KE7: MOV A,#0FFH;(A)>=6KE6: RETKE: ORL P1,#3FH

MOV A,P1 ANL A,#3FH ;P1.0~P1.5 CJNE A,#3FH,KE1 SJMP KE7 ;無鍵按下KE1: LCALL DL20 ;延時去抖

ORL P1,#3FH;修改P1 MOV A,P1 ;讀P1 ANL A,#3FH CJNE A,#3FH,KE2 SJMP KE7 ;誤動作返回找鍵5.矩陣式鍵盤工作方式查詢定時每隔一段時間對鍵盤掃描一次利用單片機內(nèi)部的定時器的定時器溢出中斷。中斷中斷方式00001111處理過程鍵掃描確認(rèn)有無按鍵按下去抖動延時按鍵的識別:確定鍵的行、列號掃描算法、線反轉(zhuǎn)法鍵號的確定鍵號=所在行號×鍵盤列數(shù)+所在列號等待鍵釋放掃描算法:逐行置低電平,其余各行為高電平,檢查各列電平的變化,如果某列線電平為低電平,即可確定此行列線交叉點處的按鍵被按下。交換行列線的輸出讀取關(guān)系也可以實現(xiàn)。線反轉(zhuǎn)法:首先,將行線編程為輸入線,列線編程為輸出線,然后使列線線全輸出低電平,讀取行線電平,行線從高電平轉(zhuǎn)為低電平的行線為按下按鍵所在行;然后,將列線編程為輸入線,行線編程為輸出線,然后使行線全輸出低電平,讀取列線電平,列線從高電平轉(zhuǎn)為低電平的列線為按下按鍵所在列。[例1]掃描算法用8255A作單片機鍵盤接口,A口為輸出口接鍵盤列線。C口為輸入口接鍵盤的4條行線8255A地址 A口:7FFCH

B口:7FFDH

C口:7FFEH 控制寄存器:7FFFH子程序KSI:判定有無閉合鍵的KSI: MOV DPTR,#7FFCH

;A口地址 MOV A,#00H MOVX @DPTR,A

;A口送00H INC DPTR INC DPTR

;C口地址 MOVX A,@DPTR

;讀C口 CPL A ANL A,#0FH

;屏蔽高四位 RET00000000有鍵閉合,則(A)≠0無鍵閉合,則(A)=01111KEY1: ACALL KSI

;檢查是否有鍵閉合 JNZ LK1

;A非“0”則轉(zhuǎn)移 ACALL DIR

;顯示一次LED(“延時6ms”)

AJMP KND ;無鍵閉合,延時6ms后退出LK1: ACALL DIR

;有鍵閉合二次延時 ACALL DIR

;共12ms去抖動

ACALL KSI

;再檢查是否有鍵閉合 JNZ LK2

;有鍵閉合轉(zhuǎn)移到LK2 ACALL DIR

AJMP KND

;無鍵閉合,延時6ms后退出有鍵閉合,則(A)≠0無鍵閉合,則(A)=0鍵盤掃描程序KEY1返回時,

(F0)=1:無鍵閉合、(F0)=0:有鍵閉合

(A)=鍵值(閉合的鍵的編號)KND: SETB F0 ;無鍵標(biāo)志 RET

;掃描完畢LK2: CLR F0 ;有鍵標(biāo)志 MOV R2,#0FEH

;掃描初值送R2 MOV R4,#00H

;掃描列號送R4LK4: MOV DPTR,#7FFCH

;A口地址

MOV A,R2 MOVX @DPTR,A

;掃描初值送A口 INC DPTR INC DPTR

;C口地址 MOVX A,@DPTR

;讀C口有閉合鍵,則(A)≠0無閉合,則(A)=001111111KEY1: ACALL KSI

;檢查是否有鍵閉合 JNZ LK1

;A非“0”則轉(zhuǎn)移 ACALL DIR

;顯示一次LED(“延時6ms”) AJMP KEY1LK1: ACALL DIR

;有鍵閉合二次延時 ACALL DIR

;共12ms去抖動

ACALL KSI

;再檢查是否有鍵閉合 JNZ LK2

;有鍵閉合轉(zhuǎn)移到LK2 ACALL DIR AJMP KEY1

;無鍵閉合,延時6ms后轉(zhuǎn)KEY1LK2: MOV R2,#0FEH

;掃描初值送R2 MOV R4,#00H

;掃描列號送R4LK4: MOV DPTR,#7FFCH

;A口地址

MOV A,R2 MOVX @DPTR,A

;掃描初值送A口 INC DPTR INC DPTR

;C口地址 MOVX A,@DPTR

;讀C口有閉合鍵,則(A)≠0無閉合,則(A)=001111111全程序 JB ACC.0,LONE

;ACC.0=1,第0行無鍵閉合,轉(zhuǎn)LONE MOV A,#00H

;裝第0行值 AJMP LKPLONE: JB ACC.1,LTWO

;ACC.1=1,第1行無鍵閉合,轉(zhuǎn)LTWO MOV A,#08H

;裝第1行值 AJMP LKPLTWO: JB ACC.2,LTHR

;ACC.2=1,第2行無鍵閉合,轉(zhuǎn)LTHR MOV A,#10H

;裝第2行值 AJMP LKPLTHR: JB ACC.3,NEXT

;ACC.3=1,第3行無鍵閉合,轉(zhuǎn)NEXT MOV A,#18H

;裝第3行值LKP: ADD A,R4

;計算鍵碼 PUSH ACC

;保護鍵碼LK3: ACALL DIR

;延時6ms ACALL KSI

;檢查是否繼續(xù)閉合,若閉合再延時 JNZ LK3 POP ACC ;若鍵起,則鍵碼送A RET掃描列號:R4NEXT: INC R4

;掃描列號加1

MOV A,R2 JNB ACC.7,KND

;若第7位=0,已掃完最高列則轉(zhuǎn)KND RL A MOV R2,A AJMP LK4

;掃描下一列KND: SETB F0 ;無鍵標(biāo)志 RET

;掃描完畢掃描列號:R4A、R21111111011111101111110111111011111101111110111111011111101111111[例2]線反轉(zhuǎn)法KEY: MOV P1,#0F0H ;行線置低電平,列線置輸入態(tài)KEY0: MOV A,P1 ;讀列線數(shù)據(jù)

CPL A ;數(shù)據(jù)取反,“1”有效

ANL A,#0F0H ;屏蔽行線,保留列線數(shù)據(jù)

MOV R1,A ;存列線數(shù)據(jù)(R1高4位) JZ GRET ;全0,無鍵按下,返回KEY1: MOV P1,#0FH ;行線置輸入態(tài),列線置低電平

MOV A,P1 ;讀行線數(shù)據(jù)

CPL A ;數(shù)據(jù)取反,“1”有效

ANL A,#0FH ;屏蔽列線,保留行線數(shù)據(jù)

MOV R2,A ;存行線數(shù)據(jù)(R2低4位) JZ GRET ;全0,無鍵按下,返回

JBC F0,WAIT ;已有消抖標(biāo)志,轉(zhuǎn)

SETB F0 ;無消抖標(biāo)志,置消抖標(biāo)志

LCALL DY10ms ;調(diào)用10ms延時子程序消抖

SJMP KEY0 ;重讀行線列線數(shù)據(jù)GRET: RET參考程序:WAIT: MOV A,P1 ;等待按鍵釋放

CPL A ANL A,#0FH

JNZ WAIT ;按鍵未釋放,繼續(xù)等待KEY2: MOV A,R1 ;取列線數(shù)據(jù)(高4位) MOV R1,#03H ;取列線編號初值

MOV R3,#03H ;置循環(huán)數(shù)

CLR CKEY3: RLC A ;依次左移入C中

JC KEY4 ;C=1,該列有鍵按下,(列線編號存R1) DEC R1 ;C=0,無鍵按下,修正列編號

DJNZ R3,KEY3 ;判循環(huán)結(jié)束否?未結(jié)束繼續(xù)尋找有鍵按下的列線KEY4: MOV A,R2 ;取行線數(shù)據(jù)(低4位) MOV R2,#00H ;置行線編號初值

MOV R3,#03H ;置循環(huán)數(shù)

CLR CKEY5: RRC A ;依次右移入C中

JC KEY6 ;C=1,該行有鍵按下,(行線編號存R2) INC R2 ;C=0,無鍵按下,修正行線編號

DJNZ R3,KEY5 ;判循環(huán)結(jié)束否?未結(jié)束繼續(xù)尋找有鍵按下的行線KEY6: MOV A,R2 ;取行線編號

CLR C RLC A ;行編號×2 RLC A ;行編號×4 ADD A,R1 ;行編號×4+列編號=按鍵編號KEY7: CLR C RLC A ;按鍵編號×2 RLC A ;按鍵編號×4(LC

溫馨提示

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

評論

0/150

提交評論