12232f.txt

来自「LCD_12232液晶平模块与8031单片机的通信及显示处理C程序」· 文本 代码 · 共 364 行

TXT
364
字号
; 12232F 与8031的通信接口
;	RS--------P3.3
;	R/W-------P3.1
;	E---------P3.0
;	DB0~7-----P1

DI		EQU	P3.3
RW	    EQU	P3.1
E		EQU	P3.0

	ORG	0000H
	AJMP	START
	ORG	0003H
	LCALL 	PAUSE
START:
	MOV  IE,#81H 	       ;EXT. INT0 PERMIT
	MOV  IP,#01H 	       ;INT0 IS FIRST INT. LEVEL
	MOV  TCON,#00H	       ;TIMER/COUNTER CONTROLER INIT.
	mov  SP, #67h
	LCALL DELAY
	LCALL DELAY
	LCALL SETUP
	LCALL DEF_CHAR
	MOV  A,#80H
	LCALL WRITE_COM
	MOV  R3,#8
TEST11:	
MOV  DPTR,#CGRAM1	;CGRAM TEST
	LCALL WRITE_CGRAM
	DJNZ R3,TEST11
	MOV  A,#90H
	LCALL WRITE_COM
	MOV  R3,#8
TEST12:	
MOV  DPTR,#CGRAM1
	LCALL WRITE_CGRAM
	DJNZ  R3,TEST12
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	MOV  A,#80H
	LCALL WRITE_COM
	MOV  R3,#8
TEST21:	
MOV  DPTR,#CGRAM2
	LCALL WRITE_CGRAM
	DJNZ R3,TEST21
	MOV  A,#90H
	LCALL WRITE_COM
	MOV  R3,#8
TEST22:	
MOV  DPTR,#CGRAM2
	LCALL WRITE_CGRAM
	DJNZ  R3,TEST22
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	MOV  A,#80H
	LCALL WRITE_COM	
	MOV  R3,#8
TEST31:	
MOV  DPTR,#CGRAM3
	LCALL WRITE_CGRAM
	DJNZ R3,TEST31
	MOV  A,#90H
	LCALL WRITE_COM
	MOV  R3,#8
TEST32:	
MOV  DPTR,#CGRAM3
	LCALL WRITE_CGRAM
	DJNZ  R3,TEST32
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	MOV  A,#80H
	LCALL WRITE_COM	
	MOV  R3,#8
TEST41:	
MOV  DPTR,#CGRAM4
	LCALL WRITE_CGRAM
	DJNZ R3,TEST41
	MOV  A,#90H
	LCALL WRITE_COM
	MOV  R3,#8
TEST42:	
MOV  DPTR,#CGRAM4
	LCALL WRITE_CGRAM
	DJNZ  R3,TEST42
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	
	MOV  A#80H		;WORD TEST
	LCALL WRITE_COM
	MOV  DPTR,#CHINESE
	LCALL WRITE_HZ
	MOV  A,#90H
	LCALL WRITE_COM
	MOV DPTR,#TABLE1
	LCALL WRITE_ASCII
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	MOV  A#80H
	LCALL WRITE_COM
	MOV  DPTR,#table1
	LCALL WRITE_ascii
	MOV  A,#90H
	LCALL WRITE_COM
	MOV DPTR,#chinese
	LCALL WRITE_hz
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
AAA:	LJMP START

SETUP:
	LCALL DELAY
	LCALL DELAY
	LCALL DELAY
	MOV  A,#01H		;CLEAR DISPLAY
	LCALL WRITE_COM
	MOV  A,#00110000B	;FUNCTION SETTING
	LCALL WRITE_COM
	MOV  A,#00000010B	;DDRAM SET TO '00H'
	LCALL WRITE_COM
	MOV  A,#00000100B	;
	LCALL WRITE_COM
	MOV  A,#00001100B	;DISPLAY ON
	LCALL WRITE_COM
	MOV  A,#00000001B	;CLEARING SCREEN
	LCALL WRITE_COM
	MOV  A,#10000000B	;SET DDRAM ADDRESS
	LCALL WRITE_COM
	RET

WRITE_COM:				;WRIT///cv
;WRITE COMMANDS TO ST7920
	LCALL DELAY1		;INSTEAD OF CHECKING BF STATE
	CLR  RS
	CLR  RS
	CLR  RW
	CLR  RW
	MOV  P1,A
	MOV  P1,A
	SETB E
	SETB E
	NOP
	NOP
	CLR  E
	CLR  E
	;LCALL DELAY1
	RET
WRITE_DAT:			;WRITE DISPLAY DATAS TO ST79220
	LCALL DELAY1
	SETB RS
	SETB RS
	CLR  RW
	CLR  RW
	MOV  P1,A
	MOV  P1,A
	SETB E
	SETB E
	NOP
	NOP
	CLR  E
	CLR  E
	RET
	
DELAY1:
	MOV  R7,#010H
D11:	MOV  R6,#010H
	DJNZ R6,$
	DJNZ R7,D11
	RET

DELAY:
	MOV  R1,#00H
