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

📄 driver_pvg190602.asm

📁 PVG190602液晶驱动
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;			DPTR. 读ASCLL点阵表指针
; 出口参数:
;			EndAdr. 绘图结束地址,作为画下一图形的起始地址,连续显示时需要,当发生截断时不可用
;		    DPTR. 读表结束的指针,作为写下一页的起始指针,连续显示时需要
;			Databuf. 返回写入液晶的字节数ByteCount
;			NextPageFlag.自动换行标志,高电平有效
;			CutoffFlag.截断显示标志,高电平有效
; 占用资源:
;			A,B,C,DPTR,ByteCount,Address,Chip,PageN,EndAdr,Databuf,SelectFlag.
S6B0108_WriteSpan8_:
			MOV		Databuf,ByteCount; 保存写入液晶的字节数
			MOV		B,#40H;	
			MOV		A,Address; 显示起始地址(0-149点)相对液晶屏
			DIV		AB; 将地址分割为(片*50)列+显示起始地址
			MOV		Chip,A;	显示起始片地址(0-2)
			MOV		Address,B; 显示起始地址(0-49)
			MOV		A,ByteCount; 
			ADD		A,Address;
			MOV		EndAdr,A; 显示结束地址(未包含片地址的信息,因此实际结束地址是Chip*50+EndAdr)
			CLR		C;
			SUBB	A,#40H;	减去50,判断是否跨片显示
			JZ		Write_8_; EndAdr大于等于50无跨片,跳转
			JC		Write_8_; 
			MOV		A,#40H; 跨片处理
			SUBB	A,Address;
			MOV		ByteCount,A; 跨片前写入液晶的字节数
			CALL	S6B0108_SetAddress;
			CALL	S6B0108_Write;
			MOV		A,EndAdr;
			CLR		C;
			SUBB	A,#40H;
			MOV		ByteCount,A; 剩余的字节数
			INC		Chip;
			MOV		Address,#00H;
			CALL	S6B0108_SetAddress; 设定跨片后的地址
			CALL	S6B0108_Write;
			DEC		Chip;
			SJMP	LastAddress_8;
Write_8_:
			CALL	S6B0108_SetAddress; 无跨片模式
			CALL	S6B0108_Write;
LastAddress_8:
			MOV		B,#40H;	计算显示结束地址
			MOV		A,Chip;
			MUL		AB;
			ADD		A,EndAdr;
			MOV		EndAdr,A; 返回显示结束地址,可作为画下一图形的起始地址
			RET
;	*******************************************************
; 	*ASCLL码值转为该值在ASCLL点阵8*6中的起始指针转换子程序*
; 	*******************************************************
; 功能:
;		将字符的ASCLL码转换为该字符在ASCLL点阵表中数据的起始地址
; 入口参数:
; 			Databuf. 字符的ASCLL码值
; 出口参数:
;			DPTR. 字符在ASCLL点阵表中的首地址
; 占用资源:
;			A,B,C,DPTR,Databuf.
S6B0108_ASCLL_2_ASCLL6_8:
			MOV		A,Databuf;	读入字符在ASCLL码表中的值
			MOV		DPTR,#Table_ASCLL6_8; 读ASCLL点阵表的首地址
			CLR		C;
			SUBB	A,#20H;	减去32,得到字符在ASCLL点阵表中的值
			MOV		B,#06H
			MUL		AB;
			ADD		A,DPL;
			MOV		DPL,A;
			MOV		A,B;
			ADDC	A,DPH;
			MOV		DPH,A; 加上偏移地址,得到字符在ASCLL点阵表中的首地址
			RET
;	************************************************	
; 	*处理双重查表显示ASCLL点阵表8*6字符(串)子程序*
; 	************************************************
; 功能:
;		循环显示字符串表中的字符串
; 入口参数:
;			PageN. 显示的页地址(0-3)
;			Address. 显示起始地址(0-149)
;			DPTR. 要显示的字符串表的首地址
; 出口参数:
; 			Address.显示结束地址,可作为画下一图形的起始地址
; 占用资源:
;			A,B,C,DPTR,ByteCount,Address,Chip,PageN,EndAdr,Databuf,DPLbuf,DPHbuf,SelectFlag.
S6B0108_WriStr6_8:
;			MOV		PageN,#00H;	显示页的地址(0-3)
;			MOV		Address,#00H; 显示地址0-149	
			MOV		ByteCount,#06H;
;			MOV		DPTR,#Table_Str; 读字符串表的首地址,若要显示其他字符串表,屏蔽这一句
			MOV		DPLbuf,DPL;	
			MOV		DPHbuf,DPH; 保存字符串表地址指针
LoopWrite6_8:
			CLR		A;
			MOVC	A,@A+DPTR; 读表,取得字符在ASCLL码表的值
			MOV		Databuf,A;
			JZ		CharEND6_8; 判断将要显示的字符是不是结束标志/0(/0的ASCLL码是00)		
			CALL	S6B0108_ASCLL_2_ASCLL6_8; 字符ASCLL码值的转换为对应的ASCLL点阵表中的首地址			
			CALL	S6B0108_WriteSpan8_; 调用绘图子程序
			MOV		A,Databuf;
			MOV		ByteCount,A; 从Databuf中载入液晶的字节数
			MOV		Address,EndAdr; 绘图结束地址存入Address,作为画下一图形的起始地址
			MOV		DPL,DPLbuf; 
			MOV		DPH,DPHbuf; 读入字符串表地址指针
			INC		DPTR; 指针加1,以便读下一字符
			MOV		DPLbuf,DPL;
			MOV		DPHbuf,DPH;	保存字符串表地址指针
			SJMP	LoopWrite6_8; 
CharEND6_8:	
			CLR		SelectFlag;		
			RET
;	************************************
; 	*ASCLL码表与ASCLL点阵8*16转换子程序*
; 	************************************
; 功能:
;		将字符的ASCLL码转换为该字符在ASCLL点阵表中数据的起始地址
; 入口参数:
; 			Databuf. 字符的ASCLL码值
; 出口参数:
;			DPTR. 字符在ASCLL点阵表中的首地址
; 占用资源:
;			A,C,DPTR,Databuf
S6B0108_ASCLL_2_ASCLL8_16:
			MOV		A,Databuf;	读入字符在ASCLL码表中的值
			MOV		DPTR,#Table_ASCLL8_16; 读ASCLL点阵表的首地址
			CLR		C;
			SUBB	A,#20H;	减去32,得到字符在ASCLL点阵表中的值
			MOV		Databuf,A;
			SWAP	A;
			ANL		A,#0F0H;	乘16,算出字符的地址在ASCLL点阵中的偏移量
			ADD		A,DPL;
			MOV		DPL,A;
			MOV		A,Databuf;
			SWAP	A;
			ANL		A,#0FH;
			ADDC	A,DPH;
			MOV		DPH,A; 加上偏移地址,得到字符在ASCLL点阵表的地址
			RET
;	*************************************************	
; 	*处理双重查表显示ASCLL点阵表8*16字符(串)子程序*
; 	*************************************************
; 功能:
;		循环显示字符串表中的字符(串),调用了S6B0108_ASCLL_2_ASCLL8_16,S6B0108_WriteSpan8_
; 入口参数:
;			CutoffFlag.截断显示标志
;			NextPageFlag.自动换行标志
; 			Address.显示地址(0-149)
;			PageN. 显示页的地址(0-2)
;			DPTR. 要显示的字符串表的首地址
; 出口参数:
; 			Address.显示结束地址,可作为画下一图形的起始地址
; 占用资源:
;			A,B,C,DPTR,ByteCount,Address,Chip,PageN,EndAdr,Databuf,DPLbuf,DPHbuf,SelectFlag.
S6B0108_WriStr8_16:
;			MOV		PageN,#00H;	显示页的地址(0-2)
;			MOV		Address,#00H; 显示地址(0-149)	
			MOV		ByteCount,#08H;
;			MOV		DPTR,#Table_Str; 读字符串表的首地址,若要显示其他字符串表,屏蔽这一句
			MOV		DPLbuf,DPL;
			MOV		DPHbuf,DPH; 保存字符串表地址指针
