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

📄 tg19264a接口程序.txt

📁 TG19264A接口程序,下载后可以根据实际要求
💻 TXT
📖 第 1 页 / 共 2 页
字号:
;                    TG19264A接口程序(MCS51模拟方式)
;液晶模块供应商:广州市盛宝电子有限公司   Tel:020-87592491 Fax:87541571
;Email: tinsharp@public.guangzhou.gd.cn
;***************************************************************************
;连线图:
;*LCM---89C52*  *LCM---89C52*   *LCM-------89C52*     *LCM----------89C52* *
;*DB0---P0.0*   *DB4---P0.4*    *D/I-------P2.6*      *CS1----------P2.4*  *
;*DB1---P0.1*   *DB5---P0.5*    *R/W-------P2.7*      *CS2----------P2.5*  *
;*DB2---P0.2*   *DB6---P0.6*    */RST-------VCC*      *CS3----------P3.2*  * 
;*DB3---P0.3*   *DB7---P0.7*    *E---------P2.3*                           *
;注:89C52的晶振频率为12MHz                                                 *
;***************************************************************************
;接口引脚定义:
ELCM    EQU     P2.3
CS1     EQU     P2.4
CS2     EQU     P2.5
CS3     EQU     P3.2
DI      EQU     P2.6
RW      EQU     P2.7
DATA_LCM EQU    P0
;内存RAM分配
XPOS    EQU     30H		;X坐标
YPOS    EQU     31H		;Y坐标
;液晶片分区参数
PD1	EQU	40H		;每一个分区宽64点
;主程序开始
        ORG     0000H
        JMP     START
	org	0023h
	LJMP	RS232
	
START:  MOV     SP,#60H		; void  main() {
MAIN:   LCALL   DELAY400MS	;       void  delay(void);
        CALL    LCDRESET	;	void  lcdreset(void);
        MOV	A,#55H
        CALL	LCDFILL		;	void  lcdfill( uchar a );
        MOV	DPTR,#STRING1	;       uchar *p = *string1;
        CALL	PUTSTR		;	void  putstr( uchar *p);
        MOV	YPOS,#2
        MOV	XPOS,#0
        CALL    PUTSTR		;       void  putatr( uchar *p);
  M1:   AJMP	M1		;      whil(1);
        			;   }

;****************************************************************
; 长延时程序,主要用于初始化之前,CPU等待LCM准备好(400MS)
;****************************************************************
DELAY400MS:
        MOV     R0,#20
DL4_PA: MOV     R1,#100
DL4_PB: MOV     R2,#100
        DJNZ    R2,$
        DJNZ    R1,DL4_PB
        DJNZ    R0,DL4_PA
        RET
;****************************************************************
; 短延时程序,主要用于显示演示速度
;****************************************************************
DELAY:
	MOV	R5,#4
DLY_PA:	MOV	R4,#0
	DJNZ	R4,$
	DJNZ	R5,DLY_PA
	RET        
      
;****************************************************************
;获取字串内字符编码,C=0显示结束,字符串以0FFH结尾作为结束标志
;以两字节组成一个字符:前一字节表示是全角(>=80H)还是半角(<80H)
;                      后一字节字符点阵表内偏移量“内码”
;****************************************************************
GETSTRCHAR:  
GSC_PA:	
	CLR	A
	MOVC	A,@A+DPTR	;先读取字头
	INC	DPTR
	MOV	B,A
	INC	A
	CLR	C		;置程序出口标志(表示已经结束)
	JZ	GSC_LAX		;如果是结束码(0ffh+1=00h)
	CLR	A
	MOVC	A,@A+DPTR	;真正读取“内码”
	INC	DPTR
	SETB	C		;编码有效
GSC_LAX:	
	RET
;****************************************************************
;字符数据输出
;****************************************************************
PUTSTR:
;	CALL	DELAY
	CALL	GETSTRCHAR	;取字符串中的字符码
	PUSH	DPL
	PUSH	DPH
	JNC	PSR_LAX		;显示结束
	JNB	B.7,PSR_LBY	;编码<128,英文
;CHINESE:			;汉字输出16*16=8*16 + 8*16
	CALL	HZKPOS		;点阵码偏移量换算
	CALL	PUTCWDOT	;16*16点阵输出
	JMP	PSR_LBX
PSR_LBY:
;ENGLISH:			;英文(数字)半角字符输出
	CALL	EZKPOS		;点阵码偏移量换算
	CALL	PUTCHARDOT	;8*16点阵输出
PSR_LBX:
	POP	DPH
	POP	DPL
	JMP	PUTSTR		;继续下一位
PSR_LAX:POP	DPH
	POP	DPL	
	RET
;****************************************************************
;全角字符数据输出,16*16点阵
;****************************************************************
PUTCWDOT:
	PUSH	XPOS
	MOV	R7,#16
PCW_PA:				;上半个字符
	CLR	A
	MOVC	A,@A+DPTR	;获取点阵码
	CALL	LCDWRITE	;写入LCM(上半个字部分)
	INC	XPOS		;X坐标加1
	INC	DPTR		;指向下一个点阵码
	DJNZ	R7,PCW_PA
	INC	YPOS
	POP	XPOS
	MOV	R7,#16
PCW_PB:				;下半个字符
	CLR	A		;
	MOVC	A,@A+DPTR	;再取一个点阵码
	CALL	LCDWRITE	;输出
	INC	DPTR		;指向下一个点阵码
	INC	XPOS		;指向下一列
	DJNZ	R7,PCW_PB
	DEC	XPOS
	CALL	CUSORNEXT	;坐标指针自动移位计算(指向下一列)
	MOV	A,XPOS		;判断是否换行?
	JNZ	PCW_PC
	INC	YPOS
PCW_PC:	DEC	YPOS		;返回上半个字部分
	RET
;****************************************************************
;半角字符数据输出,8*16点阵
;****************************************************************
PUTCHARDOT:
	PUSH	XPOS
	MOV	R7,#8
PAC_PA:				;上半个字符
	CLR	A
	MOVC	A,@A+DPTR	;获取点阵码
	CALL	LCDWRITE	;写入LCM(上半个字部分)
	INC	DPTR		;指向下一个点阵码
	INC	XPOS
	DJNZ	R7,PAC_PA
	INC	YPOS
	POP	XPOS
	MOV	R7,#8
PAC_PB:				;下半个字符
	CLR	A		;
	MOVC	A,@A+DPTR	;再取一个点阵码
	CALL	LCDWRITE	;输出
	INC	DPTR		;指向下一个点阵码
	INC	XPOS
	DJNZ	R7,PAC_PB
	DEC	XPOS
	CALL	CUSORNEXT	;坐标指针自动移位计算(指向下一列)
	MOV	A,XPOS		;判断是否换行?
	JNZ	PAC_LA2
	INC	YPOS
PAC_LA2:	
	DEC	YPOS		;返回上半个字部分
	RET
;****************************************************************
;  汉字库实际指针换算,结果置入DPTR
;****************************************************************
HZKPOS:
	MOV	B,#32
	MUL	AB
	MOV	DPTR,#HZKDOT
	AJMP	ZKPOS
;****************************************************************
;  英文字母数字实际指针换算,结果置入DPTR
;****************************************************************
EZKPOS:
	MOV	B,#16
	MUL	AB
	MOV	DPTR,#EZKDOT	;修改数据指针,指向所选字母
ZKPOS:	ADD	A,DPL
	MOV	DPL,A
	MOV	A,B
	ADDC	A,DPH
	MOV	DPH,A
	RET	
;****************************************************************
;全屏填充程序,填充内容在调用前设定于A中
;****************************************************************
LCDFILL:                        ;LCD整屏显示A的内容
        MOV     R7,A
        MOV     YPOS,#0