D2:	MOV  R2,#00H
	DJNZ R2,$
	DJNZ R1,D2
	RET
	
DEF_CHAR:			;WRITE TO CGRAM
	MOV  A,#01000000B	;SET CGRAM ADDRESS
	LCALL WRITE_COM	
	MOV  R3,#8
DEF1:	
MOV  A,#000H
	LCALL WRITE_DAT
	LCALL WRITE_DAT
	MOV  A,#0FFH
	LCALL WRITE_DAT
	LCALL WRITE_DAT
	DJNZ R3,DEF1
	MOV  R3,#8
DEF2:	
MOV  A,#0AAH
	LCALL WRITE_DAT
	LCALL WRITE_DAT
	MOV  A,#0AAH
	LCALL WRITE_DAT
	LCALL WRITE_DAT
	DJNZ R3,DEF2
	MOV  R3,#8
DEF3:	
MOV  A,#055H
	LCALL WRITE_DAT
	LCALL WRITE_DAT
	MOV  A,#0AAH
	LCALL WRITE_DAT
	LCALL WRITE_DAT
	DJNZ R3,DEF3
	mov  R3,#8
DEF4:	
MOV  A,#0FFH
	LCALL WRITE_DAT
	LCALL WRITE_DAT
	LCALL WRITE_DAT
	LCALL WRITE_DAT
	DJNZ R3,DEF4
	RET
WRITE_ASCII:
		MOV  R4,#16
DDDD:	CLR  A
		MOVC A,@A+DPTR
		LCALL WRITE_DAT
		INC  DPTR
		DJNZ R4,DDDD
		RET
WRITE_HZ:		;WRITE 8 CHINESE TO LCD
		MOV  R4,#8
DD:	CLR  A
		MOVC A,@A+DPTR
		INC  DPTR
		LCALL WRITE_DAT
		CLR  A
		MOVC A,@A+DPTR
		INC DPTR
		LCALL WRITE_DAT
		DJNZ R4,DD
		RET
	
WRITE_CGRAM:		;CGRAM TESTING
		CLR  A
		MOVC A,@A+DPTR
		LCALL WRITE_DAT
		INC  DPTR
		CLR  A
		MOVC A,@A+DPTR
		LCALL WRITE_DAT
		RET
PAUSE:	SETB	P3.2		;PAUSE KEY PROCESS
		SETB	P3.2
		LCALL	DELAY1
		MOV	C,P3.2
		MOV	C,P3.2
		JNC	PAUSE		;CHECK KEY WAS PRESSED
PAUSE1:	MOV	C,P3.2
		MOV	C,P3.2
		LCALL	DELAY1
		JC	PAUSE1		;CHECK KEY OPEN AFTER PRESSED
PAUSE2:	SETB	P3.2
	SETB	P3.2
	LCALL	DELAY1
	MOV	C,P3.2
	MOV	C,P3.2
	JNC	PAUSE2		;CHECK KEY WAS PRESSED AGAIN
	RETI
	
TABLE1:	
;“这里是16*8点阵的字符代码”
CGRAM1:	DB 000H,000H       ;这里是自造字符地址表 
CGRAM2:	DB 000H,002H
CGRAM3:	DB 000H,004H
CGRAM4:	DB 000H,006H
CHINESE:
;“这里是16*16点阵的汉字代码表”
END

以下为串口写指令和数据的子程序:
WRITE_COM:			
	LCALL DELAY1		;INSTEAD OF CHECKING BF STATE
		SETB  CS
		PUSH  ACC
		MOV  R0,#8
		MOV  A,#11111000B
COMM1:	
CLR  C
		RLC  A
		MOV  SID,C
		CLR  CLK
		SETB CLK
		DJNZ R0,COMM1
		POP  ACC
		MOV  R5,A
		ANL  A,#0F0H
		MOV  R0,#8
COMM2:	CLR  C
		RLC  A
		MOV  SID,C
		CLR  CLK
		SETB CLK
		DJNZ R0,COMM2
		MOV  A,R5
		SWAP A
		ANL  A,#0F0H
		MOV  R0,#8
COMM3:	CLR  C
		RLC  A
		MOV  SID,C
		CLR  CLK
		SETB CLK
		DJNZ R0,COMM3
		CLR  CS
	RET
WRITE_DAT:		
		LCALL DELAY1
		SETB CS
		PUSH  ACC
		MOV  R0,#8
		MOV  A,#11111010B
DATA1:	CLR  C
		RLC  A
		MOV  SID,C
		CLR  CLK
		SETB CLK
		DJNZ R0,DATA1
		POP  ACC
		MOV  R5,A
		ANL  A,#0F0H
		MOV  R0,#8
DATA2:	CLR  C
		RLC  A
		MOV  SID,C
		CLR  CLK
		SETB CLK
		DJNZ R0,DATA2
		MOV  A,R5
		SWAP A
		ANL  A,#0F0H
		MOV  R0,#8
DATA3:	CLR  C
		RLC  A
		MOV  SID,C
		CLR  CLK
		SETB CLK
		DJNZ R0,DATA3
		CLR  CS
	RET

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?