LoopWrite8_16:
			CLR		A;
			MOVC	A,@A+DPTR; 字符串读表,取得字符在ASCLL码表的值
			MOV		Databuf,A;
			JZ		CharEND8_16; 判断将要显示的字符是不是结束标志/0(/0的ASCLL码是00)	
			CALL	S6B0108_ASCLL_2_ASCLL8_16; ASCLL码值和指针值转换 
			CALL	S6B0108_WriteSpan8_; 调用绘图子程序
			INC		PageN; 下一页
			MOV		ByteCount,Databuf; 从Databuf中载入液晶的字节数
			CLR		C;
			MOV		A,EndAdr;
			SUBB	A,ByteCount; 计算显示起始地址
			MOV		Address,A;
			CALL	S6B0108_WriteSpan8_; 8*16象素,接着画下一页
			MOV		Address,EndAdr; 绘图结束地址存入Address,可作为画下一图形的起始地址
			MOV		ByteCount,Databuf; 从Databuf中载入液晶的字节数
			DEC		PageN; 返回上一页
			MOV		DPL,DPLbuf;
			MOV		DPH,DPHbuf;	读入字符串表地址指针
			INC		DPTR; 指针加1,以便读下一字符
			MOV		DPLbuf,DPL;
			MOV		DPHbuf,DPH;	保存字符串表地址指针
			SJMP	LoopWrite8_16;
CharEND8_16:
			CLR		SelectFlag;	
			RET
;	******************************
;	*显示单个ASCLL码字符8*6子程序*
;	******************************
; 功能:
;		根据ASCLL码值,显示对应的字符
; 入口参数:
;			A. 字符的ASCLL码值
; 			Address.显示地址(0-149)
;			PageN. 显示页的地址(0-3) 
; 出口参数:
; 			Address.显示结束地址,可作为画下一图形的起始地址
; 占用资源:
;			A,B,C,DPTR,ByteCount,Address,Chip,PageN,EndAdr,Databuf.
S6B0108_WriSigalASCLL6_8:
;			MOV		PageN,#00H;	显示页的地址(0-3)
;			MOV		Address,#00H; 显示地址0-149	
			MOV		ByteCount,#06H;
			MOV		Databuf,A;
			CALL	S6B0108_ASCLL_2_ASCLL6_8; 字符ASCLL码值的转换为对应的ASCLL点阵表中的首地址			
			CALL	S6B0108_WriteSpan8_; 调用绘图子程序
			MOV		ByteCount,Databuf; 从Databuf中载入液晶的字节数
			MOV		Address,EndAdr; 绘图结束地址存入Address,作为画下一图形的起始地址
			CLR		SelectFlag;
			RET
;	******************************
;	*显示单个ASCLL码字符8*16子程序*
;	******************************
; 功能:
;		根据ASCLL码值,显示对应的字符
; 入口参数:
;			A. 字符的ASCLL码值
; 			Address.显示地址(0-149)
;			PageN. 显示页的地址(0-2) 
; 出口参数:
; 			Address.显示结束地址,可作为画下一图形的起始地址
; 占用资源:
;			A,B,C,DPTR,ByteCount,Address,Chip,PageN,EndAdr,Databuf,DPLbuf,DPHbuf.
S6B0108_WriSigalASCLL8_16:
;			MOV		PageN,#00H;	显示页的地址(0-2)
;			MOV		Address,#00H; 显示地址(0-149)	
			MOV		ByteCount,#08H;
			MOV		Databuf,A;
			CALL	S6B0108_ASCLL_2_ASCLL8_16; ASCLL码值和指针值转换 
			CALL	S6B0108_WriteSpan8_; 调用绘图子程序
			INC		PageN; 下一页
			MOV		ByteCount,Databuf; 从Databuf中载入液晶的字节数
			CLR		C;
			MOV		A,EndAdr;
			SUBB	A,ByteCount; 计算显示起始地址
			MOV		Address,A;
			CALL	S6B0108_WriteSpan8_; 8*16象素,接着画下一页
			MOV		Address,EndAdr; 绘图结束地址存入Address,可作为画下一图形的起始地址
			MOV		ByteCount,Databuf; 从Databuf中载入液晶的字节数
			DEC		PageN; 返回上一页
			CLR		SelectFlag;
			RET
;	*********************
;	*十六进制数字转ASCLL*
;	*********************
; 功能:
;		从十六进制中分离出百位,十位,个位并作ASCLL码调整
; 人口参数:
;			IntFlag. 数据类型声明 
;			A. 十六进制数范围(IntFlag=0):00H-OFFH
;							 (IntFlag=1):负数:80H-0FFH(-0~-127),正数:00H-7FH(+0~127)
; 出口参数:
; 			R7. 百位  
;			R6.	十位
;			R5.	个位
; 占用资源:
;			A,B,R5,R6,R7,IntFlag.
Hex_Num2ASCLL:
			JNB		IntFlag,Unsigned_INT;
/*			CJNE	A,#80H,Signed_INT; 18B20显示需要表示-0.xxxx,所以屏蔽这几句,这样80H表示-0.
			MOV		A,#80H;
			SETB	IntFlag;
			JMP		Pro_Int_DONE;
Signed_INT:	*/
			JNB		ACC.7,Unsigned_INT;
			SETB	IntFlag;
			ANL		A,#7FH;
			JMP		Pro_Int_DONE;
Unsigned_INT:
			CLR		IntFlag;
Pro_Int_DONE:
			MOV		B,#64H;
			DIV		AB;
			ADD		A,#30H;
			MOV		R7,A;
			MOV		A,B;
			MOV		B,#0AH;
			DIV		AB;
			ADD		A,#30H;
			MOV		R6,A;
			MOV		A,B;
			ADD		A,#30H;
			MOV		R5,A;
			RET	

;	**********************
; 	*整型数据显示子子程序*
;	**********************
; 功能:
;		无自动缩进功能(自动缩进要清屏),固定占用8*6*4的显示空间,正数或百位或十位为零自动消隐负号和百位、十位的零
;		显示整型数据,范围-127到127(IntFlag=1);80H表示-0.xxxx;0-255(IntFlag=0)
; 入口参数:
;			Address.显示起始地址
;			PageN.显示页地址
;			IntFlag.数据类型
;			A.被显示数(二进制,十六进制)
; 出口参数:
;			无
; 占用资源:
;			A,B,C,R5,R6,R7,DPTR,Address,EndAdr,PageN,Chip,ByteCount,Databuf.
Display_INT_Number:
			CALL	Hex_Num2ASCLL; 数据转为ASCLL码的形式
			MOV		A,#20H; 	
			JNB		IntFlag,Hide_NegMark; 判断是否负号消隐
			MOV		A,#2DH;
Hide_NegMark:  
			CALL	S6B0108_WriSigalASCLL6_8;
			MOV		A,R7;
			CJNE	A,#30H,SkipHide_Hundred;	
			CALL	LastWordWri_zero; 百位等于零,消隐符号位
			MOV		A,#20H; 
			JNB		IntFlag,SkipHide_Hundred; 判断是否负号消隐
			MOV		A,#2DH;	在百位的位置显示负号(负号右移)
SkipHide_Hundred:
			CALL	S6B0108_WriSigalASCLL6_8;
			MOV		A,R7;
			CJNE	A,#30H,SkipHide_Tens;
			MOV		A,R6; 百位为零
			CJNE	A,#30H,SkipHide_Tens;
		    CALL	LastWordWri_zero; 十位为零,消隐位于百位的负号
			MOV		A,#20H;	消隐十位
			JNB		IntFlag,SkipHide_TensDONE;
			MOV		A,#2DH;	负号右移
			JMP		SkipHide_TensDONE;
SkipHide_Tens:
			MOV		A,R6;
SkipHide_TensDONE:
			CALL	S6B0108_WriSigalASCLL6_8;
			MOV		A,R5;
			CALL	S6B0108_WriSigalASCLL6_8;	
			CLR		IntFlag;							
			RET				  
LastWordWri_zero:
			CLR		C;	 
			MOV		A,Address;   
			SUBB	A,#06H;
			MOV		Address,A;
			MOV		A,#20H;
			CALL	S6B0108_WriSigalASCLL6_8;
			RET						
			END

⌨️ 快捷键说明

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