版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第八講:接口技術本講重點:本講重點:LEDLED顯示顯示( (靜態(tài)與動態(tài))靜態(tài)與動態(tài))鍵盤擴展(單鍵與矩陣)鍵盤擴展(單鍵與矩陣) 一、顯示器接口擴展一、顯示器接口擴展LED顯示接口(動態(tài)與靜態(tài),硬件譯碼與顯示接口(動態(tài)與靜態(tài),硬件譯碼與軟件譯碼,軟件譯碼, 電路與編程應用)電路與編程應用).LEDLED顯示器的擴展顯示器的擴展( (結構結構) )LEDLED數(shù)碼管的數(shù)碼管的結構結構:共陽與共陰共陽與共陰 單片機系統(tǒng)擴展單片機系統(tǒng)擴展LEDLED數(shù)碼管時數(shù)碼管時多用多用共陽共陽LEDLED: :共陽數(shù)碼管每個段筆畫是用低電平共陽數(shù)碼管每個段筆畫是用低電平( (“0 0”) )點亮的點亮的, ,
2、要求驅動要求驅動功率很小;而共陰數(shù)碼管段筆畫是用高電平功率很??;而共陰數(shù)碼管段筆畫是用高電平( (“0 0”) )點亮的,點亮的,要求驅動功率較大。要求驅動功率較大。 通常每個段筆畫要串一個數(shù)百歐姆的通常每個段筆畫要串一個數(shù)百歐姆的降壓電阻降壓電阻。公共公共陽陽極極h g f e d c b ah g f e d c b aa ab bc cd dg ge ef fh h公共公共陰陰極極h g f e d c b ah g f e d c b aa ab bc cd dg ge ef fh hh g f ah g f a高電平點亮高電平點亮低電平點亮低電平點亮接高電平接高電平接地接地LEDLE
3、D數(shù)碼管的數(shù)碼管的譯碼譯碼:硬件譯碼與軟件譯碼硬件譯碼與軟件譯碼硬件譯碼特點硬件譯碼特點: :采用專用的譯碼采用專用的譯碼/ /驅動器件驅動器件, ,驅動功驅動功率較大率較大; ;增加了硬件的開銷增加了硬件的開銷; ;軟件軟件編程簡單編程簡單; ;字型固字型固定定( (比如比如: :只有七段只有七段, ,只可譯數(shù)字只可譯數(shù)字, ,字型不好看字型不好看) )。共陰共陰LEDa ab bc cd dg ge ef fh hg gf fe ed dc cb b a aD DC CB BA AP1.3P1.3P1.2P1.2P1.1P1.1P1.0P1.0CD4511CD4511AT89C51AT89
4、C5174LS48/CD451174LS48/CD4511是是“BCDBCD碼碼七段七段共陰共陰譯碼譯碼/ /驅動驅動”IC; IC; 74LS4774LS47是是“BCDBCD碼碼七段七段共陽共陽譯碼譯碼/ /驅動驅動”ICICLEDLED顯示器的擴展顯示器的擴展( (譯碼譯碼) )LEDLED顯示器的擴展顯示器的擴展( (軟件譯碼軟件譯碼) )LEDLED數(shù)碼管的譯碼:數(shù)碼管的譯碼:軟件譯碼軟件譯碼軟件譯碼特點軟件譯碼特點: : 不用專用的譯碼不用專用的譯碼/ /驅動器件,驅動驅動器件,驅動功率較小功率較小;不增不增加加硬件的開銷;軟件硬件的開銷;軟件編程較復雜編程較復雜;字型;字型靈活靈
5、活( (比如:比如:有八段,只可譯多種字符,字型好看有八段,只可譯多種字符,字型好看) )。共陽共陽LEDa ab bc cd dg ge ef fh hP1.0P1.0P1.1P1.1P1.2P1.2P1.3P1.3P1.4P1.4P1.5P1.5P1.6P1.6P1.7P1.7+5V+5VAT89C51AT89C51硬件譯碼特點硬件譯碼特點: : 采用專用譯碼采用專用譯碼/ /驅動器件,驅動器件,驅動功率較大;增加了硬驅動功率較大;增加了硬件的開銷;軟件編程簡單;件的開銷;軟件編程簡單;字型固定字型固定( (比如:只有七比如:只有七段,只可譯數(shù)字,字型不段,只可譯數(shù)字,字型不好看好看) )
6、。LEDLED數(shù)碼管的軟件譯碼數(shù)碼管的軟件譯碼八段八段LEDLED數(shù)碼管數(shù)碼管段代碼編碼表段代碼編碼表( (連線不同可有多種表連線不同可有多種表):):公共陽極公共陽極h g f e d c b ah g f e d c b aa ab bc cd dg ge ef fh h公共陰極公共陰極h g f e d c b ah g f e d c b aa ab bc cd dg ge ef fh hh g f ah g f a高電平點亮高電平點亮低電平點亮低電平點亮接高電平接高電平接地接地字形字形0123456789黑黑共陽共陽0C00F90A40B09992820F880900FF共陰共陰3F
7、065B4F666D7D077F6F00LEDLED顯示器的擴展顯示器的擴展( (顯示方式顯示方式) )LEDLED數(shù)碼管的數(shù)碼管的顯示方式顯示方式:靜態(tài)與動態(tài)靜態(tài)與動態(tài)動態(tài)顯示特點動態(tài)顯示特點: : 有閃爍有閃爍,用,用元器件少元器件少,占占I/OI/O線少線少,必須掃描必須掃描,花費花費CPUCPU時間時間,編程復雜。編程復雜。( (有多個有多個LEDLED時尤為突出)時尤為突出)靜態(tài)顯示特點靜態(tài)顯示特點: : 無閃爍無閃爍,用,用元器件多元器件多,占占I/OI/O線多線多,無須掃描無須掃描,節(jié)省節(jié)省CPUCPU時間時間,編程簡單。編程簡單。靜態(tài)顯示靜態(tài)顯示: : 各數(shù)碼管在顯示過程中各數(shù)
8、碼管在顯示過程中持續(xù)持續(xù)得到送顯信號,與各數(shù)碼管接口得到送顯信號,與各數(shù)碼管接口的的I/OI/O口線口線是是專用專用的。的。動態(tài)顯示動態(tài)顯示: : 各數(shù)碼管在顯示過程中各數(shù)碼管在顯示過程中輪流輪流得到送顯信號,與各數(shù)碼管接口得到送顯信號,與各數(shù)碼管接口的的I/OI/O口線口線是是共用共用的。的。A AB BCLKCLKh g f e d c b ah g f e d c b aCLRCLRA AB BCLKCLKCLRCLRA AB BCLKCLKCLRCLR+5V+5VVCCVCCTxDTxDRxDRxD 89C51單片機單片機74LS16474LS16474LS164h g f e d c
9、 b ah g f e d c b ah g f e d c b ah g f e d c b a+5V+5V共陽共陽LED數(shù)碼管數(shù)碼管LEDLED數(shù)碼管數(shù)碼管靜態(tài)靜態(tài)顯示舉例顯示舉例有幾個有幾個LEDLED就要幾個就要幾個74LS16474LS164,但只要數(shù)據不變,但只要數(shù)據不變,送一次就保持住了,且不閃爍,編程十分簡單。送一次就保持住了,且不閃爍,編程十分簡單。要求:要求:根據上圖編寫通過串行口和根據上圖編寫通過串行口和74LS16474LS164驅動驅動共共 陽陽LEDLED數(shù)碼管數(shù)碼管查表顯示的子程序。查表顯示的子程序。條件:條件:系統(tǒng)有系統(tǒng)有6 6個個LEDLED數(shù)碼管數(shù)碼管, ,
10、待顯數(shù)據待顯數(shù)據(00H(00H09H)09H)已放在已放在35H35H30H30H單元中單元中( (分別對應分別對應十萬位十萬位個位個位) ),DSPLYDSPLY:MOV DPTR, #TABLE :MOV DPTR, #TABLE ; ;共陽共陽LEDLED數(shù)碼管譯碼數(shù)碼管譯碼表首址表首址 MOV R0MOV R0,#30H #30H ; ;待顯數(shù)據緩沖區(qū)的待顯數(shù)據緩沖區(qū)的個位個位地址地址REDOREDO:MOV AMOV A, R0 R0 ; ;通過通過R0R0實現(xiàn)寄存器實現(xiàn)寄存器間接尋址間接尋址 MOVC A, A+DPTR MOVC A, A+DPTR ; ;查表查表 MOV SB
11、UF, A MOV SBUF, A ; ;經串行口經串行口發(fā)送發(fā)送到到74LS16474LS164 JNB TI, $ JNB TI, $ ; ;查詢查詢送完一個字節(jié)的第送完一個字節(jié)的第8 8位?位? CLR TI CLR TI ; ;為下一字節(jié)發(fā)送為下一字節(jié)發(fā)送作準備作準備 INC R0 INC R0 ;R0;R0指向下一個指向下一個數(shù)據緩沖單元數(shù)據緩沖單元 CJNE R0CJNE R0,#36H#36H,REDO REDO ; ;判斷判斷是否發(fā)完是否發(fā)完6 6個數(shù)?個數(shù)? RET RET ; ;發(fā)完發(fā)完6 6個數(shù)就個數(shù)就返回返回TABLETABLE:DB 0C0H,0F9H,0A4H,0B
12、0H,99H DB 0C0H,0F9H,0A4H,0B0H,99H ; ;共陽共陽LEDLED譯碼表譯碼表 DB 92H, 82H, 0F8H, 80H,90HDB 92H, 82H, 0F8H, 80H,90HLEDLED數(shù)碼管數(shù)碼管動態(tài)動態(tài)顯示舉例顯示舉例P1.5 P1.5 P1.4P1.4P1.3P1.3P1.2P1.2P1.2P1.2P1.0P1.0P0.7 P0.7 P0.6 P0.6 P0.5 P0.5 P0.4 P0.4 P0.3 P0.3 P0.2 P0.2 P0.1 P0.1 P0.0P0.07406 OC7406 OC門門 X 3X 3上拉上拉電阻電阻1414+5V+5VA
13、T89C51工作原理工作原理:從從P0P0口送段代碼口送段代碼,P1,P1口送位選信號口送位選信號。段碼雖同時。段碼雖同時到達到達 6 6個個LEDLED,但,但一次僅一個一次僅一個LEDLED被選中被選中。利用。利用“視覺暫視覺暫留留”,每送一個字符并選中相應位線,延時一會兒,每送一個字符并選中相應位線,延時一會兒, ,再送再送/ /選下一個選下一個循環(huán)掃描循環(huán)掃描即可。即可。共陰共陰 數(shù)碼管數(shù)碼管位位選選線線段段代代碼碼P1.5 P1.5 P1.4P1.4P1.3P1.3P1.2P1.2P1.2P1.2P1.0P1.0P0.7 P0.7 P0.6 P0.6 P0.5 P0.5 P0.4 P
14、0.4 P0.3 P0.3 P0.2 P0.2 P0.1 P0.1 P0.0P0.07406 OC7406 OC門門 X 3X 3+5V+5VAT89C51位位選選線線段段代代碼碼要求要求:此處為共陰數(shù)碼管,此處為共陰數(shù)碼管,P0P0口送段代碼,口送段代碼,P1P1口送位選信號??谒臀贿x信號。通過查表實現(xiàn)動態(tài)顯示。通過查表實現(xiàn)動態(tài)顯示。條件條件:待顯數(shù)據待顯數(shù)據(00H(00H09H)09H)已放在已放在: : 7FH7FH7AH7AH單元中單元中( (分別對分別對應應十萬位十萬位個位個位) )說明說明:由于用了由于用了反相驅動器反相驅動器74067406,要用共陽譯碼表。,要用共陽譯碼表。共
15、陰共陰 數(shù)碼管數(shù)碼管上拉上拉電阻電阻14147406 OC7406 OC門門 X 3X 3+5V+5V(7FH) (7EH) (7DH) (7CH) (7BH) (7AH)十萬十萬 萬位萬位 千位千位 百位百位 十位十位 個位個位數(shù)據緩沖區(qū)數(shù)據緩沖區(qū) / / 顯示緩沖區(qū)顯示緩沖區(qū)P0P0口口送段送段代碼,代碼,P1P1口口送位選送位選信號。信號。待顯數(shù)據待顯數(shù)據已經放在已經放在: : 7FH7FH7AH7AH單元單元( (分別分別對應對應十萬十萬位位個位個位) )使用共陽使用共陽譯碼表譯碼表。DIRDIR: MOV DPTR, : MOV DPTR, #DSEG #DSEG ; ;數(shù)碼管譯碼數(shù)
16、碼管譯碼表首址表首址 MOV R0MOV R0,#7AH #7AH ; ;待顯緩沖區(qū)待顯緩沖區(qū)個位個位地址地址 MOV R3MOV R3,#01H #01H ; ;個位的個位的位選信號位選信號=01H=01HLD1LD1: MOV AMOV A, R0 R0 ; ;通過通過R0R0間接尋址間接尋址 MOVC A, A+DPTRMOVC A, A+DPTR ; ;查表查表 MOV P0, A MOV P0, A ; ;字段碼送到字段碼送到P0P0口口 MOV P1MOV P1,R3 R3 ; ;字位選擇送到字位選擇送到P1P1口口 LCALL DELYLCALL DELY ; ;調延時調延時1m
17、s1ms子程序子程序 INC R0 INC R0 ;R0 ;R0 指向下一字節(jié)指向下一字節(jié) MOV AMOV A,R3R3 JB ACC.5 JB ACC.5,LD2LD2 ; ;判判是否發(fā)完是否發(fā)完6 6個數(shù)?個數(shù)? RL A RL A ;R1;R1指向下一個位指向下一個位 MOV R3MOV R3,A A ; ;位選信號存回位選信號存回R1R1 SJMP SJMP LD1LD1 ; ;跳去再顯示下一個數(shù)跳去再顯示下一個數(shù)LD2LD2: RET RET ; ;發(fā)完發(fā)完6 6個數(shù)就個數(shù)就返回返回DSEGDSEG:DB 0C0H,0F9H,0A4H,0B0H,99HDB 0C0H,0F9H,0A
18、4H,0B0H,99H; ;共陽譯碼表共陽譯碼表 DB 92H, 82H, 0F8H, DB 92H, 82H, 0F8H, 80H80H,90H,90HP0P0口口送段送段代碼,代碼,P1P1口口送位選送位選信號。信號。待顯數(shù)據待顯數(shù)據已經放在已經放在: : 7FH7FH7AH7AH單元單元( (分別分別對應對應十萬十萬位位個位個位) )使用共陽使用共陽譯碼表譯碼表。二、擴展鍵盤接口二、擴展鍵盤接口鍵盤接口(鍵盤種類鍵盤接口(鍵盤種類,矩陣鍵盤的行掃描與線矩陣鍵盤的行掃描與線反轉法的電路、原理與編程)反轉法的電路、原理與編程);鍵盤接口鍵盤鍵盤 單片機系統(tǒng)中完成控制參數(shù)輸入及修改的單片機系統(tǒng)
19、中完成控制參數(shù)輸入及修改的基本輸基本輸入設備入設備,是人工干預系統(tǒng)的重要手段。,是人工干預系統(tǒng)的重要手段。鍵盤分類鍵盤分類 按鍵值按鍵值編碼方式編碼方式分分 ( (硬件硬件) )編碼鍵盤編碼鍵盤與與非非( (硬件硬件) )編碼鍵盤編碼鍵盤。 按鍵組按鍵組連接方式連接方式分分 獨立連接鍵盤獨立連接鍵盤與與矩陣連接鍵盤矩陣連接鍵盤。編碼鍵盤編碼鍵盤: : 采用專用的編碼采用專用的編碼/ /譯碼譯碼器件器件, ,被按下的鍵被按下的鍵由該器件譯碼輸出相應的由該器件譯碼輸出相應的鍵碼鍵碼/ /鍵值鍵值。特點:特點:增加了硬件開銷,編碼因選用器件而異,編增加了硬件開銷,編碼因選用器件而異,編碼固定,但編程
20、簡單。適用于規(guī)模大的鍵盤。碼固定,但編程簡單。適用于規(guī)模大的鍵盤。非編碼鍵盤非編碼鍵盤: : 單片機系統(tǒng)多采用此類鍵盤單片機系統(tǒng)多采用此類鍵盤 采用采用軟件軟件編編/ /譯碼的方式譯碼的方式, ,通過掃描,對每個被按下通過掃描,對每個被按下的鍵判別輸出相應的的鍵判別輸出相應的鍵碼鍵碼/ /鍵值鍵值。特點:特點:不增加硬件開銷,編碼靈活,適用于小規(guī)模不增加硬件開銷,編碼靈活,適用于小規(guī)模的鍵盤,特別是單片機系統(tǒng)。但編程較復雜的鍵盤,特別是單片機系統(tǒng)。但編程較復雜, ,占占CPUCPU時間,還須軟件時間,還須軟件“消抖消抖”。按鍵值編碼方式:編碼鍵盤與非編碼鍵盤按鍵組連接方式:獨立連接鍵盤與矩陣連
21、接鍵盤獨立連接鍵盤獨立連接鍵盤: : 每鍵相互獨立,各自與一條每鍵相互獨立,各自與一條I/OI/O線線相連,相連,CPUCPU可直接讀取該可直接讀取該I/OI/O線的高線的高/ /低電平狀態(tài)。低電平狀態(tài)。特點:特點:占占I/OI/O口線多,但判鍵速度快,多用于設置控口線多,但判鍵速度快,多用于設置控制鍵、功能鍵。適用于鍵數(shù)少的場合。制鍵、功能鍵。適用于鍵數(shù)少的場合。矩陣連接鍵盤矩陣連接鍵盤: : 鍵按矩陣排列鍵按矩陣排列, ,各鍵處于矩陣行各鍵處于矩陣行/ /列列的的結點結點處處,CPU,CPU通過對連在通過對連在行行( (列列) )的的I/OI/O線送已知電線送已知電平的信號平的信號, ,然
22、后讀取然后讀取列列( (行行) )線的狀態(tài)信息。逐線掃描線的狀態(tài)信息。逐線掃描, ,得出鍵碼。得出鍵碼。特點:特點:鍵多時鍵多時占用占用I/OI/O口線少口線少, ,但判鍵速度慢但判鍵速度慢, ,多用多用于設置數(shù)字鍵。適用于鍵數(shù)多的場合。于設置數(shù)字鍵。適用于鍵數(shù)多的場合。獨立連接式鍵盤獨立連接式鍵盤例例:特點:特點:此子程序需此子程序需不斷不斷( (或或定時定時) )調用調用,否則可能,否則可能漏判。漏判。4 4個鍵的優(yōu)先級由指令順序決定。個鍵的優(yōu)先級由指令順序決定。P1.0P1.0P1.1P1.1P1.2P1.2P1.3P1.3KEY: JNB P1.0,FUNC1 KEY: JNB P1.
23、0,FUNC1 ; ;逐鍵判別逐鍵判別 JNB P1.1,FUNC2 JNB P1.1,FUNC2 JNB P1.2,FUNC3 JNB P1.2,FUNC3 JNB P1.3,FUNC4JNB P1.3,FUNC4 RET RET ; ;無任何鍵按下由此返回無任何鍵按下由此返回FUNC1: FUNC1: ; ;做做P1.0P1.0要求的要求的“功能功能1 1” RET RETFUNC2: FUNC2: ; ;做做P1.1P1.1要求的要求的“功能功能2 2” RET RETFUNC3: FUNC3: ; ;做做P1.2P1.2要求的要求的“功能功能3 3” RET RETFUNC4: FUN
24、C4: ; ;做做P1.3P1.3要求的要求的“功能功能4 4” RET RETAT89C51獨立連接式鍵盤獨立連接式鍵盤例例 特點:特點:此子程序采用此子程序采用中斷中斷查詢查詢不會漏判不會漏判, ,省時。省時。鍵的優(yōu)先級由指令鍵的優(yōu)先級由指令順序決定。順序決定。為防止一次按鍵多為防止一次按鍵多次中斷,在功能子程次中斷,在功能子程序里應安排序里應安排“關關/ /開中開中斷指令斷指令”并并“延時延時”。P1.0P1.0P1.1P1.1P1.2P1.2P1.3P1.3 ORG 0003H ORG 0003H LJMP KEY LJMP KEY KEY: JNB P1.0,FUNC1 KEY: J
25、NB P1.0,FUNC1 ; ;逐鍵判別逐鍵判別 JNB P1.1,FUNC2 JNB P1.1,FUNC2 JNB P1.2,FUNC3 JNB P1.2,FUNC3 JNB P1.3,FUNC4JNB P1.3,FUNC4 RETI RETI ; ;無任何鍵按下由此返回無任何鍵按下由此返回FUNC1: FUNC1: ; ;做做P1.0P1.0要求的要求的“功能功能1 1” RETI RETIFUNC2: FUNC2: ; ;做做P1.1P1.1要求的要求的“功能功能2 2” RETI RETIFUNC3: FUNC3: ; ;做做P1.2P1.2要求的要求的“功能功能3 3” RETI
26、RETIFUNC4: FUNC4: ; ;做做P1.3P1.3要求的要求的“功能功能4 4” RETI RETIINT0INT0&(上拉上拉)AT89C51矩陣式鍵盤矩陣式鍵盤- -行掃描法行掃描法8255 控制寄存器:控制寄存器:0003H 8255 A口地址:口地址: 0000H 8255 C口地址:口地址: 0002H A口為輸出口為輸出 C口為輸入口口為輸入口8051805174LS37374LS373P0.0-P0.7P0.0-P0.7ALEALEP2.7P2.78D8DQ0Q0Q1Q1G GEAEAOEOERDRDWRWR+5V82558255D0-7D0-7WRWRCSC
27、SPA7PA7PA6PA6PA5PA5PA4PA4PA3PA3PA2PA2PA1PA1PA0PA0PC0PC0PC1PC1PC2PC2PC3PC3+5v行線行線列列線線0行行7行行0列列3列列 0 4 8 12 16 20 24 28 0 4 8 12 16 20 24 28 1 5 9 13 17 21 25 29 1 5 9 13 17 21 25 29 2 6 10 14 18 22 26 30 2 6 10 14 18 22 26 30 3 7 11 15 19 23 27 313 7 11 15 19 23 27 31A1A1A0A0RDRD矩陣式鍵盤名詞注釋矩陣式鍵盤名詞注釋0 0
28、行行 1 1行行 2 2行行 3 3行行 4 4行行 5 5行行 6 6行行 7 7行行行線行線(PA0PA7)列列 線線 PC 0-3 0列列3列列 0 4 8 12 16 20 24 280 4 8 12 16 20 24 28 1 5 9 13 17 21 25 291 5 9 13 17 21 25 29 2 6 10 14 18 22 26 302 6 10 14 18 22 26 30 3 7 11 15 19 23 27 313 7 11 15 19 23 27 31矩陣式鍵盤工作原理矩陣式鍵盤工作原理: 先先由行線送出數(shù)據由行線送出數(shù)據, ,送全送全“0 0”或每次只送一位或每
29、次只送一位“0 0”;然后然后讀進列線,判有無鍵按下或讀進列線,判有無鍵按下或按鍵的位置并算出鍵值。順按鍵的位置并算出鍵值。順序掃描。序掃描。1列列2列列 行號:行號:第第0 0行行第第7 7行行R3R3 (0,1,2,3,4,5,6,7) (0,1,2,3,4,5,6,7) 行首值:行首值:(R3) X 4(R3) X 4 R5R5 (0,4,8,12,16,20,24,28) (0,4,8,12,16,20,24,28) 列值:列值:C C口低口低4 4位讀進值位讀進值R4R4 (0F,0E,0D,0B,07) (0F,0E,0D,0B,07) 0F0F:表示此行無鍵按下。:表示此行無鍵按
30、下。 0E0E0707:表示此行的:表示此行的0 03 3列列 有鍵按下。有鍵按下。 鍵值:查得最后結果鍵值:查得最后結果 R5R5 等于已知按鍵的等于已知按鍵的行首值行首值, 再加上所在再加上所在列的序號列的序號。 同一行中,鍵值等于同一行中,鍵值等于行首值行首值 連續(xù)依次加連續(xù)依次加 1 1。KEY1:LCALL KEY1:LCALL KS1KS1 ; ;查有無鍵閉合查有無鍵閉合 JNZ LK1 JNZ LK1 ; ;有鍵閉合轉消抖有鍵閉合轉消抖 LJMP LJMP LK8LK8 ; ;無鍵閉合則退出無鍵閉合則退出LK1LK1:LCALL DL6msLCALL DL6ms ; ;消抖消抖1
31、2ms12ms LCALL DL6msLCALL DL6ms LCALL LCALL KS1KS1 ; ;再查有無鍵閉合再查有無鍵閉合 JNZ JNZ LK2LK2 ; ;的確有,轉的確有,轉處理處理 LJMP LJMP LK8LK8 ; ;確實無,退確實無,退出去出去查有無鍵閉合的子程序查有無鍵閉合的子程序KS1KS1:KS1KS1:MOV DPTRMOV DPTR,#0000H#0000H ; ;指向指向 A A口口 MOV A, MOV A, #00H #00H ;8;8條行線都送條行線都送0 0 MOVXMOVX,DPTRDPTR,A A; ;送到行線上去送到行線上去 INC DPTR
32、INC DPTR INC DPTRINC DPTR ; ;指向指向 C C口口 MOVX AMOVX A,DPTRDPTR ; ;讀列線的電平讀列線的電平 ANL AANL A,#0FH #0FH ; ;保留保留C C口低口低4 4位位 若確有鍵按下若確有鍵按下, ,則則AccAcc中必有中必有“0 0” ORL A ORL A,#0F0H #0F0H ; ;將將AccAcc高高4 4位賦位賦1 1 CPL A CPL A ;Acc;Acc取反后,高取反后,高4 4位位=0;=0; 若有鍵按下若有鍵按下, ,則低則低4 4位中必有位中必有“1 1” RETRET檢查的結果(出口)檢查的結果(出
33、口): 若若(A)(A)0,0,則有鍵按下;則有鍵按下; 若若(A)(A)0,0,則無鍵按下。則無鍵按下。行線行線列列線線0列列3列列1列列2列列0 0行行 1 1行行 2 2行行 3 3行行 4 4行行 5 5行行 6 6行行 7 7行行 0 4 8 12 16 20 24 280 4 8 12 16 20 24 28 1 5 9 13 17 21 25 291 5 9 13 17 21 25 29 2 6 10 14 18 22 26 302 6 10 14 18 22 26 30 3 7 11 15 19 23 27 313 7 11 15 19 23 27 31KEY1:LCALL K
34、EY1:LCALL KS1KS1 ; ;查有無鍵閉合查有無鍵閉合 JNZ LK1 JNZ LK1 ; ;有鍵閉合轉消抖有鍵閉合轉消抖 LJMP LJMP LK8LK8 ; ;無鍵閉合則退出無鍵閉合則退出LK1LK1:LCALL LCALL DL6msDL6ms ; ;消抖消抖12ms12ms LCALL LCALL DL6msDL6ms LCALL LCALL KS1KS1 ; ;再查有無鍵閉合再查有無鍵閉合 JNZ JNZ LK2LK2 ; ;的確有,轉的確有,轉處理處理 LJMP LJMP LK8LK8 ; ;確實無,退確實無,退出去出去LK2LK2:MOV MOV R3R3,# #000
35、0H H ; ;(R3)(R3)行號初值行號初值 MOV MOV R2R2,# #0 0FEFEH H; ;(R2)(R2)行掃描初值行掃描初值LK3LK3:MOV DPTR #0000HMOV DPTR #0000H; ;指向指向8255 A8255 A口口 MOV AMOV A, R2 R2 ; ;取取行掃描值行掃描值 MOVXMOVX,DPTRDPTR,A A ; ;送送到行線上去到行線上去 INC DPTRINC DPTR INC DPTRINC DPTR ; ;指向指向8255 C8255 C口口 MOVX AMOVX A,DPTRDPTR ; ;讀讀列線的電平列線的電平 ANL A
36、ANL A,#0FH#0FH ; ;保留保留C C口低口低4 4位位 MOV MOV R4R4,A A ; ;列值暫存進列值暫存進R4R4 CJNE ACJNE A,# #0F0FH,LK4H,LK4; ;列值列值全全“1 1”表明表明此次送此次送0 0的行的行有鍵按下有鍵按下, ,轉轉LK4LK4處理處理, ,若全若全1,1,表明表明此次送此次送0 0的行的行無鍵按下。無鍵按下。 行號:第行號:第0 0行行第第7 7行行(R3)(R3) (0,1,2,3,4,5,6,7) (0,1,2,3,4,5,6,7) 行掃描值:行掃描值: 0FEH (R2)0FEH (R2) ( (FEFE,FD,F
37、B,F7,EF,DF,BF,7F),FD,FB,F7,EF,DF,BF,7F) FEHFEH = = 1111 1111111 1110 0 B B( (首次掃描首次掃描) ) FDHFDH = = 1111 111111 110 01 1 B B (2(2次掃描次掃描) ) FBHFBH = = 1111 11111 10 01111 B B (3(3次掃描次掃描) ) F7HF7H = = 1111 1111 0 0111111 B B (4(4次掃描次掃描) ) EFHEFH = = 1111110 0 1111 1111 B B (5(5次掃描次掃描) ) DFH DFH = = 11
38、110 01 11111 1111 B B (6(6次掃描次掃描) ) BFH BFH = = 1 10 011 111111 1111 B B (7(7次掃描次掃描) ) 7FH 7FH = = 0 0111 1111111 1111 B B (8(8次掃描次掃描) ) 列值:列值: (0F,0E,0D,0B,07)(0F,0E,0D,0B,07) 從從C C口低口低4 4位讀進位讀進 (R4)(R4) 0F0F:表示此行無鍵按下。:表示此行無鍵按下。0E0E0707:此行的:此行的0 03 3列有鍵按下。列有鍵按下。KEY1:LCALL KEY1:LCALL KS1KS1 ; ;查有無鍵閉
39、合查有無鍵閉合 JNZ LK1 JNZ LK1 ; ;有鍵閉合轉消抖有鍵閉合轉消抖 LJMP LJMP LK8LK8 ; ;無鍵閉合則退出無鍵閉合則退出LK1LK1:LCALL DL6msLCALL DL6ms ; ;消抖消抖12ms12ms LCALL DL6msLCALL DL6ms LCALL LCALL KS1KS1 ; ;再查有無鍵閉合再查有無鍵閉合 JNZ JNZ LK2LK2 ; ;的確有,轉的確有,轉處理處理 LJMP LJMP LK8LK8 ; ;確實無,退確實無,退出去出去LK2LK2:MOV R3,#00HMOV R3,#00H ; ;(R3)(R3)行號初值行號初值 M
40、OV R2,#0FEHMOV R2,#0FEH; ;(R2)(R2)行掃描初值行掃描初值LK3LK3:MOV DPTR #0000HMOV DPTR #0000H; ;指向指向8255 A8255 A口口 MOV AMOV A, R2R2 ; ;取取行掃描值行掃描值 MOVXMOVX,DPTRDPTR,A A ; ;送到行線上去送到行線上去 INC DPTRINC DPTR INC DPTRINC DPTR ; ;指向指向8255 C8255 C口口 MOVX AMOVX A,DPTRDPTR ; ;讀列線的電平讀列線的電平 ANL AANL A,#0FH#0FH ; ;保留保留C C口低口低
41、4 4位位 MOV MOV R4R4,A A ; ;列值暫存進列值暫存進R4R4 CJNE A,#0FH,LK4CJNE A,#0FH,LK4; ;列值列值全全“1 1”表明此次送表明此次送0 0的行有鍵按下的行有鍵按下, ,轉轉LK4LK4處理處理, , 若全若全1,1,表明此次送表明此次送0 0的行無鍵按下。的行無鍵按下。 MOV A MOV A,R2 R2 ; ;取出此次取出此次行掃描值行掃描值 JNB AJNB ACCCC.7,.7,LK8LK8 ; ;若已掃過最后若已掃過最后 一行就一行就退出掃描退出掃描, ,否則掃下一行。否則掃下一行。 RL ARL A ;Acc;Acc中的中的“
42、0 0”左移一左移一位位 MOV R2,A MOV R2,A ; ;新掃描值新掃描值仍存進仍存進R2R2 INC R3INC R3 ; ;行號加行號加1 1指向下一行指向下一行 SJMP SJMP LK3LK3 ; ;轉轉LK3LK3去掃描下一行去掃描下一行 行號:第行號:第0 0行行第第7 7行行(R3)(R3) (0,1,2,3,4,5,6,7) (0,1,2,3,4,5,6,7) 行掃描值:行掃描值: 0FEH (R2)0FEH (R2) ( (FEFE,FD,FB,F7,EF,DF,BF,7F),FD,FB,F7,EF,DF,BF,7F) FEHFEH = = 1111 1111111
43、 1110 0 B B( (首次掃描首次掃描) ) BFH BFH = = 1 10 011 111111 1111 B B (7(7次掃描次掃描) ) 7FH7FH = = 0 0111 1111111 1111 B B (8(8次掃描次掃描) )注意:注意: 只有只有第第8 8次次掃描值掃描值最高位最高位= 0= 0KEY1:LCALL KEY1:LCALL KS1KS1 ; ;查有無鍵閉合查有無鍵閉合 JNZ LK1 JNZ LK1 ; ;有鍵閉合轉消抖有鍵閉合轉消抖 LJMP LJMP LK8LK8 ; ;無鍵閉合則退出無鍵閉合則退出LK1LK1:LCALL DL6msLCALL DL
44、6ms ; ;消抖消抖12ms12ms LCALL DL6msLCALL DL6ms LCALL LCALL KS1KS1 ; ;再查有無鍵閉合再查有無鍵閉合 JNZ JNZ LK2LK2 ; ;的確有,轉的確有,轉處理處理 LJMP LJMP LK8LK8 ; ;確實無,退確實無,退出去出去LK2LK2:MOV R3,#00HMOV R3,#00H ; ;(R3)(R3)行號初值行號初值 MOV R2,#0FEHMOV R2,#0FEH; ;(R2)(R2)行掃描初值行掃描初值LK3LK3:MOV DPTR #0000HMOV DPTR #0000H; ;指向指向8255 A8255 A口口
45、 MOV AMOV A, R2R2 ; ;取取行掃描值行掃描值 MOVXMOVX,DPTRDPTR,A A ; ;送到行線上去送到行線上去 INC DPTRINC DPTR INC DPTRINC DPTR ; ;指向指向8255 C8255 C口口 MOVX AMOVX A,DPTRDPTR ; ;讀列線的電平讀列線的電平 ANL AANL A,#0FH#0FH ; ;保留保留C C口低口低4 4位位 MOV MOV R4R4,A A ; ;列值暫存進列值暫存進R4R4 CJNE A,#0FH,LK4CJNE A,#0FH,LK4; ;列值列值全全“1 1”表明此次送表明此次送0 0的行有鍵
46、按下的行有鍵按下, ,轉轉LK4LK4處理處理, , 若全若全1,1,表明此次送表明此次送0 0的行無鍵按下。的行無鍵按下。 MOV A MOV A,R2 R2 ; ;取出此次取出此次行掃描值行掃描值 JNB ACC.7,JNB ACC.7,LK8LK8 ; ;若已掃過最后若已掃過最后 一行就退出掃描一行就退出掃描, ,否則掃下一行。否則掃下一行。 RL A RL A ;Acc;Acc中的中的“0 0”左移一位左移一位 MOV R2,AMOV R2,A ; ;新掃描值新掃描值仍存進仍存進R2R2 INC R3INC R3 ; ;行號加行號加1 1指向下一行指向下一行 SJMP SJMP LK3
47、 LK3 ; ;轉轉LK3LK3去掃描下一行去掃描下一行LK4LK4:MOV A, R3MOV A, R3; ;此行有按鍵此行有按鍵, ,取行號取行號 ADD A, R3 ADD A, R3 ; ;行號乘行號乘 4 4 MOV R5, A MOV R5, A ; ;得得行首值行首值 ADD A, R5 ADD A, R5 ; ;即即: :0,4,8,120,4,8,12 MOV R5, A MOV R5, A ; ;暫存進暫存進 R5R5 MOV A, MOV A, R4R4 ; ;列值只可能列值只可能 #0F,#0E,#0D,#0B,#07H#0F,#0E,#0D,#0B,#07HLK5:
48、RRC A LK5: RRC A ; ;取列值的最低位到取列值的最低位到CyCy JNCJNC LK6 LK6 ;Cy=0;Cy=0就找到了就找到了, ,即即R5R5 INC R5INC R5 ; ;否則行值增否則行值增1,1,即同即同 行中的下一個行中的下一個鍵值鍵值 SJMP LK5 SJMP LK5 ; ;再轉再轉LK5LK5判判C C鍵值鍵值LK6: LK6: PUSH PUSH 05H05H ; ;將找到的鍵值壓棧將找到的鍵值壓棧 保存起來。保存起來。KEY1:LCALL KEY1:LCALL KS1KS1 JNZ LK1 JNZ LK1 LJMP LJMP LK8LK8 LK1LK
49、1:LCALL DL6msLCALL DL6ms LCALL DL6msLCALL DL6ms LCALL LCALL KS1KS1 JNZ JNZ LK2LK2 LJMP LJMP LK8LK8 LK2LK2:MOV R3,#00HMOV R3,#00H MOV R2,#0FEHMOV R2,#0FEHLK3LK3:MOV DPTR #0000HMOV DPTR #0000H MOV AMOV A, R2R2 MOVXMOVX,DPTRDPTR,A A INC DPTRINC DPTR INC DPTRINC DPTR MOVX AMOVX A,DPTRDPTR ANL AANL A,#0F
50、H#0FH MOV MOV R4R4,A A CJNE A,#0FH,LK4CJNE A,#0FH,LK4 MOV A MOV A,R2 R2 JNB ACC.7, JNB ACC.7,LK8LK8 RL A RL A MOV R2,AMOV R2,A INC R3INC R3 SJMP SJMP LK3LK3LK4LK4:MOV A, R3MOV A, R3 ADD A, R3 ADD A, R3 MOV R5, A MOV R5, A ADD A, R5 ADD A, R5 MOV R5, A MOV R5, A MOV A, R4 MOV A, R4 LK5: RRC A LK5: RR
51、C A ; ;取列值的最低位到取列值的最低位到CyCy JNCJNC LK6 LK6 ;Cy=0;Cy=0就找到了就找到了, ,即即R5R5 INC R5INC R5 ; ;否則行值增否則行值增1,1,即同即同 行中的下一個鍵值行中的下一個鍵值 SJMP LK5 SJMP LK5 ; ;再轉再轉LK5LK5判判C C鍵值鍵值LK6: PUSH 05HLK6: PUSH 05H ; ;將找到的鍵值壓棧將找到的鍵值壓棧 保存起來。保存起來。LK7LK7:LCALL LCALL DL6msDL6ms; ;延延6ms6ms LCALL KS1 LCALL KS1; ;鍵釋放?鍵釋放? JNZ LK7JNZ LK7; ;未釋放未釋放, ,等等 LCALL LCALL DL6msDL6ms ; ;消抖消抖 LCALL LCALL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026廣西北海市社會保險經辦中心招募就業(yè)見習生考試備考題庫及答案解析
- 市場調研報告撰寫指導范文
- 2026浙江紹興市外服派駐越城機關單位景點講解員招聘1人考試備考題庫及答案解析
- 2026中國農業(yè)科學院農業(yè)環(huán)境與可持續(xù)發(fā)展研究所招聘創(chuàng)新工程科研團隊首席科學家1人考試參考試題及答案解析
- 2026年金華浦江縣國有企業(yè)勞務派遣員工公開招聘38人考試備考題庫及答案解析
- 部門年終總結報告模板
- 2026中國中煤陜西公司煤化工二期項目招聘54人考試參考題庫及答案解析
- 二年級小學音樂教案與活動設計
- BOPP材料性能及應用介紹
- 房地產項目關鍵節(jié)點管控方案及技巧
- 人工智能在職業(yè)院校人才培養(yǎng)中的應用研究報告
- 2025至2030全球及中國用戶研究軟件行業(yè)產業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 土方開挖回填施工應急預案方案
- 2025年普通高中學業(yè)水平選擇性考試(福建卷)歷史試題(含答案)
- 街道人民調解工作課件
- 年產10萬噸特種環(huán)氧樹脂項目可行性研究報告
- 自來水廠理論知識培訓課件
- 車間主管年終總結和明年方案
- 酒精戒斷的醫(yī)學解析
- 目標計劃與管理課件
- 城市道路單向交通組織原則
評論
0/150
提交評論