?? 8.asm
字號:
;8個數碼管無擴展芯片移位顯示
;*****************************************************************************************************
kEY EQU 10H
KEYBUF EQU 20H
FLAG0 EQU 11H
ORG 0000H
AJMP START
ORG 100H
START: MOV 30H,#00H;1位
MOV 31H,#00H;2位
MOV 32H,#00H;3位
MOV 33H,#00H;4位
MOV 34H,#00H;5位
MOV 35H,#00H;6位
MOV 36H,#00H;7位
MOV 37H,#00H;8位
LOOP:LCALL DISPLAY;
LCALL KEYINPUT
MOV A,FLAG0 ;
JZ LOOP ;檢測有無按鍵
MOV 37H,36H ; 移位變換
MOV 36H,35H
MOV 35H,34H
MOV 34H,33H
MOV 33H,32H ;
MOV 32H,31H ;
MOV 31H,30H ;
MOV 30H,KEY ;
LJMP LOOP ;移位完成顯示和檢測鍵盤掃描
;*********************************************************************************************
;鍵盤掃描
KEYINPUT: MOV FLAG0,#00H
MOV P0,#0FFH
CLR P0.4
MOV A,P0
ANL A,#0FH
XRL A,#0FH ;有鍵按下嗎?
JZ NOKEY1
LCALL DELY10US
MOV A,P0
ANL A,#0FH
XRL A,#0FH ;真的有鍵按下嗎?異或:相同為0,不同為1
JZ NOKEY1 ;掃描下一行
MOV A,P0
ANL A,#0FH
CJNE A,#0EH,NK1 ;鍵碼的值是多少?P1.4xP1.0
MOV KEYBUF,#0
LJMP DK1
NK1: CJNE A,#0DH,NK2 ;鍵碼是P1.4xP1.1 ?
MOV KEYBUF,#1
LJMP DK1
NK2: CJNE A,#0BH,NK3 ;鍵碼是P1.4xP1.2 ?
MOV KEYBUF,#2
LJMP DK1
NK3: CJNE A,#07H,NK4 ;鍵碼是P1.4xP1.3 ?
MOV KEYBUF,#3
LJMP DK1
NK4: NOP
DK1: MOV A,KEYBUF
MOV DPTR,#TAB
MOVC A,@A+DPTR ;查表,取鍵值
MOV KEY,A
MOV FLAG0,#1 ;FLAG0=1
DK1A: MOV A,P0
ANL A,#0FH
XRL A,#0FH ;按鍵有沒有松開?
JNZ DK1A
RET
NOKEY1: MOV P0,#0FFH
CLR P0.5
MOV A,P0
ANL A,#0FH
XRL A,#0FH
JZ NOKEY2
LCALL DELY10US
MOV A,P0
ANL A,#0FH
XRL A,#0FH
JZ NOKEY2
MOV A,P0
ANL A,#0FH
CJNE A,#0EH,NK5
MOV KEYBUF,#4
LJMP DK2
NK5: CJNE A,#0DH,NK6
MOV KEYBUF,#5
LJMP DK2
NK6: CJNE A,#0BH,NK7
MOV KEYBUF,#6
LJMP DK2
NK7: CJNE A,#07H,NK8
MOV KEYBUF,#7
LJMP DK2
NK8: NOP
DK2: MOV A,KEYBUF
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV KEY,A
MOV FLAG0,#1 ;FLAG0=1
DK2A: MOV A,P0 ;判斷是否釋放按鍵
ANL A,#0FH
XRL A,#0FH
JNZ DK2A
RET
NOKEY2: MOV P0,#0FFH
CLR P0.6
MOV A,P0
ANL A,#0FH
XRL A,#0FH
JZ NOKEY3
LCALL DELY10US
MOV A,P0
ANL A,#0FH
XRL A,#0FH
JZ NOKEY3
MOV A,P0
ANL A,#0FH
CJNE A,#0EH,NK9
MOV KEYBUF,#08h
LJMP DK3
NK9: CJNE A,#0DH,NK10
MOV KEYBUF,#09h
LJMP DK3
NK10: CJNE A,#0BH,NK11
MOV KEYBUF,#0AH
LJMP DK3
NK11: CJNE A,#07H,NK12
MOV KEYBUF,#0BH
LJMP DK3
NK12: NOP
DK3:
MOV A,KEYBUF
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV KEY,A
MOV FLAG0,#1 ;FLAG0=1
DK3A: MOV A,P0 ;按鍵有沒有松開?
ANL A,#0FH
XRL A,#0FH
JNZ DK3A
RET
NOKEY3:
MOV P0,#0FFH
CLR P0.7
MOV A,P0
ANL A,#0FH
XRL A,#0FH
JZ NOKEY4
LCALL DELY10US
MOV A,P0
ANL A,#0FH
XRL A,#0FH
JZ NOKEY4
MOV A,P0
ANL A,#0FH
CJNE A,#0EH,NK13
MOV KEYBUF,#0Ch
LJMP DK4
NK13: CJNE A,#0DH,NK14
MOV KEYBUF,#0DH
LJMP DK4
NK14: CJNE A,#0BH,NK15
MOV KEYBUF,#0EH
LJMP DK4
NK15: CJNE A,#07H,NK16
MOV KEYBUF,#0Fh
LJMP DK4
NK16: NOP
DK4: MOV A,KEYBUF
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV KEY,A
MOV FLAG0,#1 ;FLAG0=1
DK4A: MOV A,P0 ;按鍵有沒有松開?
ANL A,#0FH
XRL A,#0FH
JNZ DK4A
RET
NOKEY4: MOV A, FLAG0
CLR A
MOV FLAG0,A
RET
TAB: DB 01H,02H,03H,0aH ;<--顯示碼|內碼-->/*鍵盤碼00,01,02,03,*/
DB 04H,05H,06H,0bH ;/*鍵盤碼04,05,06,07,*/
DB 07H,08H,09H,0cH ;/*鍵盤碼08,09,0a,0b,*/
DB 0eH,00H,0fH,0dH ;/*鍵盤碼0c,0d,0e,0f*/
;**********************************************************************************************************
;************************************************************************************************************
;8位數碼管顯示程序
DISPLAY: MOV P1,#0FFH
MOV A,30H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P1,A
CLR P2.0
LCALL DELAY1MS
SETB P2.0
MOV A,31H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P1,A
CLR P2.1
LCALL DELAY1MS
SETB P2.1
MOV A,32H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P1,A
CLR P2.2
LCALL DELAY1MS
SETB P2.2
MOV A,33H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P1,A
CLR P2.3
LCALL DELAY1MS
SETB P2.3
MOV A,34H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P1,A
CLR P2.4
LCALL DELAY1MS
SETB P2.4
MOV A,35H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P1,A
CLR P2.5
LCALL DELAY1MS
SETB P2.5
MOV A,36H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P1,A
CLR P2.6
LCALL DELAY1MS
SETB P2.6
MOV A,37H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P1,A
CLR P2.7
LCALL DELAY1MS
SETB P2.7
RET
TAB1: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H
DB 8EH,89H,8CH
;******************************************************************************************************
;延時程序
DELAY1MS: MOV R4,#14H
DL1: MOV R5,#19H
DL2: DJNZ R5,DL2
DJNZ R4,DL1
RET
DELY10US: MOV R6,#10
DJNZ R6,$
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -