本人匯編語言小白,學習匯編語言9個星期,想請問一下各位同在學習51匯編語言的同學,我想實作用4X4矩陣鍵盤實作對8位動態數碼管的控制,就像平時那種撥打電話的電話盤,也可以用一個按鍵實作減位操作。
下面是我編的一段程式,想實作控制矩陣鍵盤的輸入,使8位動態數碼上輸入一個數顯示一個數,輸入兩個數,顯示兩個數。
DAT EQU P2 //數碼管資料口
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#60H //開辟堆疊地址
MOV R4,#00H //R4為輸入計數器
MOV R0,#50H //R0用來存放資料段的地址
START:
LCALL KEYSCAN //呼叫按鍵掃描
LCALL STORAGE //存盤段碼
SHOW:LCALL SCAN1
MOV DPTR,#JPTAB
MOV A,R4
DEC A
JMP @A+DPTR
JPTAB:LJMP KP1
LJMP KP2
KP1:MOV DAT,50H
MOV P1,#80H
LCALL DELAY250MS
LJMP SHOW
KP2:MOV DAT,51H
MOV P1,#80H
LCALL DELAY250MS
MOV DAT,50H
MOV P1,#40H
LCALL DELAY250MS
LJMP SHOW
KEYSCAN: //按鍵掃描函式
MOV P3,#0FH //按鍵置輸入狀態 高四位輸出 低四位輸入
MOV A,P3
ANL A,#0FH
CJNE A,#0FH,SCAN
SJMP KEYSCAN
RET
SCAN:
MOV R1,#0EFH
MOV R2,#04H
MOV R3,#00H
KEY1:MOV A,R1
MOV P3,A
RL A
MOV R1,A
MOV A,P3
ANL A,#0FH
CJNE A,#0FH,DEG
INC R3
DJNZ R2,KEY1
EXIT:MOV A,#0FFH
SJMP DONE
DEG:JB ACC.0,JH1
MOV A,#00H
AJMP JH
JH1:JB ACC.1,JH2
MOV A,#04H
AJMP JH
JH2:JB ACC.2,JH3
MOV A,#08H
AJMP JH
JH3:JB ACC.3,DONE
MOV A,#0CH
JH:ADD A,R3
MOV R2,A //R2為存盤鍵值
INC R4
STORAGE:MOV DPTR,#DUANMA //段碼表
MOV A,R2 //存盤掃描得到的鍵值
MOVC A,@A+DPTR
CPL A
MOV @R0,A
INC R0
DONE: RET
SCAN1: MOV P3,#0FH //按鍵置輸入狀態 高四位輸出 低四位輸入
MOV A,P3
ANL A,#0FH
CJNE A,#0FH,Y1
RET
Y1:LCALL SCAN
LCALL STORAGE
RET
DELAY1MS: //延時一毫秒
MOV R4,#250 //R4用過
D1:NOP
NOP
DJNZ R4,D1
RET
DELAY250MS:
MOV R5,#250
D2:MOV R4,#250 //R4用過
D3:NOP
NOP
DJNZ R4,D3
DJNZ R5,D2
RET
DUANMA:
DB 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 ;共陰段碼0123456789ABCDEF
END
proteus電路圖
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/200413.html
標籤:單片機/工控
