⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hd61202lcdasm.asm

📁 这个是汇编的驱动
💻 ASM
字号:


 ;写指令代码子程序(中)
PRM0:    PUSH           DPL                    ;;片选设置为"01"
         PUSH           DPH
         ;SETB           P1.1
         ;CLR            P1.0
         ;MOV            A,#00100010B
         ;MOV            P2,A
         MOV            DPTR,#CRADD2         ;设置读状态字地址
PRM01:   MOVX           A,@DPTR                ;读状态字
         JB             ACC.7,PRM01          ;判"忙"标志为"0"否,否在读
         MOV            DPTR,#CWADD2          ;设置写指令代码地址
         MOV            A,COM                 ;取指令代码
         MOVX           @DPTR,A               ;写指令代码
         POP            DPH
         POP            DPL
         RET
;    写显示数据子程序(中)
PRM1:    PUSH           DPL                     ;片选设置为"01"
         PUSH           DPH
         ;SETB           P1.1
         ;CLR            P1.0
         MOV            DPTR,#CRADD2           ;设置读状态字地址
PRM11:   MOVX           A,@DPTR                ;读状态字
         JB             ACC.7,PRM11            ;判"忙"标志为"0"否,否在读
         MOV            DPTR,#DWADD2           ;设置写显示数据地址
         MOV            A,DAT                  ;取数据
         MOVX           @DPTR,A                ;写数据
         POP            DPH
         POP            DPL
         RET
;	读显示数据子程序(中)
PRM2:    PUSH           DPL                    ;片选设置为"01"
         PUSH           DPH
         ;SETB           P1.1
         ;CLR            P1.0
         MOV            DPTR,#CRADD2           ;设置读状态字地址
PRM21:   MOVX           A,@DPTR                ;读状态字
         JB             ACC.7,PRM21            ;判"忙"标志为"0"否,否在读
         MOV            DPTR,#DRADD2           ;设置读显示数据地址
         MOVX           A,@DPTR                ;读数据
         MOV            DAT,A                  ;存数据
         POP            DPH
         POP            DPL
         RET
;	写指令代码子程序(右)
PRR0:    PUSH           DPL                    ;片选设置为"10"
         PUSH           DPH
         ;SETB           P1.0
         ;CLR            P1.1
         MOV            DPTR,#CRADD3           ;设置读状态字地址
PRR01:  MOVX           A,@DPTR                 ;读状态字
         JB             ACC.7,PRR01            ;判"忙"标志为"0"否,否在读
         MOV            DPTR,#CWADD3           ;设置写指令代码地址
         MOV            A,COM                  ;取指令代码
         MOVX           @DPTR,A                ;写指令代码
         POP            DPH
         POP            DPL
         RET
;    写显示数据子程序(右)
PRR1:    PUSH           DPL                    ;片选设置为"10"
         PUSH           DPH
         ;SETB           P1.0
         ;CLR            P1.1
         MOV            DPTR,#CRADD3           ;设置读状态字地址
PRR11:   MOVX           A,@DPTR                ;读状态字
         JB             ACC.7,PRR11            ;判"忙"标志为"0"否,否在读
         MOV            DPTR,#DWADD3           ;设置写显示数据地址
         MOV            A,DAT                  ;取数据
         MOVX           @DPTR,A                ;写数据
         POP            DPH
         POP            DPL
         RET
;	   读显示数据子程序(右)
PRR2:    PUSH           DPL                    ;片选设置为"10"
         PUSH           DPH
         ;SETB           P1.0
         ;CLR            P1.1
         MOV            DPTR,#CRADD3          ;设置读状态字地址
PRR21:   MOVX           A,@DPTR               ;读状态字
         JB             ACC.7,PRR21           ;判"忙"标志为"0"否,否在读
         MOV            DPTR,#DRADD3          ;设置读显示数据地址
         MOVX           A,@DPTR               ;读数据
         MOV            DAT,A                 ;存数据
         POP            DPH
         POP            DPL
         RET

  ;初始化
INITI:  MOV COM,#03FH           ;THE START DISPLAY LINE  ,HERE IS "0" LINE        1100 0000B
        LCALL PRM0
        LCALL PRR0
        MOV   COM,#0CFH         ;SET DISPLAY ON             0011 1111B
        LCALL PRM0
        LCALL PRR0
        RET
  ;清屏
CLEAR:  MOV   R4,#00H           ;SET REGISTOR OF PAGE ADDRESS
CLEAR1: MOV   A,R4
        ORL   A,#0B8H           ;"OR" THE SET CODE OF PAGE ADDRESS    1011 1000B
        MOV   COM,A             ;SET PAGE ADDRESS
        LCALL PRM0
        LCALL PRR0
        MOV   COM,#40H          ;COLUM ADDRESS = 0           0100 0000B
        LCALL PRM0
        LCALL PRR0
        MOV   R3,#40H           ;CLEAR 64 BYTE/PAGE          64
