|
;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只是其字模不一样而以 | |