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 + -
显示快捷键?