⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disp.as

📁 lcm显示功能
💻 AS
字号:
; ---------------------------------------------------------------------------------------
; - Suported library for LCD graphic display EL12864A. This is fast way to paint image 	-
; - and write our text to graphic display. Use application Image Converter for convert 	-
; - image in *.BMP format to three code compress array type (None, Zero, Full).		-
; - 											-
; -           You can download Image Converter V1.1 from www.imfsoft.com		-
; - 											-
; ---------------------------------------------------------------------------------------


PUBLIC DISP_ROW,DISP_COL
PUBLIC DISP_CLEAR,DISP_ON,DISP_OFF,DISP_INIT
PUBLIC DISP_ICON,DISP_TEXT,DISP_WRITE
EXTRN BIT(RS,E,CS1,CS2,RESET)
EXTRN NUMBER(M)

Time_Delay EQU 40	; Time delay +-40us (AT89C51 12MHz)

mdata SEGMENT DATA
rseg mdata

DISP_ROW: DS	1	; Position in ROW <0..7>
DISP_COL: DS	1	; Position in COLUMN <0..63>
DISP_ACT: DS	1	; Actualy position in COLUMN	

mprog SEGMENT CODE
rseg mprog
  
; ****************************************
; Routines for graphic display
; ****************************************
; ----------------------------------------
; Inicialization routine
; ----------------------------------------
DISP_INIT:		
	CLR	RESET
	CLR	CS1
	CLR	CS2
	CLR	RS
	SETB	RESET				
	CALL	DISP_OFF
	CALL	DISP_ON
	CALL	DISP_CLEAR
	RET

; ----------------------------------------
; Routine for writing text in ASCII code at screen
; In: R0 ........ Pointer to Array with text
;     A ......... Length text 
;     B ......... Height text <0..1> 	
;     DISP_ROW .. Position in ROW <0..7>
;     DISP_COL .. Position in COLUMN <0..63>
; -----------------------------------------
DISP_TEXT:
	PUSH	DISP_ROW
	PUSH	M
	PUSH	M+1
	PUSH	M+2
	PUSH	B
	PUSH	Acc		
	PUSH	PSW		; Uses bit F0 from PSW (users programable)

	MOV	M,A		; Save length text
	ANL	B,#1		; Reduce height at 1	
	MOV	M+1,B		; Save height text
	INC	M+1	
	MOV	A,B		; F0 is PSW.5 bit (users programable)
	MOV	C,Acc.0		; F0=Log0 -> Small Text 
	MOV	F0,C		; F0=Log1 -> Large Text		
DISP_T1:
	MOV	DISP_ACT,DISP_COL
	MOV	M+2,R0		; Save Pointer to text Array @R0
	PUSH	M		; Save length text only for Large Text
DISP_T2:
	CLR	C
	MOV	DPTR,#TabASCII
	MOV	A,@R0
	SUBB	A,#32		; Subb Offset first character ASCII code	
	MOV	B,#6
	MUL	AB
	PUSH	Acc
	MOV	A,DPH		
	ADD	A,B		; Add overflow multiply A*6 to DPH
	MOV	DPH,A
	POP	Acc
	MOV	B,#6		; Width one character in pixels
DISP_T3:
	PUSH	Acc		; Cycle one character
	MOVC	A,@A+DPTR

	JNB	F0,DISP_T5	; It's Small or Large character
; ------
	PUSH	M+1		; Program Code for Large Character
DISP_T4:
	SWAP	A		; Select High or Low Nibble
	DJNZ	M+1,DISP_T4
	POP	M+1

	CALL	DISP_ZOOM	; Convert Low Nibble to Byte
	CALL	DISP_DATA	; Send Byte to display
; ------
DISP_T5:
	CALL	DISP_DATA	; Send Byte to display
	INC	DPTR
	POP	Acc
	DJNZ	B,DISP_T3
	INC	R0
	DJNZ	M,DISP_T2
	POP	M		; Get text length
	MOV	R0,M+2		; Get pointer at first character in text array  
	INC	DISP_ROW	; Set Next Row
	DJNZ	M+1,DISP_T1	; Repeat only for Large text

	POP	PSW
	POP	Acc
	POP	B
	POP	M+2
	POP	M+1
	POP	M
	POP	DISP_ROW
	RET

