原创 192×64液晶显示汇编程序

2009-3-5 08:16 2873 1 1 分类: MCU/ 嵌入式

192×64液晶显示汇编程序


#include ()
NAME  LCD_19264
#include <c8051F200.inc>             
PUBLIC   O_XL,O_YL,DAIMA,COUNT0,CCWD
PUBLIC gbMapText,CHTAB,CCTAB
PUBLIC  INT,CLEAR,CW_PR,CCW_PR,LCW_PR
LCDDVarSeg  segment data
LCDBvarSeg  segment bit
LCD_19264    segment code



;***************************************
;            lcd 显示程序部分
;***************************************
;=================LCD设置=======================
; 间接控制方式信号定义,根据用户平台接口修改
      PinCSA   BIT   P3.3           ; 片选/PinCSA
      PinCSB    BIT   P0.3           ; 片选/PinCSB
      PinRS    BIT   P3.2            ; 寄存器选择信号
      PinRW     BIT   P3.1            ; 读/ 写选择信号
      PinE1     BIT   P3.0           ; 使能信号
      LcdDataPort  EQU P1              ; 数据总线


; 程序变量定义,根据用户平台提供的内部资源修改
  RSEG LCDDvarSeg
   LcdComReg:     DS 1  ;指令码寄存器
   LcdDat1Reg:    DS 1             ; 数据寄存器
   O_XL:         DS 1             ; 列地址(0-127)
   O_YL:          DS 1            ; 行地址 D2,D1,D0:
     ; 在文本显示下为字符行(以8点行为单位)
     ; 在西文显示时 D7为字符体选择
     ;              D7=0为6x8点阵
     ;        D7=1为8x8点阵
     ; 在绘点显示下以点行为单位,其中枝条
   CCWD:   DS  1             ; 字体宽度 中文是32 中文数字是16
   DAIMA:   DS  1         ; 字符代码寄存器
   COUNT0:  DS  1           ;  字体的宽度,中文是16 中文数字是8
   COUNT1:  DS  1      ; 计数器
  RSEG LCDBvarSeg
  gbMapText:  DBIT 1
;***************************************************
    RSEG LCD_19264


;**************************************************
;  初始化子程序INT(适用JHD19264)
;  内部调用子程序:PR1,PR4
;  程序调用入口:INT
;  程序调用变量:无
      INT:      MOV     LcdComReg,#0C0H      ; 设置显示起始行为第一行
                LCALL   PR1
                LCALL   PR4
                LCALL   PR7
                MOV     LcdComReg,#3FH       ; 开显示设置
                LCALL   PR1
                LCALL   PR4
        LCALL   PR7
                RET
;**************************************************
; 清显示RAM 区(清屏)子程序CLEAR(适应JHD19264)
; 占用内部寄存器:R3,R4
; 内部调用子程序:PR1,PR2,PR4,PR5
; 程序调用入口:CLEAR
        CLEAR:  MOV     R4,#00H  ; 页面地址暂存器设置
        CLEAR1: MOV     A,R4
                ORL     A,#0B8H  ; "或"页面地址设置代码
                MOV     LcdComReg,A  ; 页面地址设置
                LCALL   PR1
                LCALL   PR4
                LCALL   PR7
                MOV     LcdComReg,#40H        ; 列地址设置为"0"
                LCALL   PR1
                LCALL   PR4
                LCALL   PR7
                MOV     R3,#40H         ; 一页清64个字节
        CLEAR2: MOV     LcdDat1Reg,#00H       ; 显示数据为"0"
                LCALL   PR2
                LCALL   PR5
                LCALL   PR8
                DJNZ    R3,CLEAR2       ; 页内字节清零循环
                INC     R4  ; 页地址暂存器加1
                CJNE    R4,#08H,CLEAR1  ; RAM 区清零循环
                RET


;****************************************************
 ;西文字符写入子程序CW_PR(适应JHD19264)
;  占用内部资源:O_XL,O_YL,DAIMA,COUNT1,A,B,DPTR
;  内部调用子程序:PR1,PR2,PR4,PR5
;  连接字库: CHTAB
;  程序调用入口: CW_PR
;   程序输入变量:  O_XL,O_YL,DAIMA
        CW_PR:  MOV     DPTR,#CHTAB ; 确定字符字模块首地址
                MOV     A,DAIMA  ; 取代码
                MOV     B,#08H  ; 字模块宽度为8个字节
                MUL     AB  ; 代码x8
                ADD     A,DPL  ; 字符字模块首地址
              MOV     DPL,A  ; = 字模库首地址 + 代码x 8
                MOV     A,B
                ADDC    A,DPH
                MOV     DPH,A
                MOV     DAIMA,#00H       ; 借用为间址寄存器
                MOV     A,O_YL          ; 读页地址寄存器
                JB      ACC.7,CW_1 ; 判字符体
                MOV     COUNT1,#06H ; 6x8点阵
                LJMP    CW_2
        CW_1:   MOV     COUNT1,#08H ; 8x8点阵
        CW_2:   ANL     A,#07H          ; 取页地址值
                ORL     A,#0B8H  ; "或"页地址指令代码
                MOV     LcdComReg,A  ; 写页地址指针
                LCALL   PR1
                LCALL   PR4
                LCALL   PR7
                MOV     A,O_XL         ; 读列地址寄存器
                JB      ACC.7 , CW_23     ; 1为右屏显示区域
                JB      ACC.6 , CW_22     ; 1为中屏显示区域
                AJMP CW_3     
        CW_22: MOV A,O_YL
           SETB ACC.4
               MOV  O_YL,A
        AJMP CW_3
        CW_23: MOV A,O_YL
           SETB ACC.5
               MOV  O_YL,A        
        CW_3:   ANL     O_XL,#03FH
            MOV     LcdComReg,O_XL        ; 设置列地址值
           
                ORL     LcdComReg,#40H        ; "或"列地址指令标志位
                MOV     A,O_YL          ; 判区域标志以确定设置哪个控制器
                ANL     A,#30H
        CW_31:  CJNE    A,#20H,CW_32    ; "10"为右区
                LCALL   PR7
                LJMP    CW_4


        CW_32:  CJNE    A,#10H,CW_33      ; 01  中区
            LCALL   PR4
                LJMP    CW_4       
    CW_33:  LCALL   PR1             ; "00"为左区
        CW_4:   MOV     A,DAIMA          ; 取间址寄存器值
                MOVC    A,@A+DPTR ; 取字符字模数据
                MOV     LcdDat1Reg,A  ; 写数据
                MOV     A,O_YL          ; 判区域标志
                ANL     A,#30H



        CW_41:  CJNE    A,#20H,CW_42    ; "10"为右区
                LCALL   PR8
                LJMP    CW_5
        CW_42:  CJNE    A,#10H ,CW_43    ; "01"为中区
                LCALL   PR5
                LJMP    CW_5
        CW_43:  LCALL PR2               ; "00"为左区
        CW_5:   INC     DAIMA            ; 间址加1
                INC     O_XL  ; 列地址加1
                MOV     A,O_XL         ; 判列地址是否超出区域范围
                CJNE    A,#40H,CW_9



        CW_6:  // JC      CW_9            ; 未超出则继续
                MOV     O_XL,#00H       ;
                MOV     A,O_YL          ; 超出则判在何区域
                JB      ACC.5,CW_91     ; 在右区域则退出
        JB      ACC.4,CW_61
         SETB    ACC.4
        AJMP CW_62
        CW_61:  SETB    ACC.5
            CLR     ACC.4
        MOV     O_YL,A
                MOV     LcdComReg,#40H        ; 设置右区列地址为"0"
                LCALL   PR7
        AJMP CW_9


        CW_62:           
                MOV     O_YL,A
                MOV     LcdComReg,#40H        ; 设置右区列地址为"0"
                LCALL   PR4
        CW_9:   DJNZ    COUNT1,CW_4     ; 循环
        CW_91:  RET


;****************************************************
 ;西文字符写入子程序CW_PR(适应JHD12864) 反黑
;  占用内部资源:O_XL,O_YL,DAIMA,COUNT1,A,B,DPTR
;  内部调用子程序:PR1,PR2,PR4,PR5
;  连接字库: CHTAB
;  程序调用入口: LCW_PR
;   程序输入变量:  O_XL,O_YL,DAIMA


    LCW_PR: MOV    DPTR,#CHTAB ; 确定字符字模块首地址
                MOV     A,DAIMA  ; 取代码
                MOV     B,#08H  ; 字模块宽度为8个字节
                MUL     AB  ; 代码x8
                ADD     A,DPL  ; 字符字模块首地址
              MOV     DPL,A  ; = 字模库首地址 + 代码x 8
                MOV     A,B
                ADDC    A,DPH
                MOV     DPH,A
                MOV     DAIMA,#00H       ; 借用为间址寄存器
                MOV     A,O_YL          ; 读页地址寄存器
                JB      ACC.7,LCW_1 ; 判字符体
                MOV     COUNT1,#06H ; 6x8点阵
                LJMP    LCW_2
        LCW_1:  MOV     COUNT1,#08H ; 8x8点阵
        LCW_2:  ANL     A,#07H          ; 取页地址值
                ORL     A,#0B8H  ; "或"页地址指令代码
                MOV     LcdComReg,A  ; 写页地址指针
                LCALL   PR1
                LCALL   PR4
                MOV     A,O_XL         ; 读列地址寄存器
                CLR     C
                SUBB    A,#40H          ; 列地址-64
                JC      LCW_3            ; 〈0为左屏显示区域
                MOV     O_XL,A          ; ≥0为右屏显示区域
                MOV     A,O_YL
                SETB    ACC.5           ; 设置区域标志位.
                MOV     O_YL,A          ; "00"为左,"10"为右
        LCW_3:  MOV     LcdComReg,O_XL        ; 设置列地址值
                ORL     LcdComReg,#40H        ; "或"列地址指令标志位
                MOV     A,O_YL          ; 判区域标志以确定设置哪个控制器
                ANL     A,#30H
        LCW_31: CJNE    A,#20H,LCW_32    ; "10"为右区
                LCALL   PR4
                LJMP    LCW_4
        LCW_32: LCALL   PR1             ; "00"为左区
        LCW_4:  MOV     A,DAIMA          ; 取间址寄存器值
                MOVC    A,@A+DPTR ; 取字符字模数据
                CPL A
                MOV     LcdDat1Reg,A  ; 写数据
                MOV     A,O_YL          ; 判区域标志
                ANL     A,#30H
        LCW_41:  CJNE    A,#20H,LCW_42    ; "10"为右区
                LCALL   PR5
                LJMP    LCW_5
        LCW_42:  LCALL   PR2             ; "00"为左区
        LCW_5:   INC     DAIMA            ; 间址加1
                INC     O_XL  ; 列地址加1
                MOV     A,O_XL         ; 判列地址是否超出区域范围
                CJNE    A,#40H,LCW_6
        LCW_6:   JC      LCW_9            ; 未超出则继续
                MOV     O_XL,#00H       ;
                MOV     A,O_YL          ; 超出则判在何区域
                JB      ACC.5,LCW_91     ; 在右区域则退出
        LCW_61:  SETB    ACC.5           ; 在左区则转右区
                MOV     O_YL,A
                MOV     LcdComReg,#40H        ; 设置右区列地址为"0"
                LCALL   PR4
        LCW_9:   DJNZ    COUNT1,LCW_4     ; 循环
        LCW_91:  RET
;*;**************************************************
;  绘点子程序W_DOT(适应JHD12864)
;  占用内部资源:O_XL,O_YL,A,B
;  内部调用子程序:PR1,PR2,PR3,PR4,PR5,PR6
;  程序调用入口: W_DOT
;  程序输入变量:  O_XL,O_YL
;--------------------------------------------------
    ;    W_DOT:  MOV     A,O_YL          ; 读行地址寄存器
        ;        ANL     A,#7FH          ; 屏蔽点标志位
          ;      MOV     B,#08H          ; 8点行/页
          ;      DIV     AB              ; A为页地址,B为点位置
          ;      ORL     A,#0B8H         ; 设置页面地址
          ;      MOV     LcdComReg,A
           ;     LCALL   PR1
           ;     LCALL   PR4
           ;     INC     B               ; B作为循环量加1
           ;     SETB    C               ; 设置点数据
           ;     CLR     A               ; A="0"
      ; W_DOT1:  RLC     A               ; 数据带进位左移位
           ;     DJNZ    B,W_DOT1        ; 循环将点数据移到位
          ;      PUSH    ACC             ; 点数据入栈
           ;     MOV     A,O_XL          ; 读列寄存器
           ;     CLR     C
            ;    SUBB    A,#40H          ; 列地址-64
            ;    JC      W_DOT3          ; 〈0为左屏显示区域
            ;    MOV     O_XL,A          ; ≥0为右屏显示区域
            ;    MOV     LcdComReg,O_XL        ; 设置列地址值
            ;    ORL     LcdComReg,#40H        ; "或"列地址指令标志位
            ;    LCALL   PR4
            ;    LCALL   PR6             ; "空读"
            ;    LCALL   PR6
            ;    MOV     A,O_YL          ; 取点标志位置入进位位C
            ;    MOV     C,ACC.7
            ;    POP     ACC             ; 取点数据
            ;    JNC     W_DOT11         ; 判点标志为"0"?
            ;    ORL     A,LcdDat1Reg          ; 将点数据"1"写入当前显示数据
             ;   LJMP    W_DOT12
      ; W_DOT11: CPL     A               ; 点数据取反
            ;    ANL     A,LcdDat1Reg          ; 将点数据"0"写入当前显示数据
       ;W_DOT12: MOV     LcdDat1Reg,A          ; 存入数据
             ;   MOV     LcdComReg,O_XL        ; 设置列地址值
             ;   ORL     LcdComReg,#40H        ; "或"列地址指令标志位
             ;   LCALL   PR4
             ;   LCALL   PR5             ; 写入数据
             ;   RET
       ; W_DOT3: MOV     LcdComReg,O_XL        ; 设置列地址值
             ;   ORL     LcdComReg,#40H        ; "或"列地址指令标志位
             ;   LCALL   PR1
            ;    LCALL   PR3             ; "空读"
            ;    LCALL   PR3
            ;    MOV     A,O_YL          ; 取点标志位置入进位位C
            ;    MOV     C,ACC.7
             ;   POP     ACC             ; 取点数据
             ;   JNC     W_DOT31         ; 判点标志为"0"?
             ;   ORL     A,LcdDat1Reg          ; 将点数据"1"写入当前显示数据
            ;    LJMP    W_DOT32
      ; W_DOT31: CPL     A               ; 点数据取反
          ;      ANL     A,LcdDat1Reg          ; 将点数据"0"写入当前显示数据
       ;W_DOT32: MOV     LcdDat1Reg,A          ; 存入数据
         ;       MOV     LcdComReg,O_XL        ; 设置列地址值
         ;       ORL     LcdComReg,#40H        ; "或"列地址指令标志位
          ;      LCALL   PR1
          ;      LCALL   PR2             ; 写入数据
          ;      RET


;----------------------------------------------------
       ;***************************************************
;64*128图片&16*16点阵汉字写入子程序CCW_PR(适应JHD19264)
;  占用内部资源:O_XL,O_YL,DAIMA,COUNT1,A,B,DPTR,OOH位地址
;  内部调用子程序:PR1,PR2,PR4,PR5
;  连接字库:      CCTAB
;  连接图库:      PICTAB
;  程序调用入口:  CCW_PR
;  程序输入变量:  O_XL,O_YL,DAIMA
;----------------------------------------------------
        CCW_PR: JB      gbMapText, PICTURE
                MOV     B,CCWD          ; 字模块宽度为32个字节
                MOV     DPTR,#CCTAB     ; 确定字符字模块首地址
                LJMP    CCW_PR1
       PICTURE: MOV     B,#20H          ; 字模块宽度为128个字节
                MOV     DPTR,#PICTAB    ; 确定图片模块首地址
       CCW_PR1: MOV     A,DAIMA         ; 取代码
                MUL     AB              ; 代码X128
                ADD     A,DPL           ; 字符字模块首地址
                MOV     DPL,A           ; = 字模库首地址 + 代码X 128
                MOV     A,B
                ADDC    A,DPH
                MOV     DPH,A
                PUSH    O_XL  ; 列地址入栈
                PUSH    O_XL  ; 列地址入栈
                MOV     DAIMA,#00H ; 代码寄存器借用为间址寄存器
        CCW_1:  JB      gbMapText,PICTURE2
                MOV     COUNT1,COUNT0       ; 计数器设置为16
                LJMP    WORDS
     PICTURE2:  MOV     COUNT1,COUNT0      ; 计数器设置为128


         WORDS: MOV     A,O_YL          ; 读页地址寄存器
                ANL     A,#07H
                ORL     A,#0B8H  ; "或"页地址设置代码
                MOV     LcdComReg,A  ; 写页地址设置指令
                LCALL   PR1
                LCALL   PR4
                LCALL   PR7
                POP     O_XL  ; 取列地址值
                MOV     A,O_XL         ; 读列地址寄存器
                JB      ACC.7 , CCW_23     ; 1为右屏显示区域
                JB      ACC.6 , CCW_22     ; 1为中屏显示区域
                AJMP CCW_3
            
      
        CCW_22: MOV A,O_YL
            SETB ACC.4
                MOV  O_YL,A
         AJMP CCW_3
        CCW_23: MOV A,O_YL
            SETB ACC.5
                MOV  O_YL,A



        CCW_3:  ANL     O_XL,#03FH
            MOV     LcdComReg,O_XL        ; 设置列地址值
                ORL     LcdComReg,#40H        ; "或"列地址指令标志位
                MOV     A,O_YL          ; 判区域标志以确定设置哪个控制器
                ANL     A,#30H
        CCW_31: CJNE    A,#20H,CCW_32   ; "10"为右区
                LCALL   PR7
                LJMP    CCW_4
        CCW_32: CJNE    A,#10H,CCW_33   ;   01  为中区
            LCALL   PR4
                LJMP    CCW_4
        
    CCW_33:  LCALL   PR1             ; "00"为左区



        CCW_4:  MOV     A,DAIMA  ; 取间址寄存器值
                MOVC    A,@A+DPTR ; 取汉字字模数据
                MOV     LcdDat1Reg,A  ; 写数据
                MOV     A,O_YL          ; 判区域标志
                ANL     A,#30H
        CCW_41: CJNE    A,#20H,CCW_42   ; "10"为右区
                LCALL   PR8
                LJMP    CCW_5
        CCW_42: CJNE    A,#10H,CCW_43
            LCALL   PR5
                LJMP    CCW_5
     
    CCW_43:  LCALL   PR2             ; "00"为左区



        CCW_5:  INC     DAIMA            ; 间址寄存器加1
                INC     O_XL  ; 列地址寄存器加1
                MOV     A,O_XL         ; 判列地址是否超出区域范围
                CJNE    A,#40H,CCW_7


        CCW_6:          ; 未超出则继续
                MOV     O_XL,#00H


                MOV     A,O_YL          ; 超出则判在何区域
                JB      ACC.5,CCW_8     ; 在右区域则退出
        JB      ACC.4, CCW_61
                SETB    ACC.4



                AJMP    CCW_62
        CCW_61: SETB    ACC.5
            CLR     ACC.4 
        MOV     O_YL,A        ; 在左区则转中区
                MOV     LcdComReg,#40H        ; 设置右区列地址为"0"
                LCALL   PR7
        AJMP CCW_7


        CCW_62: MOV     O_YL,A
                MOV     LcdComReg,#40H        ; 设置右区列地址为"0"
                LCALL   PR4
        CCW_7:  DJNZ    COUNT1,CCW_4    ; 当页循环


        CCW_8:  MOV     A,O_YL          ; 读页地址寄存器
                JB      ACC.7,CCW_9     ; 判完成标志D7位, "1"则完成退出
                INC     A  ; 否则页地址加1
                SETB    ACC.7  ; 置完成位为"1"
                ANL     A,#0CFH         ; 清区域标志
                MOV     O_YL,A
                JB      gbMapText, PICTURE1
                MOV     DAIMA,COUNT0
                LJMP    CCW_1
   PICTURE1:    MOV     DAIMA,#32 ; 间址寄存器设置为128
                LJMP    CCW_1  ; 大循环
        CCW_9:  RET


;***************************************************************************
; 间接驱动驱动子程序由9个子程序组成(适应JHD19264):
;  占用内部资源:LcdComReg,LcdDat1Reg,A
;  占用系统资源:PinCSA,PinCSB,RS,RW,E1,LcdDataPort
;  程序输入变量:LcdComReg 或 LcdDat1Reg
; 1. 左区驱动子程序
; 1.1 写指令代码子程序(左)


        PR1:    CLR     PinCSA            ; 片选设置为"00"
                CLR     PinCSB            ;
                CLR     PinRS            ; RS="0"
                SETB    PinRW            ; R/W=1
        PR11:   MOV     LcdDataPort,#0FFH   ; LcdDataPort口置"1"
                SETB    PinE1             ; E="1"
                MOV     A,LcdDataPort       ; 读状态字
                CLR     PinE1              ; E="0"
                JB      ACC.7,PR11     ; 判"忙"标志为"0"否, 否再读
                CLR     PinRW            ; R/W=0
                MOV     LcdDataPort,LcdComReg     ; 写指令代码
                SETB   PinE1               ; E="1"
                CLR     PinE1              ; E="0"
                RET
; 1.2 写显示数据子程序(左)
        PR2:    CLR     PinCSA            ; 片选设置为"00"
                 CLR    PinCSB            ;
                CLR     PinRS            ; RS="0"
                SETB    PinRW            ; R/W=1
        PR21:   MOV     LcdDataPort,#0FFH   ; LcdDataPort口置"1"
                SETB    PinE1              ; E="1"
                MOV     A,LcdDataPort       ; 读状态字
                CLR     PinE1               ; E="0"
                JB      ACC.7,PR21     ; 判"忙"标志为"0"否, 否再读
                SETB    PinRS            ; RS="1"
                CLR     PinRW            ; R/W=0
                MOV     LcdDataPort,LcdDat1Reg    ; 写数据
                SETB    PinE1              ; E="1"
                CLR     PinE1               ; E="0"
                RET
; 1.3 读显示数据子程序(左)
        PR3:    CLR     PinCSA            ; 片选设置为"00"
                CLR     PinCSB            ;
                CLR     PinRS            ; RS="0"
                SETB    PinRW            ; R/W=1
        PR31:   MOV     LcdDataPort,#0FFH   ; LcdDataPort口置"1"
                SETB    PinE1               ; E="1"
                MOV     A,LcdDataPort       ; 读状态字
                CLR     PinE1              ; E="0"
                JB      ACC.7,PR31     ; 判"忙"标志为"0"否, 否再读
                SETB    PinRS            ; RS="1"
                MOV     LcdDataPort,#0FFH   ; LcdDataPort口置"0"
                SETB    PinE1              ; E="1"
                MOV     LcdDat1Reg,LcdDataPort    ; 读数据
                CLR     PinE1               ; E="0"
                RET


 


 


; 2. 中区驱动子程序
; 2.1 写指令代码子程序(中)
        PR4:    SETB    PinCSA            ; 片选设置为"01"
                CLR     PinCSB            ;
                CLR     PinRS            ; RS="0"
                SETB    PinRW            ; R/W=1
        PR41:   MOV     LcdDataPort,#0FFH   ; LcdDataPort口置"1"
                SETB    PinE1             ; E="1"
                MOV     A,LcdDataPort       ; 读状态字
                CLR     PinE1               ; E="0"
                JB      ACC.7,PR41     ; 判"忙"标志为"0"否, 否再读
                CLR     PinRW            ; R/W=0
                MOV     LcdDataPort, LcdComReg     ; 写指令代码
                SETB    PinE1              ; E="1"
                CLR     PinE1               ; E="0"
                RET
; 2.2 写显示数据子程序(中)
        PR5:    SETB    PinCSA            ; 片选设置为"01"
                CLR     PinCSB            ;
                CLR     PinRS            ; RS="0"
                SETB    PinRW            ; R/W=1
        PR51:   MOV     LcdDataPort,#0FFH   ; LcdDataPort口置"1"
                SETB    PinE1               ; E="1"
                MOV     A,LcdDataPort       ; 读状态字
                CLR     PinE1               ; E="0"
                JB      ACC.7,PR51     ; 判"忙"标志为"0"否, 否再读
                SETB    PinRS            ; RS="1"
                CLR     PinRW            ; R/W=0
                MOV     LcdDataPort,LcdDat1Reg    ; 写数据
                SETB    PinE1               ; E="1"
                CLR     PinE1              ; E="0"
                RET
; 2.3 读显示数据子程序(中)
        PR6:    SETB    PinCSA            ; 片选设置为"01"
                CLR     PinCSB            ;
                CLR     PinRS            ; RS="0"
                SETB    PinRW            ; R/W=1
        PR61:   MOV     LcdDataPort,#0FFH   ; LcdDataPort口置"1"
                SETB    PinE1             ; E="1"
                MOV     A,LcdDataPort       ; 读状态字
                CLR     PinE1               ; E="0"
                JB      ACC.7,PR61     ; 判"忙"标志为"0"否, 否再读
                SETB    PinRS            ; RS="1"
                MOV     LcdDataPort,#0FFH   ; LcdDataPort口置"0"
                SETB    PinE1               ; E="1"
                MOV     LcdDat1Reg,LcdDataPort    ; 读数据
                CLR     PinE1              ; E="0"
                RET


; 3.右区驱动子程序
; 3.1 写指令代码子程序(右)
        PR7:    CLR     PinCSA            ; 片选设置为"10"
                SETB    PinCSB            ;
                CLR     PinRS            ; RS="0"
                SETB    PinRW            ; R/W=1
        PR71:   MOV     LcdDataPort,#0FFH   ; LcdDataPort口置"1"
                SETB    PinE1             ; E="1"
                MOV     A,LcdDataPort       ; 读状态字
                CLR     PinE1               ; E="0"
                JB      ACC.7,PR71     ; 判"忙"标志为"0"否, 否再读
                CLR     PinRW            ; R/W=0
                MOV     LcdDataPort, LcdComReg     ; 写指令代码
                SETB    PinE1              ; E="1"
                CLR     PinE1               ; E="0"
                RET
; 3.2 写显示数据子程序(右)
        PR8:     CLR   PinCSA            ; 片选设置为10"
                SETB     PinCSB            ;
                CLR     PinRS            ; RS="0"
                SETB    PinRW            ; R/W=1
        PR81:   MOV     LcdDataPort,#0FFH   ; LcdDataPort口置"1"
                SETB    PinE1               ; E="1"
                MOV     A,LcdDataPort       ; 读状态字
                CLR     PinE1               ; E="0"
                JB      ACC.7,PR81     ; 判"忙"标志为"0"否, 否再读
                SETB    PinRS            ; RS="1"
                CLR     PinRW            ; R/W=0
                MOV     LcdDataPort,LcdDat1Reg    ; 写数据
                SETB    PinE1               ; E="1"
                CLR     PinE1              ; E="0"
                RET
; 3.3 读显示数据子程序(右)
        PR9:    CLR   PinCSA            ; 片选设置为"10"
                SETB    PinCSB            ;
                CLR     PinRS            ; RS="0"
                SETB    PinRW            ; R/W=1
        PR91:   MOV     LcdDataPort,#0FFH   ; LcdDataPort口置"1"
                SETB    PinE1             ; E="1"
                MOV     A,LcdDataPort       ; 读状态字
                CLR     PinE1               ; E="0"
                JB      ACC.7,PR91     ; 判"忙"标志为"0"否, 否再读
                SETB    PinRS            ; RS="1"
                MOV     LcdDataPort,#0FFH   ; LcdDataPort口置"0"
                SETB    PinE1               ; E="1"
                MOV     LcdDat1Reg,LcdDataPort    ; 读数据
                CLR     PinE1              ; E="0"
                RET


 


 


 



         
;============== 中文字符库 ==================================
CCTAB:
;--  文字:  0  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,00FH,010H,020H,020H,010H,00FH,000H  ;00
;--  文字:  1  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,010H,010H,0F8H,000H,000H,000H,000H,000H,020H,020H,03FH,020H,020H,000H,000H  ;01


;--  文字:  2  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,070H,008H,008H,008H,088H,070H,000H,000H,030H,028H,024H,022H,021H,030H,000H  ;02


;--  文字:  3  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,030H,008H,088H,088H,048H,030H,000H,000H,018H,020H,020H,020H,011H,00EH,000H  ;03


;--  文字:  4  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,000H,0C0H,020H,010H,0F8H,000H,000H,000H,007H,004H,024H,024H,03FH,024H,000H   ;04


;--  文字:  5  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,0F8H,008H,088H,088H,008H,008H,000H,000H,019H,021H,020H,020H,011H,00EH,000H   ;05


;--  文字:  6  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,0E0H,010H,088H,088H,018H,000H,000H,000H,00FH,011H,020H,020H,011H,00EH,000H  ;06


;--  文字:  7  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,038H,008H,008H,0C8H,038H,008H,000H,000H,000H,000H,03FH,000H,000H,000H,000H   ;07


;--  文字:  8  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,070H,088H,008H,008H,088H,070H,000H,000H,01CH,022H,021H,021H,022H,01CH,000H   ;08


;--  文字:  9  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,000H,031H,022H,022H,011H,00FH,000H   ;09



;--  文字:  :  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,000H,000H,0C0H,0C0H,000H,000H,000H,000H,000H,000H,030H,030H,000H,000H,000H   ;0a


DB  000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H   ;0b
;--  文字:  今  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  080H,080H,040H,020H,010H,008H,024H,043H,0C4H,008H,010H,020H,060H,0C0H,040H,000H
DB  000H,000H,000H,002H,002H,002H,002H,082H,042H,032H,00EH,002H,000H,000H,000H,000H   ;06


;--  文字:  日  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  000H,000H,000H,0FEH,042H,042H,042H,042H,042H,042H,042H,0FEH,000H,000H,000H,000H
DB  000H,000H,000H,03FH,010H,010H,010H,010H,010H,010H,010H,03FH,000H,000H,000H,000H   ;07


;--  文字:  台  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  000H,000H,040H,060H,050H,048H,044H,063H,022H,020H,020H,028H,070H,020H,000H,000H
DB  000H,000H,000H,07FH,021H,021H,021H,021H,021H,021H,021H,07FH,000H,000H,000H,000H   ;08


;--  文字:  数  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  010H,092H,054H,038H,0FFH,038H,054H,052H,080H,0F0H,01FH,012H,010H,0F0H,010H,000H
DB  042H,042H,02AH,02EH,013H,01AH,026H,002H,040H,020H,013H,00CH,033H,060H,020H,000H   ;09


;--  文字:  间  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  000H,0F8H,001H,006H,000H,0F0H,092H,092H,092H,092H,0F2H,002H,002H,0FEH,000H,000H
DB  000H,0FFH,000H,000H,000H,007H,004H,004H,004H,004H,007H,040H,080H,07FH,000H,000H   ;0A


;--  文字:  隔  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  000H,0FEH,022H,05AH,086H,080H,082H,0BAH,0AAH,0AAH,0AAH,0AAH,0BAH,082H,080H,000H
DB  000H,0FFH,002H,004H,003H,0FFH,000H,005H,006H,07CH,006H,005H,044H,080H,07FH,000H  ;0B


;--  文字:  时  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  000H,0FCH,044H,044H,044H,0FCH,010H,090H,010H,010H,010H,0FFH,010H,010H,010H,000H
DB  000H,007H,004H,004H,004H,007H,000H,000H,003H,040H,080H,07FH,000H,000H,000H,000H   ;0C


;--  文字:  预  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  020H,022H,02AH,0F2H,02AH,066H,020H,002H,0F2H,01AH,0D6H,012H,012H,0F2H,002H,000H
DB  000H,020H,040H,03FH,000H,000H,040H,040H,027H,018H,007H,008H,010H,027H,060H,000H   ;0D


;--  文字:  警  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  020H,01AH,0FAH,0AFH,0AAH,0EFH,00AH,0FAH,010H,08FH,054H,024H,05CH,084H,004H,000H
DB  002H,002H,002H,0EAH,0AAH,0AAH,0ABH,0AAH,0ABH,0AAH,0AAH,0EAH,002H,002H,003H,000H   ;0E


;--  文字:  强  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  000H,0F2H,012H,012H,01EH,000H,0C0H,05EH,052H,0F2H,052H,052H,05EH,0C0H,000H,000H
DB  000H,001H,041H,081H,07FH,000H,087H,084H,084H,0FFH,044H,044H,054H,0E7H,040H,000H   ;0F


;--  文字:  度  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  000H,000H,0FCH,004H,024H,024H,0FCH,0A5H,0A6H,0A4H,0FCH,024H,024H,024H,004H,000H
DB  080H,060H,01FH,080H,080H,042H,046H,02AH,012H,012H,02AH,026H,042H,0C0H,040H,000H   ;10


;--  文字:  报  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  008H,008H,088H,0FFH,048H,028H,000H,0FFH,0C1H,041H,041H,049H,051H,0CFH,000H,000H
DB  001H,041H,080H,07FH,000H,000H,000H,0FFH,040H,023H,014H,01CH,033H,060H,020H,000H   ;11


;--  文字:  特  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  020H,01CH,010H,0FFH,090H,0B0H,024H,024H,024H,03FH,024H,0E4H,024H,024H,020H,000H
DB  002H,002H,001H,0FFH,000H,000H,001H,005H,019H,041H,081H,07FH,001H,001H,001H,000H  ;12


;--  文字:  定  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  000H,010H,00CH,0A4H,024H,024H,025H,0E6H,024H,024H,024H,024H,014H,00CH,004H,000H
DB  040H,020H,018H,007H,008H,010H,020H,07FH,042H,042H,042H,042H,040H,040H,000H,000H   ;13



;--  文字:  年  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  040H,020H,010H,00CH,0E3H,022H,022H,022H,0FEH,022H,022H,022H,022H,002H,000H,000H
DB  004H,004H,004H,004H,007H,004H,004H,004H,0FFH,004H,004H,004H,004H,004H,004H,000H   ;14


;--  文字:  月  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  000H,000H,000H,000H,000H,0FFH,011H,011H,011H,011H,011H,0FFH,000H,000H,000H,000H
DB  000H,040H,020H,010H,00CH,003H,001H,001H,001H,021H,041H,03FH,000H,000H,000H,000H   ;15


;--  调入了一幅图像:车轮  这是您新建的图像  --
;--  宽度x高度=16x16  --
DB  000H,000H,0F0H,0C8H,0C4H,084H,09CH,0FCH,09CH,084H,0C4H,0C8H,0F0H,000H,000H,000H
DB  000H,000H,007H,009H,011H,010H,01CH,01FH,01CH,010H,011H,009H,007H,000H,000H,000H   ;16


;--  调入了一幅图像:车轮 这是您新建的图像  --
;--  宽度x高度=16x16  --
DB  000H,000H,0F0H,038H,03CH,03CH,044H,084H,044H,03CH,03CH,038H,0F0H,000H,000H,000H
DB  000H,000H,007H,00EH,01EH,01EH,011H,010H,011H,01EH,01EH,00EH,007H,000H,000H,000H   ;17



;====================== 西文字符库 =============================
;================适应HD61202,SED1520控制器=====================


CHTAB:
  
   
   
       
;===================== THE END =================================
;==================== 图片字符库 ================================
PICTAB:
         
        
END      

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
1
关闭 站长推荐上一条 /3 下一条