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

📄 d1621.inc

📁 功能:ZY886A液晶显示模块显示控制。启动程序即进入正常显示状态(循环显示一系列数字0~F)。 说明:将跳线器题J6、J19、J20分别短接到LCM_/WR、LCM_DAT、LCM_/CS端。
💻 INC
字号:
;HT1621 设定字(命令模式字的低8位数据)
BIAS		EQU		52H		;1/3 偏压4背极
RC256		EQU		30H		;系统时钟选用片内RC振荡器
SYSEN		EQU		02H		;打开系统时钟
LCDON		EQU		06H		;打开偏压发生器
SYSDIS		EQU		00H		;关闭系统时钟(以及偏压发生器)
X32K		EQU		28H		;系统时钟选择为片外晶振32.768K       
TONEON		EQU		12H		;打开音频输出
TONEOFF		EQU		10H		;关闭音频输出
TONE4K		EQU		80H		;音频输出频率为4K
TONE2K		EQU		0C0H	        ;音频输出频率为2K
TIMEREN		EQU		0CH	 	;时基输出使能
TIMERDIS	EQU		08H		;时基输出禁能
CLRTIME         EQU		18H		;清零进基发生器
WDTEN		EQU		0EH		;使能WDT溢出标志输出
WDTDIS		EQU		0AH		;禁止WDT溢出标志输出
CLRWDT		EQU		1CH		;清零WDT
IRQEN		EQU		10H		;使能IRQ输出
IRQDIS		EQU		00H		;禁止IRQ输出
FR1		EQU		40H		;设置时基输出1HZ,WDT溢出时间4S

;HT1621控制位(液晶模块接口定义,用户根据自已的需要更改)
CS		BIT		P0.6		;HT1621片选
WRITE		BIT		P1.6		;HT1621写控制位
SDATA		BIT		P0.7		;HT1621数据线

;显示缓冲区(用户根据自已的需要更改变量的存储地址)
DISBUFFER	EQU		34H		;显示缓冲区地址34H--43H(16字节)

;临时变量定义(不会破坏这些资源,只是临时占用,用户不要自行修改)
LCDBITCNT	EQU		03H		;发送位计数器
LCDCOMMAND	EQU		02H		;发送命令缓冲器
LCDADR		EQU		01H		;LCD显存指针
LCDBYTECNT	EQU		04H		;发送字节数记数器 

;===================================================================================          
;                              向HT1621发送命令和数据模块
;软件包面向用户的界面程序:
; SEND1621COM    发送命令子程序,命令ID为100+0型式 + 命令字
; SEND1621COMB    发送命令子程序(B),命令ID为100+1型式 + 命令字
; HT1621DOWN    设置HT1621进行掉电工作方式
; INTI1621    初化HT1621,并打开LCD显示,用户可更改相应初化字,进行HT1621的不同设置。
; BRUSHLCD		刷新LCD显示,即将显示缓冲区的16字节数据发送到HT1621,从SEG0段开始。
; DISDPTR    将DPTR指向的程序存储器的数据(连续16字节)发送到HT1621显示。
;这此子程序都会自动保护所需的临时单元,所以占用较多的堆栈,用户要注意这一点。
;===================================================================================

;发送命令程序
;名称: SEND1621COM
;描述: 向HT1621发送控制命令,命令内容在LCDCOMMAND中。
;所发的命令类型为ID=100+0+命令,占用堆栈。
SEND1621COM:
	PUSH	ACC
	PUSH	LCDBITCNT
	ACALL	INTI				;起动HT1621(即初化)
	MOV	LCDBITCNT,#04H
	MOV	A,#80H 		     		;发送ID值100+0
	ACALL	SENDB0
	MOV	A,LCDCOMMAND			;取得命令字
	ACALL	SEND1621BYTE			;发送到HT1621
	SETB	WRITE
	SETB	CS
	SETB	SDATA
	POP	LCDBITCNT
	POP	ACC
	RET

;发送命令程序(B)
;名称: SEND1621COMB
;描述: 向HT1621发送控制命令,命令内容在LCDCOMMAND中。
;所发的命令类型为ID=100+1+命令,占用堆栈。
SEND1621COMB:
PUSH	ACC
	PUSH	LCDBITCNT
	ACALL	INTI				;起动HT1621(即初化)
	MOV	LCDBITCNT,#04H
	MOV	A,#90H				;发送ID值100+0
	ACALL	SENDB0
	MOV	A,LCDCOMMAND
	ACALL	SEND1621BYTE
	SETB	WRITE				;将SPI接口均置为高电平
	SETB	CS
	SETB	SDATA
	POP	LCDBITCNT
	POP	ACC
	RET

;HT1621掉电模式
;使HT1621进行掉电模式,以降低功耗
HT1621DOWN:
	PUSH	LCDCOMMAND
	MOV	LCDCOMMAND,#SYSDIS		;关闭系统振荡器即进行掉电方式
	ACALL	SEND1621COM                  
	POP	LCDCOMMAND
	RET

;HT1621设置
;描述:进行HT1621的基本设置,偏压、背极、系统工作方式
;用户添加初化内容或更改设置内容。
INTI1621:
	PUSH	LCDCOMMAND
	MOV	LCDCOMMAND,#BIAS                    
	ACALL 	SEND1621COM			;工作于1/3偏压,4背极                 
	MOV	LCDCOMMAND,#X32K       
	ACALL	SEND1621COM			;系统时钟选择为外部时钟
	MOV	LCDCOMMAND,#WDTDIS          
	ACALL	SEND1621COM			;关闭看门狗
	MOV	LCDCOMMAND,#TIMERDIS        
	ACALL	SEND1621COM                                  
	MOV	LCDCOMMAND,#SYSEN		;启动HT1621系统振荡器
	ACALL	SEND1621COM                 
	MOV	LCDCOMMAND,#LCDON		;启动HT1621显示偏压发生器,启动显示
	ACALL	SEND1621COM
	POP	LCDCOMMAND
	RET  

;刷新显示子程序
;名称:BRUSHLCD
;描述:把显示缓冲区DISBUFFER共16个单元的内容送到HT1621中
BRUSHLCD:
	PUSH	LCDBYTECNT
	PUSH	LCDADR
	MOV	LCDBYTECNT,#16			;发送16个数据
	MOV	LCDADR,#DISBUFFER		;指向显示缓冲区
DISPLAY0:
	LCALL	SEND1621DATA			;调用发送数据子程序,从SEG0段开始
	POP	LCDADR
	POP	LCDBYTECNT
	RET	

;函数名:DISDPTR
;功能:    把DPTR指向的程序存贮器的16个字节内容直接送到HT1621的显示缓冲区内
;参数:    DPTR-缓冲区指针
;返回值:无
DISDPTR:
PUSH	07H
	PUSH	00H
	PUSH	06H
	PUSH	ACC
	MOV	R7,#10H				;设置各指针及变量初值
	MOV	R0,# DISBUFFER			;先把数据读入显示缓冲区
	MOV	R6,#00
ICERRORCON:
	MOV	A,R6
	MOVC	A,@A+DPTR			;读取程序区的数据
	MOV	@R0,A				;放入显示缓冲区
	INC	R0
	INC	R6
	DJNZ	R7,ICERRORCON		
	ACALL	BRUSHLCD			;输出显示
	POP	ACC
	POP	06H
	POP	00H
	POP	07H
	RET

;*******************************************************************
;                 子程序
;用户尽量不要单独的调用这此子程序
;***********************************************

;************************************************
;发送数据程序
;名称: SEND1621DATA
;描述: 向HT1621发送BYTECNT个数据(从SEG0开始发送)
;           数据在发送缓冲区中,缓冲区指针LCDADR.
;-----------------------------------------------
SEND1621DATA:
	PUSH	ACC
	PUSH	LCDBITCNT
	PUSH	LCDBYTECNT
	PUSH	LCDADR
	ACALL	INTI
	MOV	LCDBITCNT,#01H			;发送写HT1621 RAM命令
	MOV	A,#80H				;发送1位数据
	ACALL	SENDB0
	MOV	A,#40H				;HT1621 RAM地址设置为00H
	ACALL	SEND1621BYTE		
	MOV	R1,LCDADR
SENDNEXT1:
	MOV	A,@R1				;读取数据
	ACALL	SEND1621BYTE			;发送数据
	INC	R1
	DJNZ	LCDBYTECNT,SENDNEXT1
	SETB	WRITE
	SETB	CS
	SETB	SDATA
	POP	LCDADR
	POP	LCDBYTECNT
	POP	LCDBITCNT
	POP	ACC
	RET

;************************************************
;HT1621初始化子程序
;即起动HT1621
;-----------------------------------------------
INTI:
	CLR	CS
	SETB	WRITE
	NOP
	CLR	WRITE
	NOP
	RET


;******************************************************************
;发送字节数据子程序
;名称: SEND1621BYTE
;描述: 向HT1621发送一个字节数据,数据在A中
;-----------------------------------------------
SEND1621BYTE:
	PUSH	LCDBITCNT
	MOV	LCDBITCNT,#08H			;发送8位数据位
	ACALL	SENDB0				;调用发送数据位子程序
	POP	LCDBITCNT
	RET

;******************************************************************
;发送位数据子程序
;名称: SENDB0
;描述: 向HT1621发送N位数据,数据在A中,N在LCDBITCNT中,从高位开始发送
;-----------------------------------------------
SENDB0:
	PUSH	ACC
	PUSH	PSW
	PUSH	LCDBITCNT
SENDB01:
	RLC	A
	MOV	SDATA,C				;先发送高位数据
	SETB	WRITE				;产生WR信号
	NOP
	NOP
	CLR	WRITE
	NOP
	NOP
	DJNZ	LCDBITCNT,SENDB01		;未发送完,继续
	POP	LCDBITCNT
	POP	PSW
	POP	ACC
	RET

⌨️ 快捷键说明

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