專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

51單片機(jī)4×4矩陣按鍵程序(匯編)

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年12月17日   【字體:

ORG 0000H
LJMP MAIN ;跳轉(zhuǎn)至主程序
ORG 0100H
MAIN: LCALL KEY_IN
MOV P0,A
LCALL DEL
AJMP MAIN
;======================
;判斷有無(wú)按鍵,無(wú)按鍵直接返回
;KEY_IN: MOV P1,#0F0H ;置行線為低電平,讀列線狀態(tài)(在高4位,無(wú)按鍵則全為1)
; MOV A,P1
; ANL A,#0F0H ;屏蔽低四位
; MOV B,A
; MOV P1,#0FH ;置列線為低電平,讀行線狀態(tài)(在低4位,無(wú)按鍵則全為1)
; MOV A,P1
; ANL A,#0FH
; ORL A,B ;高四位與低四位重新組合
; CJNE A,#0FFH,KEYSCAN ;0FFH為末按鍵
; RET
;==========================================
;//=============鍵盤(pán)掃描程序==============================================
;KEYSCAN:
KEY_IN: MOV R1,#0 ;初始化列地址
MOV R3,#11110111B ;初始化掃描碼
LOOP:
MOV A,R3
RL A
MOV R3,A ;保留掃描碼
MOV P1,A ;送掃描碼
MOV A,P1 ;讀鍵盤(pán)
ORL A,#0F0H ;屏蔽高四位
CJNE A,#0FFH,NEXT31 ;A不等于FFH,說(shuō)明該列有按鍵動(dòng)作
INC R1 ;列地址加1,準(zhǔn)備掃描下一列
CJNE R1,#4,LOOP ;列地址不等于4,掃描下一列
SJMP EXIT ;沒(méi)有按鍵,退出
;//=============按鍵判斷對(duì)應(yīng)位等于零,說(shuō)明該行有按鍵按下==================
NEXT31:
JB ACC.0,NEXT32
MOV R2,#0 ;第0行有按鍵
SJMP NEXT5
NEXT32:
JB ACC.1,NEXT33
MOV R2,#1 ;第1行有按鍵
SJMP NEXT5
NEXT33:
JB ACC.2,NEXT34
MOV R2,#2 ;第2行有按鍵
SJMP NEXT5
NEXT34:
MOV R2,#3 ;第3行有按鍵
NEXT5: ;計(jì)算按鍵地址
MOV A,R1
RL A
RL A ;列地址乘4(每列對(duì)應(yīng)4行)
ADD A,R2 ;加行地址
MOV DPTR,#KEYTAB
MOVC A,@A+DPTR
EXIT:
; MOV P1,#0FFH ;置鍵盤(pán)接口高電平
RET
;延時(shí)子程序,1s延時(shí)
DEL: MOV R7,#10
DEL1: MOV R6,#200
DEL2: MOV R5,#248
HERE: DJNZ R5,HERE
DJNZ R6,DEL2
DJNZ R7,DEL1
RET

;//=============按鍵名稱表================================================
KEYTAB:
DB 3fH ;掃描碼0 *****************************************
DB 06H ;掃描碼1 **
DB 5bH ;掃描碼2 I/O口 P1.0 P1.1 P1.2 P1.3 **
DB 4fH ;掃描碼3 **
DB 66H ;掃描碼4 P1.4 0 1 2 3 **
DB 6dH ;掃描碼5 **
DB 7dH ;掃描碼6 P1.5 4 5 6 7 **
DB 07H ;掃描碼7 **
DB 7fH ;掃描碼8 P1.6 8 9 A B **
DB 6fH ;掃描碼9 **
DB 77H ;掃描碼A P1.7 C D E F **
DB 7cH ;掃描碼B **
DB 39H ;掃描碼C *****************************************
DB 5eH ;掃描碼D
DB 79H ;掃描碼E
DB 71H ;掃描碼F
DB 00H
DB 00H
END 
關(guān)閉窗口

相關(guān)文章