|
我用HT1621显示时间、温度、制冷/制热,时间显示用“:”闪烁,我是否需要在MCU中(台湾义隆EM78P156)专门设对应的RAM区?能否提供参考程序。
最好要设,LCD的反应时间是毫秒级的,开个RAM缓冲,由显示子程序往HT1621送数据,主程序和其它程序改变要显示的内容。
最好在RAM区中设置一个显缓区,定时刷新,然后调用一个通讯模块将数据写到HT1621中去.
另:关于时间的秒闪,如果你用了TCC中断的话,可用计数器中的某一位充当秒闪标志。
;****************************
;HT1621操作辑
P_HT EQU 0X05 ;LCD驱动口
DATA EQU 1
WR EQU 3
CS EQU 4
;****************************
;=======================
;写字节
;入口: LCD_D: 写往DATA的数值
; LCD_N: 位数(循环数)
;=======================
WBLCD:
MOV A,@8
WBLCD1:
MOV LCD_N,A
;=======
WNLCD:
RLC LCD_D ;LCD_D左循环,LCD_D(7)->C
JBC R3,C ;C=0跳
JMP WNLCD1
BC P_HT,DATA ;DATA=0
JMP WNLCD2
WNLCD1:
BS P_HT,DATA ;DATA=1
WNLCD2:
NOP
NOP
BC P_HT,WR ;WR=0
NOP ;延时1.67uS以上
BS P_HT,WR ;WR=1
NOP ;延时1.67uS以上
DJZ LCD_N
JMP WNLCD
RET
;=======
WBLCDADD: ;写操作码101+首地址码000000(共9位)
MOV A,@0B10100000
W9LCD:
MOV LCD_D,A
BC R3,C
MOV A,@9
JMP WBLCD1
;=======
WBLCDCOM: ;命令码100(共3位)
MOV A,@0B10000000
MOV LCD_D,A
MOV A,@3
JMP WBLCD1
;****************************
;LCD显示初始化
;功能: LCD驱动器HT1621显示初始化
;****************************
RESTLCD:
BC P_HT,CS ;CS=0,开片选
NOP
CALL WBLCDCOM ;命令操作
MOV A,@0B00000001
CALL W9LCD ;开震荡源SYSEN
MOV A,@0B00101001
CALL W9LCD ;BIAS 1/3
MOV A,@0B00000011
CALL W9LCD ;开显示LCDON
NOP
BS P_HT,CS ;CS=1,关片选
RET
;****************************
;送LCD显示
;功能: U1显缓区(0X20-0X28)->LCD驱动器HT1621内RAM
;****************************
MOVLCD:
WDTC ;喂狗
BC P_HT,CS ;CS=0,开片选
MOV A,@DISBUF1 ;载入显缓区首地址
MOV R4,A
CALL WBLCDADD ;写操作码101+首地址码000000->LCD
MOVLCD1:
MOV A,R0 ;取欲显示字符代码
CALL TABLCD ;查表求笔画码
MOV LCD_D,A
;=======填加小数点
RLC DISBUF9 ;取小数点->C
JBC R3,C ;
BS LCD_D,0 ;填加小数点
;=======
CALL WBLCD ;笔画码->LCD
MOV A,R4
AND A,@0B00111111
XOR A,@DISBUF7
JBS R3,Z ;显缓区地址=最后一个显示单元跳
JMP MOVLCD2
;=======小数点
MOV A,DISBUF8
MOV LCD_D,A
CALL WBLCD ;笔画码->LCD
;=======
BS P_HT,CS ;CS=1,关片选
RET
MOVLCD2:
INC R4 ;显缓区地址+1
JMP MOVLCD1(
|
|