📄 jp.asm
字号:
KEYBUF EQU 30H
LCD_RS EQU P2.7
LCD_RW EQU P2.6
LCD_EN EQU P2.5
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV KEYBUF,#-23
ACALL LCD
XH: ACALL KEY_B
ACALL XS
AJMP XH
KEY_B:
MOV P3,#0FH
MOV A,P3
ANL A,#0FH
CJNE A,#0FH,L1
AJMP WJ
L1: ACALL DELAY15MS
MOV R1,#0EFH
L2: MOV P3,R1
MOV A,P3
ANL A,#0FH
CJNE A,#0FH,L3
MOV A,R1
RL A
MOV R1,A
CJNE A,#0FEH,L2
WJ:
RET
L3:MOV R2,A
MOV A,R1
ANL A,#0F0H
ORL A,R2
MOV 06H,A
MOV R3,#00
MOV DPTR,#KEYTBL
L4:MOV A,R3
MOVC A,@A+DPTR
CJNE A,06H,L5
AJMP L6
L5:INC R3
AJMP L4
L6:ACALL DELAY15MS
MOV P3,#0FH
MOV A,P3
ANL A,#0FH
CJNE A,#0FH,L6
MOV KEYBUF,R3
RET
KEYTBL: DB 0EEH,0EDH,0EBH,0E7H,0DEH,0DDH,0DBH,0D7H,0BEH,0BDH,0BBH,0B7H,7EH,7DH,7BH,77H
LCD:
MOV SP, #60H
MOV P1, #0FFH
MOV P2, #0FFH
CALL LCD_INI
LCALL L7
MOV R1, #0
MOV DPTR, #MESSAGE1
MOV R0, #0
MOV R1,#0
DISCHA:
CALL CHECK_BUSY
MOV A, #80H
ADD A, R0
CALL WCOM
CALL CHECK_BUSY
MOV A, R1
MOVC A, @A+DPTR
CALL WDATA
INC R0
INC R1
CJNE R0, #10, DISCHA
MOV R0,#00H
MOV R1,#0
MOV DPTR, #KEYT
MOV A, #0C0H
DISCHA1: CALL CHECK_BUSY
MOV A, #0C0H
ADD A, R0
CALL WCOM
CALL CHECK_BUSY
MOV A,R1
MOVC A, @A+DPTR
CALL WDATA
INC R0
INC R1
CJNE R0, #15, DISCHA1
RET
XS: CALL CHECK_BUSY
MOV A, #0CCH
CALL WCOM
CALL CHECK_BUSY
MOV A, KEYBUF
CLR C
SUBB A,#0AH
JC SZ
ADD A,#41H
AJMP EN
SZ: MOV A,KEYBUF
ADD A,#30H
EN: CALL WDATA
RET
LCD_INI:
CALL DELAY15MS
MOV A, #38H
CALL WCOM
CALL DELAY5MS
MOV A, #38H
CALL WCOM
CALL DELAY5MS
MOV A, #38H
CALL CHECK_BUSY
MOV A, #38H
CALL WCOM
CALL CHECK_BUSY
MOV A, #08H
CALL WCOM
CALL CHECK_BUSY
MOV A, #01H
CALL WCOM
CALL CHECK_BUSY
MOV A, #06H
CALL WCOM
CALL CHECK_BUSY
MOV A, #0CH
CALL WCOM
RET
WDATA:
MOV P1, A
SETB LCD_RS
CLR LCD_RW
SETB LCD_EN
CALL DELAY1MS
CLR LCD_EN
NOP
RET
WCOM:
MOV P1, A
CLR LCD_RS
CLR LCD_RW
SETB LCD_EN
CALL DELAY1MS
CLR LCD_EN
NOP
RET
CHECK_BUSY:
RET
PUSH ACC
MOV P1, #0FFH
CLR LCD_RS
SETB LCD_RW
SETB LCD_EN
NOP
WAIT1:
MOV A, P1
ANL A, #80H
JZ WAIT2
JMP WAIT1
WAIT2:
CLR LCD_EN
POP ACC
RET
DELAY5MS:
MOV R7, #10
LOOP: MOV R6, #250
DJNZ R6, $
DJNZ R7, LOOP
RET
DELAY15MS:
MOV R7, #30
LOOP1: MOV R6, #250
DJNZ R6, $
DJNZ R7, LOOP1
RET
DELAY1MS:
MOV R7, #2
LOOP2: MOV R6, #250
DJNZ R6, $
DJNZ R7, LOOP2
RET
DELAY1S:
MOV R7, #10
LOOP4: MOV R6, #200
LOOP3: MOV R5, #250
DJNZ R5, $
DJNZ R6, LOOP3
DJNZ R7, LOOP4
RET
L7:
mov a,#40h
CALL Wcom
CALL CHECK_BUSY
mov r2,#64
mov r1,#00h
mov dptr,#cg
vg: mov a,r1
movc a,@a+dptr
mov p0,a
CALL WDATA
CALL CHECK_BUSY
inc r1
djnz r2,vg
ret
cg: db 0eh,00h,1fh,0ah,0ah,0ah,13h,00h
db 08h, 0fh,12h,0fh, 0ah, 1fh, 02h, 02h
db 0fh, 09h, 0fh, 09h, 0fh, 09h, 11h, 00h
db 1fh, 11h, 11h, 1fh, 11h, 11h, 1fh, 00h
db 1fh, 04h, 04h, 04h, 04h, 04h, 04h, 1fh
db 0ah,0ah, 1bh, 1bh, 0ah, 0ah, 0ah, 1fh
db 18h,18h, 07h, 08h, 08h, 08h, 07h, 00h
db 18h,18h, 07h, 08h, 08h, 08h, 07h, 00h
MESSAGE1:
DB "2008",01h ,"7",02,"21",03," "
KEYT: DB "Enter a key: "
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -