📄 ch13-1.asm
字号:
RS BIT P2.0
RW BIT P2.1
EN BIT P2.2
OFFSET EQU 31H
CNT EQU 32H
KEY EQU 33H
ORG 00H
ACALL INIT
MOV A,#10000000B
ACALL W_INS
MOV CNT,#10
MOV DPTR,#MSG0
ACALL W_STR
S1: ACALL KEYSCAN
MOV A,#-1
XCH A,KEY
CJNE A,#-1,S2
SJMP S1
S2: CJNE A,#0,S3
ACALL KEY1
S3: CJNE A,#1,S4
ACALL KEY2
S4: CJNE A,#2,S5
ACALL KEY3
S5: CJNE A,#3,S1
ACALL KEY4
SJMP S1
;
KEYSCAN:MOV KEY,#0
MOV R3,#2 ;COLUME NUM
MOV R4,#11111110B
K1: MOV A,R4
MOV P3,A
MOV A,P3
JNB ACC.2,K2
INC KEY
JNB ACC.3,K2
INC KEY
MOV A,R4
RL A
MOV R4,A
DJNZ R3,K1
K2: RET
;
KEY1: PUSH ACC
ACALL CLRLCD
MOV A,#10000000B
ACALL W_INS
MOV CNT,#10
MOV DPTR,#MSG1
ACALL W_STR
POP ACC
RET
;
KEY2: PUSH ACC
ACALL CLRLCD
MOV A,#10000000B
ACALL W_INS
MOV CNT,#12
MOV DPTR,#MSG2
ACALL W_STR
POP ACC
RET
;
KEY3: PUSH ACC
ACALL CLRLCD
MOV A,#10000000B
ACALL W_INS
MOV CNT,#13
MOV DPTR,#MSG3
ACALL W_STR
POP ACC
RET
;
KEY4: PUSH ACC
ACALL CLRLCD
MOV A,#10000000B
ACALL W_INS
MOV CNT,#6
MOV DPTR,#MSG4
ACALL W_STR
POP ACC
RET
;
INIT: MOV A,#00111000B ;FUNCTION SET
ACALL W_INS
MOV A,#00111000B
ACALL W_INS
MOV A,#00111000B
ACALL W_INS
MOV A,#00111000B
ACALL W_INS
MOV A,#00001000B ;OFF SCREEN
ACALL W_INS
MOV A,#00000001B ;CLR SCREEN
ACALL W_INS
MOV A,#00001110B ;DISPLAY CONTROL
ACALL W_INS
MOV A,#00000110B ;MODE SET
ACALL W_INS
RET
;
CLRLCD: MOV A,#00000001B
ACALL W_INS
RET
;
W_STR: MOV OFFSET,#0
NEXT: MOV A,OFFSET
MOVC A,@A+DPTR
ACALL W_DATA
INC OFFSET
DJNZ CNT,NEXT
RET
;
W_INS: ACALL CHECK
CLR RS
CLR RW
SETB EN
MOV P1,A
CLR EN
RET
;
W_DATA: ACALL CHECK
SETB RS
CLR RW
SETB EN
MOV P1,A
CLR EN
RET
;
CHECK: PUSH ACC
BUSY: CLR RS
SETB RW
SETB EN
MOV A,P1
CLR EN
JB ACC.7,BUSY
ACALL DELAY
POP ACC
RET
;
DELAY: MOV R6,#20
D1: MOV R7,#150
DJNZ R7,$
DJNZ R6,D1
RET
;
MSG0: DB '0123456789'
MSG1: DB 'I Love LCD'
MSG2: DB '11 Mar.,1998'
MSG3: DB 'R=10K. C=10uF'
MSG4: DB 'MCS-51'
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -