?? jianpan.asm
字號:
ORG 0000H
JMP INI
INI: MOV R1,#72H ;初始化數(shù)據(jù)緩存區(qū)72H,71H,70H,6FH
MOV R6,#0EFH ;初始化行列值
MOV R4,#00H ;
;******************************************
;
; 2*2 鍵盤顯示主程序
;
;******************************************
MAIN:
LCALL KEY
LCALL DISPLAY
SJMP MAIN
;******************************************
; 鍵盤掃描子程序
;
;******************************************
;******************************************************
;鍵盤掃描子程序
;******************************************************
KEY: MOV A,R6
MOV P2,A ;2口送出初始化行列值(P2.0,2.1,2.2,2.3為高電平)
;( P2.4,2.5,2.6,2.7 為列, 2.4為低電平(0列))
LCALL DELAY1 ;調(diào)用延時
MOV A,P2 ;讀取P2口的值進行后面的判斷
JB ACC.0,NEXT1 ;判斷第0列,不是0行被阿下
WKEY1: MOV A,P2 ;是0行被按下
JNB ACC.0,WKEY1 ;等待0行按鍵釋放
MOV A,R4 ;紀(jì)錄當(dāng)前列值
MOV DPTR,#INDEX1;初始化數(shù)據(jù)表指針
MOVC A,@A+DPTR ;查表獲得按鍵的標(biāo)號值
MOV @R1,A ;將查得的數(shù)據(jù)放置在按鍵存儲區(qū)內(nèi)(72H)
DEC R1 ;存儲區(qū)地址減一運算指向(71H)單元
LJMP PANDUAN ;調(diào)用PANDUAN子程序,判斷數(shù)據(jù)單元是否已存滿
NEXT1: JB ACC.1,PANDUAN ;判斷不是第1行被按下
WKEY2: MOV A,P2
JNB ACC.1,WKEY2
MOV A,R4
MOV DPTR,#INDEX2
MOVC A,@A+DPTR
MOV @R1,A
DEC R1
PANDUAN:CALL DELAY1
CJNE R1,#6FH,SKIP ;如果未存滿,即不等于6FH,執(zhí)行下一輪掃描
MOV R1,#72H ;如果已存滿,存儲區(qū)重新賦值
SKIP: MOV A,R6 ;列數(shù)據(jù)移入累加器
RL A ;左移列數(shù)據(jù),掃描下一列,01列
MOV R6,A ;暫存列數(shù)據(jù)
INC R4 ;紀(jì)錄01列數(shù)值
CJNE R4,#04H,KEY ;判斷列數(shù)值是否掃完,如果沒有,繼續(xù)進行循環(huán)
MOV R6,#0EFH ;--------------掃完,重新賦初始值
MOV R4,#00H
RET
;**********************************************
; 數(shù)碼管顯示子程序
; DATA BUFFER: 72H,71H,70H,6FH
; P1.0,P1.1,P1.2,P1.3-----data show;
; P3.0,P3.1,P3.2,P3.3-----control;
; high power is Valid
;
;**********************************************
DISPLAY:MOV A,72H
DA A
MOV P1,A
SETB P3.0
CLR P3.1
CLR P3.2
CLR P3.3
LCALL DELAY1
MOV A,71H
DA A
MOV P1,A
SETB P3.1
CLR P3.0
CLR P3.2
CLR P3.3
LCALL DELAY1
MOV A,70H
DA A
MOV P1,A
SETB P3.2
CLR P3.0
CLR P3.1
CLR P3.3
LCALL DELAY1
MOV A,6FH
DA A
MOV P1,A
SETB P3.3
CLR P3.0
CLR P3.1
CLR P3.2
LCALL DELAY1
RET
DELAY1: MOV R5,#0FFH
DJNZ R5,$
MOV R5,#0FFH
DJNZ R5,$
MOV R5,#0FFH
DJNZ R5,$
MOV R5,#0FFH
DJNZ R5,$
RET
;**********************************************
;* 按鍵表
;**********************************************
INDEX1: DB 0,1,2,3
INDEX2: DB 4,5,6,7
INDEX3: DB 8,9,10,11
INDEX4: DB 12,13,14,15
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -