📄 d1621.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 + -