LFL_PB: MOV     XPOS,#0
LFL_PA: MOV     A,R7
        CALL    LCDWRITE        ;定位并写数据
        CALL    CUSORNEXT
        MOV     A,XPOS
        JNZ     LFL_PA          
        MOV     A,YPOS
        JNZ     LFL_PB        
        RET

;****************************************************************
;按给定的XY坐标定位,并写数据子程序
;****************************************************************
LCDWRITE:                    	
        CALL    LCDPOS       	;坐标指针定位
        CALL    LCDWD        	;写数据
        RET

;****************************************************************
; 连续输出时的坐标指针换算,自动指向下一个可写入地址
;****************************************************************
CUSORNEXT:
	ANL	YPOS,#7
	INC	XPOS
	MOV	A,XPOS
	CJNE    A,#192,CNT_LAX
	MOV	XPOS,#0
	INC	YPOS
	MOV	A,YPOS
	ANL	A,#0F8H
	JZ	CNT_LAX
	MOV	YPOS,#0
CNT_LAX:	
	RET
;****************************************************************
;一字节数据输出
;****************************************************************
LCDWD:	MOV	B,A
	MOV	A,XPOS
	CJNE	A,#64,$+3
	JNC	LWD_LA1
	MOV	A,B
	CALL	LCDWD1
	JMP	LWD_LA3
LWD_LA1:CJNE	A,#128,$+3
	JNC	LWD_LA2
	MOV	A,B
	CALL	LCDWD2
	JMP	LWD_LA3
LWD_LA2:CJNE	A,#192,$+3
	JNC	LWD_LA3		
	MOV	A,B
	CALL	LCDWD3
LWD_LA3:
	RET	
;****************************************************************
; X,Y坐标定位处理
;****************************************************************
LCDPOS:
	PUSH	ACC
	MOV	A,YPOS		;取Y座标
	ANL	A,#7		;保留低三位
	ADD	A,#0B8H		;光标定位指令
	MOV	B,A		;暂存Y坐标
	CLR	C
	MOV	A,XPOS		;取X坐标值
	SUBB	A,#PD1		;左区边界
	JNC	LPS_LA1		;如果不在左区
	MOV	A,XPOS		;重新取X坐标值
	ANL	A,#3FH		;左边部分(CS1)
	ORL	A,#40H		;X方向定位指令
	CALL	LCDWC1		;X定位
	MOV	A,B		;Y定位
	CALL	LCDWC1
	JMP	LPS_LA3		;返回
LPS_LA1:CLR	C
	MOV	A,XPOS
	SUBB	A,#PD1*2	;中间区右边界
	JNC	LPS_LA2		;如果不在中间区
	MOV	A,XPOS
	ANL	A,#3FH		;中间部分(CS2)
	ORL	A,#40H		;X方向定位指令
	CALL	LCDWC2		;X定位
	MOV	A,B
	CALL	LCDWC2		;Y坐标定位
	JMP	LPS_LA3		;返回
LPS_LA2:CLR	C
	MOV	A,XPOS
	SUBB	A,#PD1*3	;右边区域边界
	JNC	LPS_LA3		;如果还出界则不予定位
	MOV	A,XPOS
	ANL	A,#3FH		;右边部分(CS3)
	ORL	A,#40H		;X方向定位指令
	CALL	LCDWC3
	MOV	A,B
	CALL	LCDWC3		;Y方向定位
LPS_LA3:
	POP	ACC
	RET	
;****************************************************************
; LCM系统复位
;****************************************************************
LCDRESET:
        MOV     A,#3EH          ;关LCD显示  
	CALL	LCDWC1
	CALL	LCDWC2
	CALL    LCDWC3
        MOV     A,#3FH          ;打开LCD显示  
	CALL	LCDWC1
	CALL    LCDWC2
	CALL	LCDWC3
        MOV     A,#0C0H         ;设首址
	CALL    LCDWC1
	CALL    LCDWC2
	CALL    LCDWC3
	RET	
