产品详情
  • 产品名称:液晶,数显LCD驱动HT1621B通用驱动演示程序

  • 产品型号:HT1621
  • 产品厂商:其它品牌
  • 产品文档:
你添加了1件商品 查看购物车
简单介绍:
HT1621B/HT1621D是32×4的LCD驱动电路。HT1621B和HT1621D封装不同,HT1621B的封装是ssop48而 HT1621D的封装是DIP28;因HT1621B/HT1621D的S/W结构特点,使它适合点阵式LCD显示。HT1621B/HT1621D的驱动程序编写简单,而且在毅钧网站上就有丰富的HT1621B/HT1621D源码下载、同时还有HT1621B/HT1621D
详情介绍:

HT1621驱动程序演示程序

下载连接http://file.yizimg.com/200731718495029411095.txt


;*********************************************************************************
;文件名:ZY886CDM.asm
;项目: 煤气表LCD显示模块演示程序(1.1版)
;描述: 启动程序即进入正常显示状态(循环显示一系列数字),并通过KEY按键进行全显示状态
; (测功耗)、掉电状态(测功耗)及关断LCM电源(GND端),依此循环。
;*后更新日期:2002/1/07
;*********************************************************************************
;特殊功能寄存器SFR和位地址定义
AUXR1 DATA 0A2H ;辅助功能寄存器,不可位寻址
DIVM DATA 95H ;MCU时钟除数控制寄存器,
P0M1 DATA 84H ;0口工作模式选择寄存器1
P0M2 DATA 85H ;0口工作模式选择寄存器1
P1M1 DATA 91H
P1M2 DATA 92H
PT0AD DATA 0F6H ;0口数字输入功能禁止寄存器

LED1 BIT P0.0 ;状态灯定义
LED2 BIT P1.7 ;正常显示状态时LED1点亮,全显示状态时
LED3 BIT P1.6 ;LED2点亮,掉电状态时LED3点亮,关断LCM电
LED4 BIT P1.4 ;源状态时LED4点亮。
LCMC BIT P0.7 ;LCM的GND控制输出端,实现LCM的电源控制
KEY BIT P1.1 ;KEY的IO定义
keyin BIT 10H ;定义有键盘输出标志位
;定义显示数据计数变量
DCONT DATA 50H ;用于显示位的计数
;状态标志位定义
FLAGS1 DATA 2EH ;状态标志寄存器1
ICERR BIT FLAGS1.5 ;插卡有误
PASS BIT FLAGS1.7 ;门阀已关
SALEF BIT FLAGS1.6 ;请购气
POWERDOWN BIT FLAGS1.4 ;速换电池

;***********************************************************************
; 程序开始
;***********************************************************************
ORG 0000H
AJMP RESET
ORG 080H
RESET:
;**设置
MOV DIVM,#1 ;CPU工作频率降至正常时的1/4
MOV SP,#59H ;设堆栈指针
MOV TMOD,#01H ;使能定时器0
;显示数据初化
MOV DCONT,#0
MOV FLAGS1,#0FFH
MAIN:
;LCD工作方式设定
CLR LCMC ;打开LCM电源
MOV P1M1,#00H ;将P1.7,P1.6,P1.4置为上拉输出
MOV P1M2,#0D0H
MOV P0M1,#00H ;将P0.7置为上拉输出
MOV P0M2,#01H
ACALL INTI1621
MOV LCDCOMMAND,#Tone4k ;设置音频输出频率为4KHZ
ACALL Send1621Com

;进入正常显示状态
;正常显示情况下,不发送数据时,把SPI口均置为高
SETB LED1 ;点亮LED1
CLR LED2
CLR LED3
CLR LED4
ACALL RUNOK
;进入全显示状态
;LCD各段均显示,然后SPI口设为高阻态,
CLR LED1
SETB LED2
ACALL RUNALL
;进入掉电状态
;掉电状态是把HT1621设置为掉电方式,以降低功耗
CLR LED2
SETB LED3
ACALL RUNDOWN
;进入关断电源状态
;关断HT1621电源,以降低功耗
CLR LED3
SETB LED4
ACALL RUNNOP

SJMP MAIN
;RUNOK
;从0到f循环显示LCD数位(数字右移)
;显示1秒后,所有数字均加1(即缓冲区加11H)
RUNOK:
CLR keyin ;**keyin标志位
ACALL LOADDAT ;装载数据
CLR C
MOV A,#9
SUBB A,DCONT ;判断DCONT是否大于9,大于9则打开蜂鸣器
JNC RUNOK_L1
MOV LCDCOMMAND,#ToneOn
ACALL Send1621Com
RUNOK_L1:
ACALL BrushLcd
ACALL DELAY_1S
MOV LCDCOMMAND,#ToneOff;关闭蜂鸣器
ACALL Send1621Com
ACALL DELAY_1S ;延时并接收按键
ACALL DELAY_1S
ACALL DELAY_1S

INC DCONT ;计数器加1
CLR C
MOV A,#0FH ;若DCONT的值大于0FH,则复位为0
SUBB A,DCONT
JNC RUNOK_L2
MOV DCONT,#0
ACALL INTI1621
MOV LCDCOMMAND,#Tone4k ;设置音频输出频率为4KHZ
ACALL Send1621Com

RUNOK_L2:
JNB keyin,RUNOK ;判断是否有按键,有则退出正常显示方式
RET

;数据装载程序
;将计数数据进行字模转换后放入显示缓冲区,包括状态字段。
LOADDAT:
MOV R0,#DISBUFFER+10 ;指定显示地址为SEG20开始
MOV R1,DCONT
MOV R7,#4
LOAD_L1: ;将DCONT值依次加1,放入后面相应位置,若加1后超过0FH,则翻卷为0
MOV A,R1
MOV DPTR,#LCDData
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC R1
CLR C
MOV A,R1
SUBB A,#10H
JC LOAD_L2
MOV A,#0
MOV R1,A
LOAD_L2:
DJNZ R7,LOAD_L1

MOV A,FLAGS1 ;装入状态字段
MOV @R0,A

MOV R0,#DISBUFFER+12 ;显示小数点
MOV A,@R0
ORL A,#01H
MOV @R0,A
RET

;RUNALL
;全显示输出,把SPI接口置为高阻态,以便测量LCM功耗
RUNALL:
MOV R7,#5
MOV R0,#DISBUFFER+10
RUNALL_L1:
MOV @R0,#0FFH ;装入数据0FFH
INC R0
DJNZ R7,RUNALL_L1

ACALL BrushLcd ;刷新LCD显示
ORL P0M1,#2AH ;设置IO口为高阻态
ANL P0M2,#0D5H
MOV PT0AD,#2AH
RUNALL_L2: ;等待按键
JB KEY,$
MOV R7,#0FFH
DJNZ R7,$
JB KEY,RUNALL_L2
JNB KEY,$

ANL P0M1,#0D5H ;恢复IO口
MOV PT0AD,#00H
RET
;RUNDOWN
;掉电方式,把SPI接口置为高阻态,以便测量LCM功耗
RUNDOWN:
ACALL HT1621DOWN ;进入掉电状态
ORL P0M1,#2AH
ANL P0M2,#0D5H
MOV PT0AD,#2AH
RUNDOWN_L1:
JB KEY,$
MOV R7,#0FFH
DJNZ R7,$
JB KEY,RUNDOWN_L1
JNB KEY,$

RET

;RUNNOP
;关断LCD电源,把SPI接口置为高阻态。
RUNNOP:
SETB LCMC ;关断LCM电源
RUNNOP_L1:
JB KEY,$
MOV R7,#0FFH
DJNZ R7,$
JB KEY,RUNNOP_L1
JNB KEY,$

ANL P0M1,#0D5H ;恢复IO口设置
MOV PT0AD,#00H
CLR LCMC ;打开LCM电源
RET


;-----------------------------------------------
;延时1S子程序
; 在延时过程序可以判断有无按键,有按键时置位keyin位,无按
;键时不对keyin操作。
DELAY_1S:
SETB TR0 ;启动定时器
MOV R0,#2
BACK:
MOV TL0,#0B0H ;置初值
MOV TH0,#3CH
DL:
JB KEY,DL_1
MOV R7,#0FFH ;有按键,进行去抖动处理
DJNZ R7,$
JB KEY,DL_1
SETB keyin ;是按键,置位keyin
DL_1: JNB TF0,DL
CLR TF0
DJNZ R0,BACK ;等待定时时间到
JNB KEY,$ ;等待按键放开
RET

;包含1621操作软件包
$INCLUDE(LCD621.INC) ;包含头文件,头文件内已定义SPI,显示缓冲区,
;及各操作变量,ZY886C型LCD数字显示表等
END
;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+0
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
;========================================================
;表格区
;ZY886C型LCD数字显示表(0-F),供用户转换使用。(以上程序不用此表)
LCDData:
DB 0FCH,60H,0DAH,0F2H,066H,0B6H,0BEH,0E0H,0FEH,0F6H,0EEH,3EH,1AH,7AH,9EH,8EH
;===============================================================
;
;以上程序是HT1621的通用程序,对不同的LCD只是其字模不一样而以。

 深圳:13556886847   陈先生

 

标题:
内容:
联系人:
联系电话:
Email:
公司名称:
联系地址:
 
 
注:1.可以使用快捷键Alt+S或Ctrl+Enter发送信息!
2.如有必要,请您留下您的详细联系方式!