; ----------------------------------
; Convert Low Nibble to Byte
; In:  Nibble(Acc)
; Out: Byte(Acc)
; ----------------------------------
DISP_ZOOM:
	MOV	C,Acc.3
	MOV	Acc.7,C
	MOV	Acc.6,C
	MOV	C,Acc.2
	MOV	Acc.5,C
	MOV	Acc.4,C
	MOV	C,Acc.1
	MOV	Acc.3,C
	MOV	Acc.2,C
	MOV	C,Acc.0
	MOV	Acc.1,C
	MOV	Acc.0,C
	RET

; ----------------------------------------
; Routine for paint commpress Image
; In: DPTR ...... Adress tab with Image  
;     DISP_ROW .. Position in ROW <0..7>
;     DISP_COL .. Position in COLUMN <0..63>
; -----------------------------------------
DISP_ICON:			
	PUSH	Acc
	PUSH	M
	PUSH	M+1
	PUSH	M+2
	PUSH	M+3
	PUSH	B
	CLR	A
	MOVC	A,@A+DPTR
	MOV	M,A		; Get Count Row  
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	MOV	M+1,A		; Get Count Column
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	MOV	M+2,#0
	INC	DPTR
	JZ	DISP_RY0	; Type of Compress 0
	DEC	A
	JZ	DISP_RY1	; Type of Compress 1
	DEC	A
	JZ	DISP_RY2	; Type of Compress 2
DISP_IRET:
	POP	B
	POP	M+3
	POP	M+2	
	POP	M+1	
	POP	M
	POP	Acc
	RET

; ----------------------------------
; Decode IMAGE in Compress 0 (NONE) 
; ----------------------------------
DISP_RY0:
	MOV	DISP_ACT,DISP_COL
	MOV	B,M+1
DISP_RX0:
	CLR	A
	MOVC	A,@A+DPTR
	CALL	DISP_DATA
	INC	DPTR
	DJNZ	B,DISP_RX0
	INC	DISP_ROW		; Next Row
	DJNZ	M,DISP_RY0
	JMP	DISP_IRET

; ----------------------------------
; Decode IMAGE in Compress 1 (ZERO)   
; ----------------------------------
DISP_RY1:
	MOV	DISP_ACT,DISP_COL
	MOV	B,M+1
DISP_RX1:
	MOV	A,M+2
	JNZ	DISP_RP1
	CLR	A
	MOVC	A,@A+DPTR
	CALL	DISP_DATA
	INC	DPTR
	JNZ	DISP_RZ1
	CLR	A
	MOVC	A,@A+DPTR
	INC	DPTR
	MOV	M+2,A
	DEC	M+2
	JMP	DISP_RZ1
DISP_RP1:
	DEC	M+2
	CLR	A
	CALL	DISP_DATA
DISP_RZ1:
	DJNZ	B,DISP_RX1
	INC	DISP_ROW		; Next Row	
	DJNZ	M,DISP_RY1
	JMP	DISP_IRET

; ----------------------------------
; Decode IMAGE in Compress 2 (FULL)  
; ----------------------------------
DISP_RY2:
	MOV	DISP_ACT,DISP_COL
	MOV	B,M+1
DISP_RX2:
	MOV	A,M+2
	JNZ	DISP_RP2
	CLR	A
	MOVC	A,@A+DPTR
	MOV	M+3,A
	CALL	DISP_DATA
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	INC	DPTR
	MOV	M+2,A
	DEC	M+2
	JMP	DISP_RZ2
DISP_RP2:
	DEC	M+2
	MOV	A,M+3
	CALL	DISP_DATA
DISP_RZ2:
	DJNZ	B,DISP_RX2
	INC	DISP_ROW		; Next Row
	DJNZ	M,DISP_RY2
	JMP	DISP_IRET

; ------------------------------------
; Select direct control and send Byte to display 
; In: A ... Byte to write
;     DISP_ROW .. Position in ROW <0..7>
;     DISP_COL .. Position in COLUMN <0..63>
; ------------------------------------
DISP_DATA:
	PUSH	Acc
	MOV	A,DISP_ACT
	CJNE	A,#64,DISP_POR
DISP_POR:
	JC	DISP_RAD1
	CLR	CS1
	SETB	CS2			; Select control 2
	JMP	DISP_RAD2	
DISP_RAD1:
	SETB	CS1			; Select control 1
	CLR	CS2
DISP_RAD2:	
	CJNE	A,DISP_COL,DISP_NE
	JMP	DISP_SET
DISP_NE:
	CJNE	A,#64,DISP_N1
DISP_SET:
	MOV	A,DISP_ROW
	CALL	DISP_ADR_X
	MOV	A,DISP_ACT		; Actual Column
	ANL	A,#00111111B		; Reduce at 64
	CALL	DISP_ADR_Y
DISP_N1:
	POP	Acc			
	CALL	DISP_WRITE		; Send Byte
	INC	DISP_ACT		; Increase actual column
	CLR	CS1
	CLR	CS1
	RET

; ------------------------------------
; Write Byte to Display 
; In: A ... Byte to Write 
; ------------------------------------
DISP_WRITE:	
	PUSH	Acc
	MOV	P0,A
	SETB	E  
	CLR	E     
	MOV	A,#Time_Delay
	DJNZ	Acc,$ 
	POP	Acc
	RET   	

; ---------------------------------------

DISP_ADR_X:			; Set Row <0..7>
	CLR	RS
	ANL	A,#00000111B
	ORL	A,#10111000B
	CALL	DISP_WRITE
	SETB	RS
	RET

; ----------------------------------------

DISP_ADR_Y:			; Set Column <0..63>
	CLR	RS
	ANL	A,#00111111B
	ORL	A,#01000000B
	CALL	DISP_WRITE
	SETB	RS
	RET

; ----------------------------------------

DISP_ADR_Z:
	CLR	RS
	ANL	A,#00111111B
	ORL	A,#11000000B
	CALL	DISP_WRITE
	SETB	RS
	RET

; --------------------------------------

DISP_ON:			; Display ON
	SETB	CS1
	SETB	CS2
	CLR	RS
	MOV	A,#00111111B
	CALL	DISP_WRITE
	SETB	RS
	CLR	CS1
	CLR	CS2
	RET	

; --------------------------------------

DISP_OFF:			; Display OFF	
	SETB	CS1
	SETB	CS2
	CLR	RS
	MOV	A,#00111110B
	CALL	DISP_WRITE
	SETB	RS
	CLR	CS1
	CLR	CS2
	RET

; --------------------------------------------
; Display Clear
; --------------------------------------------

DISP_CLEAR:			
	PUSH	Acc
	PUSH	M
	PUSH	M+1
	PUSH	B
	SETB	CS1
	SETB	CS2	
	MOV	M,#8		 
	MOV	M+1,#64
DISP_CY:
	MOV	A,M
	DEC	A
	CALL	DISP_ADR_X
	CLR	A
	CALL	DISP_ADR_Y
	MOV	B,M+1
DISP_CX:
	CLR	A
	CALL	DISP_WRITE
	DJNZ	B,DISP_CX
	DJNZ	M,DISP_CY
	CLR	CS1
	CLR	CS2
	POP	B	
	POP	M+1	
	POP	M
	POP	Acc
	RET

; ---------------------------------------
; Tab ASCII char
; ---------------------------------------
TabASCII:
	DB 000H,000H,000H,000H,000H,000H,000H,05FH,000H,000H,000H,000H,000H,007H,000H,007H
	DB 000H,000H,014H,07FH,014H,07FH,014H,000H,026H,049H,07FH,049H,032H,000H,043H,033H
	DB 008H,066H,061H,000H,036H,049H,055H,022H,050H,000H,000H,005H,003H,000H,000H,000H
	DB 000H,03EH,041H,000H,000H,000H,000H,041H,03EH,000H,000H,000H,014H,008H,03EH,008H
	DB 014H,000H,008H,008H,03EH,008H,008H,000H,000H,0A0H,060H,000H,000H,000H,010H,010H
	DB 010H,010H,010H,000H,000H,060H,060H,000H,000H,000H,000H,060H,01CH,003H,000H,000H
	DB 03EH,041H,041H,041H,03EH,000H,000H,041H,07FH,040H,000H,000H,042H,061H,051H,049H
	DB 066H,000H,022H,041H,049H,049H,036H,000H,018H,014H,012H,07FH,010H,000H,046H,045H
	DB 045H,049H,031H,000H,03CH,04AH,049H,049H,031H,000H,002H,001H,061H,019H,007H,000H
	DB 036H,049H,049H,049H,036H,000H,046H,049H,049H,029H,01EH,000H,000H,036H,036H,000H
	DB 000H,000H,000H,056H,036H,000H,000H,000H,008H,014H,014H,014H,022H,000H,014H,014H
	DB 014H,014H,014H,000H,022H,014H,014H,014H,008H,000H,002H,051H,009H,006H,000H,000H
	DB 034H,052H,052H,042H,03CH,000H,060H,01CH,013H,01CH,060H,000H,07FH,049H,049H,049H
	DB 036H,000H,03EH,041H,041H,041H,022H,000H,07FH,041H,041H,022H,01CH,000H,07FH,049H
	DB 049H,049H,041H,000H,07FH,009H,009H,009H,001H,000H,03EH,041H,049H,049H,03AH,000H
	DB 07FH,008H,008H,008H,07FH,000H,000H,000H,07FH,000H,000H,000H,030H,040H,040H,03FH
	DB 000H,000H,07FH,018H,014H,022H,041H,000H,07FH,040H,040H,040H,000H,000H,07FH,00CH
	DB 018H,00CH,07FH,000H,07FH,006H,008H,030H,07FH,000H,03EH,041H,041H,041H,03EH,000H
	DB 07FH,009H,009H,009H,006H,000H,03EH,041H,051H,021H,05EH,000H,07FH,009H,009H,009H
	DB 076H,000H,026H,049H,049H,049H,032H,000H,001H,001H,07FH,001H,001H,000H,03FH,040H
	DB 040H,040H,03FH,000H,00FH,010H,060H,010H,00FH,000H,01FH,060H,018H,060H,01FH,000H
	DB 063H,014H,008H,014H,063H,000H,003H,004H,078H,004H,003H,000H,061H,051H,049H,045H
	DB 043H,000H,000H,07FH,041H,000H,000H,000H,015H,016H,07CH,016H,015H,000H,000H,041H
	DB 07FH,000H,000H,000H,004H,002H,001H,002H,004H,000H,040H,040H,040H,040H,040H,000H
	DB 000H,001H,002H,004H,000H,000H,020H,054H,054H,054H,078H,000H,07FH,044H,044H,044H
	DB 038H,000H,038H,044H,044H,044H,028H,000H,038H,044H,044H,044H,07FH,000H,038H,054H
	DB 054H,054H,018H,000H,07EH,005H,005H,001H,000H,000H,098H,0A4H,0A4H,0A4H,07CH,000H
	DB 07FH,008H,008H,008H,070H,000H,000H,07DH,000H,000H,000H,000H,040H,03FH,000H,000H
	DB 000H,000H,000H,07FH,008H,014H,022H,040H,000H,000H,03FH,040H,000H,000H,07CH,004H
	DB 078H,004H,078H,000H,07CH,008H,004H,004H,078H,000H,038H,044H,044H,044H,038H,000H
	DB 0FEH,012H,012H,012H,00CH,000H,00CH,012H,012H,012H,0FEH,000H,07EH,004H,002H,002H
	DB 000H,000H,024H,04AH,052H,024H,000H,000H,004H,03FH,044H,040H,000H,000H,03CH,040H
	DB 040H,020H,07CH,000H,00CH,010H,060H,010H,00CH,000H,01CH,060H,01CH,060H,01CH,000H
	DB 06CH,010H,010H,06CH,000H,000H,05CH,050H,070H,01CH,000H,000H,064H,054H,054H,04CH
	DB 000H,000H,000H,008H,036H,041H,000H,000H,000H,000H,07FH,000H,000H,000H,000H,041H
	DB 036H,008H,000H,000H,008H,008H,02AH,01CH,008H,000H,008H,01CH,02AH,008H,008H,000H

	END

⌨️ 快捷键说明

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