;****************************************************************
; 控制命令输出
;****************************************************************
LCDWC1:	CALL    WAITIDLE1
        SJMP    WCCOM
LCDWC2: CALL     WAITIDLE2
        SJMP    WCCOM
LCDWC3:	CALL	WAITIDLE3
 WCCOM: CLR     DI
        CLR     RW
        MOV     DATA_LCM,A      ;E=1 D/I=0 R/W=0
        SETB    ELCM
        NOP
        CLR     ELCM
       	RET
;****************************************************************
;数据写输出(分为左中右3个程序)
;****************************************************************
LCDWD1:                         ;片1写数据子程序
        CALL    WAITIDLE1       ; BUSY ?
        SJMP    WDCOM
LCDWD2:                         ;片2写数据子程序
	CALL	WAITIDLE2
        SJMP    WDCOM
LCDWD3:                         ;片3写数据子程序
	CALL	WAITIDLE3
 WDCOM: SETB    DI              ; D/I=1 R/W=0
        CLR     RW
        MOV     DATA_LCM,A      
        SETB    ELCM		; 	e = 1;
        NOP			;          _nop_()
        CLR     ELCM		;	e = 0;
       	RET       
        RET
;****************************************************************
; BUSY状态等待
;****************************************************************
WAITIDLE1:
        PUSH    ACC
        MOV     DATA_LCM,#0FFH  ; E=1 CS1=0 CS2=1 CS3=1 D/I=0 R/W=1
        CLR	CS1
        SETB	CS2
        SETB    CS3
        AJMP	WT_COM
WAITIDLE2:
        PUSH    ACC
        MOV     DATA_LCM,#0FFH  ; E=1 CS1=1 CS2=0 CS3=1 D/I=0 R/W=1
        SETB	CS1
        CLR	CS2
        SETB    CS3
	AJMP	WT_COM
WAITIDLE3:
        PUSH    ACC
        MOV     DATA_LCM,#0FFH  ; E=1 CS1=1 CS2=1 CS3=0 D/I=0 R/W=1
        SETB    CS1
        SETB    CS2
        CLR     CS3
WT_COM: CLR     DI
        SETB    RW
        SETB    ELCM
WT_PA: 	MOV     A,DATA_LCM
        JB      ACC.7,WT_PA
        CLR     ELCM
        POP     ACC
        RET
HZKDOT:	
;茂   C3515	0
	DB 004H,004H,0C4H,044H,05FH,044H,044H,0F4H
	DB 044H,04FH,054H,064H,044H,046H,004H,000H
	DB 080H,040H,03FH,000H,040H,040H,020H,020H
	DB 013H,00CH,018H,024H,043H,080H,0E0H,000H

;兴   C4843	1
	DB 000H,0FEH,04AH,04AH,000H,0FEH,0EAH,0AAH
	DB 0AAH,0FEH,000H,04AH,04AH,0FEH,000H,000H
	DB 002H,083H,042H,022H,012H,01BH,002H,002H
	DB 002H,00BH,012H,022H,062H,0C3H,002H,000H
	
;国   C2590	2
	DB 000H,0FEH,002H,0D2H,052H,052H,0D2H,03EH
	DB 0D2H,016H,01AH,012H,0FFH,002H,000H,000H
	DB 000H,0FFH,050H,053H,052H,04AH,06BH,050H
	DB 04FH,054H,07BH,040H,0FFH,000H,000H,000H

;际   C2842	3
	DB 000H,0FEH,022H,0D2H,00EH,020H,0B8H,04FH
	DB 0B2H,09EH,080H,09FH,072H,08AH,006H,000H
	DB 000H,0FFH,004H,008H,007H,021H,012H,00AH
	DB 046H,082H,07EH,006H,00AH,012H,031H,000H

;(   C0308	4
	DB 000H,000H,000H,000H,000H,000H,000H,000H
	DB 000H,0C0H,030H,008H,004H,002H,000H,000H

⌨️ 快捷键说明

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