×
嵌入式 > 技术百科 > 详情

HT1621驱动程序

发布时间:2020-06-10 发布时间:
|
;LCD 设定(命令模式字的低8位数据)
BIAS EQU 52H 1/3 偏压4背极
RC256 EQU 30H 系统时钟选用片
内RC振荡器
SYSEN EQU 02H 打开系统时钟
LCDON EQU 06H 打开偏压发生器
SYSDIS EQU 00H 关闭系统时钟和
偏压发生器
X32K EQU 28H 系统时钟选择为
片外晶振        
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

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

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

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

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

;发送命令程序
;名称: Send1621Com
;描述: 向HT1621B发送控制命令,命令内容在LCDCOMMAND中。
;所发的命令类型为ID=100+0+命令,占用堆栈。
Send1621Com:
PUSH ACC
PUSH LCDBITCNT
ACALL INTI 起动1621(即初
化)
MOV LCDBITCNT,#04h
MOV A,#80h        发送ID值100+0
ACALL sendb0
MOV A,LCDCOMMAND 取得命令字
ACALL send1621byte 发送到1621
SETB write
SETB cs
SETB sdata
POP LCDBITCNT
POP ACC
RET

;发送命令程序(B)
;名称: Send1621ComB
;描述: 向HT1621B发送控制命令,命令内容在LCDCOMMAND中。
;所发的命令类型为ID=100+1+命令,占用堆栈。
Send1621ComB:
PUSH ACC
PUSH LCDBITCNT
ACALL INTI 起动1621(即初
化)
MOV LCDBITCNT,#04h
MOV A,#90h 发送ID值100+1
ACALL sendb0
MOV A,LCDCOMMAND
ACALL send1621byte
SETB write 将SPI接口均置为
高电平
SETB cs
SETB sdata
POP LCDBITCNT
POP ACC
RET

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

;1621设置
;描述:进行1621的基本设置,偏压、背极、系统工作方式
;用户添加初化内容或更改设置内容。
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 启动1621系统振荡器
ACALL Send1621Com                 
MOV LCDCommand,#LCDON 启动1621显示偏压发生器,启
动显示
ACALL Send1621Com
POP LCDCOMMAND
RET  

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

;函数名:DISDPTR
;功能:    把DPTR指向的程序存贮器的16个字节内容直接送到1621的显示缓冲区内
;参数:    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
;描述: 向HT1621B发送BYTECNT个数据(从SEG0开始发送)
;           数据在发送缓冲区中,缓冲区指针lcdadr.
;-----------------------------------------------
Send1621Data:
PUSH ACC
PUSH LCDBITCNT
PUSH LCDBYTECNT
PUSH LCDADR
ACALL INTI
MOV LCDBITCNT,#01H 发送写1621RAM命

MOV A,#80H 发送1位数据
ACALL SENDB0
MOV A,#40H 1621RAM地址设置
为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

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


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

;******************************************************************
;发送位数据子程序
;名称: sendb0
;描述: 向HT1621B发送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

;========================================================
;表格区
;ZY886A型LCD数字显示表(0-F),供用户转换使用。(以上程序不用此表)
LCDData:
DB  0EBH,60H,0C7H,0E5H,6CH,0ADH,0AFH,0E0H,0EFH,0EDH,0EEH,2FH,07H,67H,8FH,8EH
;===============================================================
;
;以上程序是HT1621的通用程序,对不同的LCD只是其字模不一样而以



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
示波器使用时要注意的19个问题