我用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(