CLEAR2: MOV   DAT,#00H          ;THE DISPLAY DATA IS 0
        LCALL PRM1
        LCALL PRR1
        DJNZ  R3,CLEAR2         ;CYCLE IN PAGE
        INC   R4                ;PAGE ADDRESS+1
        CJNE  R4,#08H,CLEAR1    ;CLEAR IN RAM
        RET

;;;;;;;;;;;;;;;;;;;;;;;WRITE THE LETTER      写入字母符号
   ;     COLUMN   EQU 50H          ;THE COLUMN ADDRESS
   ;     PAGER    EQU 51H          ;D7=0: 6*8
   ;     CODER    EQU 52H          ;
   ;     COUNT    EQU 53H
CW_PR:  PUSH      DPL
        PUSH      DPH
        MOV      DPTR,#CTAB      ;THE LETTER ADDRESS
        MOV      A,CODER         ;
        MOV      B,#08H          ;8BYTE
        MUL      AB              ;*8
        ADD      A,DPL           ;FIRST ADDRESS OF LETTER
        MOV      DPL,A           ;
        MOV      A,B
        ADDC     A,DPH
        MOV      DPH,A
        MOV      CODER,#00H      ;AS REGISTOR
        MOV      A,PAGER         ;READ PAGE ADDRESS
        JB       ACC.7,CW_1     ;
        MOV      COUNT,#06H     ;6*8           6
        LJMP     CW_2
CW_1:   MOV      COUNT,#08H     ;8*8          8
CW_2:   ANL      A,#07H         ;PAGE ADDRESS   AND  0000 0111B
        ORL      A,#0B8H        ; OR  1011 1000B
        MOV      COM,A          ;WRITE ADDRESS POINT
        LCALL    PRM0
        LCALL    PRR0
        MOV      A,COLUMN       ;COLUMN ADDRESS
        CLR      C              ;
        SUBB     A,#40H         ;COLUMN ADDRESS-64    0100 0000B   (64)10
        JC       CW_21          ;<0 IS LEFT
        MOV      COLUMN,A       ;>=0 IS RIGHT
        MOV      A,PAGER         ;
        SETB     ACC.5
        MOV      PAGER,A
        LJMP     CW_3
CW_21:  MOV      A,PAGER
        SETB     ACC.4
        MOV      PAGER,A
CW_3:   MOV      COM,COLUMN     ;SET COLUMN ADDRESS
        ORL      COM,#40H       ;OR 0100 0000B
        MOV      A,PAGER        ;
        ANL      A,#30H         ;AND 0011 0000B
        CJNE     A,#10H,CW_31   ;"0001 0000" IS LEFT
        LCALL    PRM0
        LJMP     CW_4
CW_31:  CJNE     A,#20H,CW_32   ;"0010 0000" IS RIGHT
CW_32:  LCALL    PRR0
        LJMP     CW_4
CW_4:   MOV      A,CODER
        MOVC     A,@A+DPTR      ;TAKE THE LETTER
        MOV      DAT,A          ;WRITE DATA
        MOV      A,PAGER        ;LEFT OR RIGHT
        ANL      A,#30H         ; 0011 0000B
        CJNE     A,#10H,CW_41   ; 0001 0000B     LEFT
        LCALL    PRM1
        LJMP     CW_5
CW_41:  CJNE     A,#20H,CW_5    ; 0010 0000B     RIGHT
        LCALL    PRR1
        LJMP     CW_5
CW_5:   INC      CODER          ; CODER ADDRESS+1
        INC      COLUMN         ; COLUMN+1
        MOV      A,COLUMN       ; IF OUT OF THE ADDRESS?
        CJNE     A,#40H,CW_6    ; 0100 0000B     64
CW_6:   JC       CW_9           ; GO TO CW_9 IF NOT EXIT : GO ON
        MOV      COLUMN,#00H    ;
        MOV      A,PAGER        ;
        JB       ACC.5,CW_9     ;IF AT RIGHT THEN EXIT
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;///////////////////////////////////////
        ;JB       ACC.4,CW_61
        ;SETB     ACC.4
        ;MOV       PAGE, A
        ;MOV       COM,#40H
        ;LCALL     PRM0
        ;LJMP      CW_9
;CW_61: SETB      ACC.5          ;此处为19264所用!
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;///////////////////////////////////////
        SETB       ACC.5         ;IF AT LEFT THEN TO RIGHT
        CLR        ACC.4
        MOV        PAGER,A
        MOV        COM,#40H      ;MAKE THE COLUMN = 0
        LCALL      PRR0
CW_9:   DJNZ       COUNT,CW_4    ;CYCLE
        POP        DPH
        POP        DPL
        RET
        NOP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -