1603a4.asm
来自「STN ST7920 TEST CODE AND SPEC.」· 汇编 代码 · 共 237 行
ASM
237 行
;30H IS DISPLAY DATE BUFFER
RS EQU P3.6
RW EQU P3.0
E EQU P3.5
REST EQU P3.7
ORG 0000H
AJMP MAIN
MAIN:
LCALL INITIAL
LCALL CGRAMWR
LCALL DISPLAY
RET
;*********DISPLAY SUBPROGRAM********
DISPLAY:
MOV DPTR,#LINE1A
LCALL SCREENWRITE
;MOV 30H,#4BH
;LCALL SCREENWRITE
;MOV 30H,#20H
;LCALL SCREENWRITE
MOV R4,#0AH
MOV 30H,#00H
DIS1L1:
LCALL SCREENWRITE
INC 30H
DJNZ R4,DIS1L1
AJMP DISPLAY
RET
;*******ONE SCREEN DATE WRITE********
SCREENWRITE:
MOV A,#30H ;RE=0
LCALL WRITE_S ;0011 0000B
LCALL BUSYCHECK
MOV A,#08H ;DISPLAY OFF
LCALL WRITE_S ;0000 1000B
LCALL BUSYCHECK
MOV A,#80H ;SET DDRAM ADDRESS IS 00H
LCALL WRITE_S ;1000 0000B
LCALL BUSYCHECK
LCALL LINEWRITE ;FIRST LINE WRITE
MOV A,#090H ;SET DDRAM ADDRESS IS 20H
LCALL WRITE_S ;1010 0000B
LCALL BUSYCHECK
LCALL LINEWRITE ;SECOND LINE WRITE
MOV A,#0A0H ;SET DDRAM ADDRESS IS 40H
LCALL WRITE_S ;1100 0000B
LCALL BUSYCHECK
LCALL LINEWRITE ;THIRD LINE WRITE
MOV A,#0B0H ;SET DDRAM ADRESS IS 60H
LCALL WRITE_S ;1110 0000B
LCALL BUSYCHECK
LCALL LINEWRITE ;FORTH LINE WRITE
MOV A,#0CH ;DISPLAY ON
LCALL WRITE_S ;0000 1100B
LCALL BUSYCHECK
LCALL DELAY2S
RET
;*****WRITE DATE TO ONE LINE******
LINEWRITE:
MOV R5,#20
LI1L1:
MOV A,30H
LCALL WRITE_D
LCALL BUSYCHECK
DJNZ R5,LI1L1
RET
;******WRITE DATE TO CGRAM*******
CGRAMWR:
MOV A,#40H
LCALL WRITE_S
LCALL BUSYCHECK
MOV 40H,#0AAH
LCALL CG1WRITE
MOV A,#48H
LCALL WRITE_S
LCALL BUSYCHECK
MOV 40H,#055H
LCALL CG1WRITE
MOV A,#50H
LCALL WRITE_S
LCALL BUSYCHECK
MOV 41H,#00H
MOV 42H,#0FFH
LCALL CG2WRITE
MOV A,#58H
LCALL WRITE_S
LCALL BUSYCHECK
MOV 41H,#0FFH
MOV 42H,#00H
LCALL CG2WRITE
MOV A,#60H
LCALL WRITE_S
LCALL BUSYCHECK
MOV 41H,#0AAH
MOV 42H,#55H
LCALL CG2WRITE
MOV A,#68H
LCALL WRITE_S
LCALL BUSYCHECK
MOV 41H,#055H
MOV 42H,#0AAH
LCALL CG2WRITE
RET
;********CGRAM DATE WRITE 1********
CG1WRITE:
MOV R4,#08H
CG1L1:
MOV A,40H
LCALL WRITE_D
LCALL BUSYCHECK
DJNZ R4,CG1L1
RET
;********CGRAMDATE WRITE 2*********
CG2WRITE:
MOV R4,#04H
CG2L1:
MOV A,41H
LCALL WRITE_D
LCALL BUSYCHECK
MOV A,42H
LCALL WRITE_D
LCALL BUSYCHECK
DJNZ R4,CG2L1
RET
;*********INITIALIZING SUBPROGRAM***
INITIAL:
LCALL DELAY20mS
LCALL DELAY20mS
CLR REST
LCALL DELAY20ms
SETB REST
LCALL DELAY20ms
MOV A,#30H
LCALL WRITE_S
LCALL DELAY4mS
MOV A,#30H
LCALL WRITE_S
LCALL DELAY100uS
MOV A,#30H
LCALL WRITE_S
LCALL BUSYCHECK
MOV A,#30H ;RE=0
LCALL WRITE_S ;0011 0000B
LCALL BUSYCHECK
MOV A,#08H ;DISPLAY OFF
LCALL WRITE_S ;0000 1000B
LCALL BUSYCHECK
MOV A,#01H ;CLEAR DISPLAY
LCALL WRITE_S ;0000 0001B
LCALL BUSYCHECK
MOV A,#06H ;I/D=1 S=0
LCALL WRITE_S ;0000 0110
LCALL BUSYCHECK
MOV A,#34H ;RE=1
LCALL WRITE_S ;0011 0100B
LCALL BUSYCHECK
MOV A,#09H
LCALL WRITE_S
LCALL BUSYCHECK
MOV A,#09H ;4 LINES DISPLAY(5*8DOT)
LCALL WRITE_S ;0000 1001B
LCALL BUSYCHECK
RET
;********WRITE STATUS DATE TO IC****
WRITE_S:
CLR RS
CLR RW
SETB E
MOV P1,A
CLR E
RET
;********WRITE DISPLAY DATE TO IC****
WRITE_D:
SETB RS
CLR RW
SETB E
MOV P1,A
CLR E
RET
;********BUSY CHECK SUBPROGRAM******
BUSYCHECK:
MOV R7,#40
DJNZ R7,$
; MOV P1,#0FFH
; CLR RS
; SETB RW
;BULP:
; SETB E
; NOP
; MOV A,P1
; CLR E
; JB ACC.7,BULP
RET
;*************DELAY 20ms************
DELAY20mS:
MOV R7,#50
DE1L1:
MOV R6,#200
DJNZ R6,$
DJNZ R7,DE1L1
RET
;************DELAY 5ms**************
DELAY4mS:
MOV R7,#50
DE2L1:
MOV R6,#50
DJNZ R6,$
DJNZ R7,DE2L1
RET
;**********DELAY 100uS**************
DELAY100uS:
MOV R7,#60
DJNZ R7,$
RET
;*********DELAY 2S******************
DELAY2S:
MOV R5,#0AH
DE3L1:
DJNZ R7,$
DJNZ R6,$-2
DJNZ R5,DE3L1
RET
LINE1A:DB"и琌
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?