📄 elcclk.s
字号:
; E2003a.ASM
; (Keyboard scan and Digital display)
; Reference for Grade 2003, s.c.u.t.
; Edit by Lin
; 2006.3;
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: NOP
MOV SP,#60H
MOV 30H,#0FFH ; buffer for display
M01: ACALL KEYS
AJMP M01
; ------
KEYS: NOP ; sub:
ACALL DISP ; used for delay
MOV P2,#0F0H ; set all rows 0
MOV A,P2
ANL A,#0F0H
CJNE A,#0F0H,K01 ; any key push ?
AJMP KEYS ; wait again
; ---
K01: ACALL DISP ; for delay
MOV P2,#0F0H ; set all rows 0
MOV A,P2
ANL A,#0F0H
CJNE A,#0F0H,K02 ; be sure any key push ?
AJMP KEYS ; wait again
; ---
K02: MOV R3,A ; remain No. of row
MOV P2,#0FH ; set all column 0
MOV A,P2
ANL A,#0FH
CJNE A,#0FH,K03 ; any key push ?
AJMP KEYS ; wait again
; ---
K03: ACALL DISP ; for delay
MOV P2,#0FH ; set all column 0
MOV A,P2
ANL A,#0FH
CJNE A,#0FH,K04 ; any key push ?
AJMP KEYS ; wait again
; ---
K04: ORL A,R3 ; merge value of R & C
MOV R3,A
; ---
K05: ACALL DISP ; for delay
MOV P2,#0FH ; set all column 0
MOV A,P2
ANL A,#0FH
CJNE A,#0FH,K05 ; key release ?
; ---
MOV DPTR,#KEYT ; table for beyboard
MOV B,#12 ; key counter
MOV A,#0 ; shift value
K06: PUSH ACC ; temp. keep
MOVC A,@A+DPTR ; get value
CJNE A,3H,K07 ; value (R3) equals ?
POP ACC ; yes
ADD A,#12 ; table for display
MOVC A,@A+DPTR
MOV 30H,A ; buffer for display
ACALL DISP ; show
AJMP KEY1 ; scan again
k07: POP ACC ; take temp.
INC A ; shift +1
DJNZ B,K06 ; up to end ?
KEY1: RET
; ------
DISP: NOP ; sub:
MOV P0,#0C0H ; send first digit '0'
CLR P1.5 ; first LEDs on
ACALL DELAY
SETB P1.5 ; first LEDs off
MOV P0,30H ; send second digit
CLR P1.4 ; second LEDs on
ACALL DELAY
SETB P1.4 ; second LEDs off
RET
; ------
DELAY: ; sub:
MOV 28H,#03H ; delay 6.148ms
D02: MOV 29H,#0FFH
D01: DJNZ 29H,D01
DJNZ 28H,D02
RET
; ------
; keyboard value
KEYT: DB 0D7H ; for '0'
DB 0EEH ; for '1'
DB 0DEH ; for '2'
DB 0BEH ; for '3'
DB 0EDH ; for '4'
DB 0DDH ; for '5'
DB 0BDH ; for '6'
DB 0EBH ; for '7'
DB 0DBH ; for '8'
DB 0BBH ; for '9'
DB 0E7H ; for '#'
DB 0B7H ; for '*'
; ------
; display value
DB 0C0H ; for '0'
DB 0F9H ; for '1'
DB 0A4H ; for '2'
DB 0B0H ; for '3'
DB 99H ; for '4'
DB 92H ; for '5'
DB 82H ; for '6'
DB 0F8H ; for '7'
DB 80H ; for '8'
DB 90H ; for '9'
DB 8CH ; for *(P)
DB 86H ; for #(E)
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -