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

📄 9300.asm

📁 带遥控 带128*64LCD 带电子开关
💻 ASM
📖 第 1 页 / 共 5 页
字号:
                SETB    E1             ; E=1
                NOP
                NOP
                NOP
                NOP
                NOP
                CLR     E1             ; E=0
                RET
               ;////////////////////1.3 读显示数据子程序(左)
        PR3:    CLR     CSB            ; 片选设置为"01"
                SETB    CSA            ;
                CLR     RS             ; RS=0
                SETB    RW             ; R/W=1
        PR31:   MOV     DATBUS,#0FFH   ; DATBUS口置"1"
                NOP
                NOP
                NOP
                NOP
                SETB    E1             ; E=1
                NOP
                NOP
                NOP
                NOP
                NOP
                MOV     A,DATBUS       ; 读状态字
                NOP
                NOP
                NOP
                NOP
                NOP
                CLR     E1             ; E=0
                JB      ACC.7,PR31     ; 判"忙"标志为"0"否, 否再读
                SETB    RS             ; RS=1
                NOP
                NOP
                NOP
                NOP
                NOP
                MOV     DATBUS,#0FFH   ; DATBUS口置"0"
                NOP
                NOP
                NOP
                NOP
                SETB    E1             ; E=1
                MOV     DAT1,DATBUS    ; 读数据
                NOP
                NOP
                NOP
                NOP
                NOP
                CLR     E1             ; E=0
                RET
               
        PR4:    SETB    CSB            ; 片选设置为"10"
                CLR     CSA            ;
                CLR     RS             ; RS=0
                SETB    RW             ; R/W=1
        PR41:   MOV     DATBUS,#0FFH   ; DATBUS口置"1"
                NOP
                NOP
                NOP
                NOP
                NOP
                SETB    E1             ; E=1
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                MOV     A,DATBUS       ; 读状态字
                CLR     E1             ; E=0
                JB      ACC.7,PR41     ; 判"忙"标志为"0"否, 否再读
                CLR     RW             ; R/W=0
                MOV     DATBUS,COM     ; 写指令代码
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                SETB    E1             ; E=1
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                CLR     E1             ; E=0
                RET
                ;写显示数据子程序(右)
        PR5:    SETB    CSB            ; 片选设置为"10"
                CLR     CSA            ;
                CLR     RS             ; RS=0
                SETB    RW             ; R/W=1
        PR51:   MOV     DATBUS,#0FFH   ; DATBUS口置"1"
                NOP
                NOP
                NOP
                NOP
                NOP
                SETB    E1             ; E=1
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                MOV     A,DATBUS       ; 读状态字
                CLR     E1             ; E=0
                JB      ACC.7,PR51     ; 判"忙"标志为"0"否, 否再读
                SETB    RS             ; RS=1
                CLR     RW             ; R/W=0
                MOV     DATBUS,DAT1    ; 写数据
                SETB    E1             ; E=1
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                CLR     E1             ; E=0
                RET
                ;/////////////////; 2.3 读显示数据子程序(右)
        PR6:    SETB    CSB            ; 片选设置为"10"
                CLR     CSA            ;
                CLR     RS             ; RS=0
                SETB    RW             ; R/W=1
        PR61:   MOV     DATBUS,#0FFH   ; DATBUS口置"1"
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                SETB    E1             ; E=1
                NOP
                NOP
                NOP
                NOP
                NOP
                MOV     A,DATBUS       ; 读状态字
                CLR     E1             ; E=0
                JB      ACC.7,PR61     ; 判"忙"标志为"0"否, 否再读
                SETB    RS             ; RS=1
                MOV     DATBUS,#0FFH   ; DATBUS口置"0"
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                SETB    E1             ; E=1
                MOV     DAT1,DATBUS    ; 读数据
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                CLR     E1             ; E=0
                RET
       CCW_PR:  MOV     DPTR,#CCTAB     ; 确定字符字模块首地址
                MOV     A,CODE1          ; 取代码
                MOV     B,#20h  ; 字模块宽度为32个字节
                MUL     AB              ; 代码x32
                ADD     A,DPL           ; 字符字模块首地址
                MOV     DPL,A           ; = 字模库首地址 + 代码x 32
                MOV     A,B
                ADDC    A,DPH
                MOV     DPH,A
                PUSH    O_XL		; 列地址入栈
                PUSH    O_XL		; 列地址入栈
                MOV     CODE1,#00H	; 代码寄存器借用为间址寄存器
        CCW_1:  
	    MOV     COUNT1,CONT0	; 计数器设置为16
                MOV     A,O_YL          ; 读页地址寄存器
                ANL     A,#07H
                ORL     A,#0B8H		; "或"页地址设置代码
                MOV     COM,A		; 写页地址设置指令
                LCALL   PR1
                LCALL   PR4
                POP     O_XL		; 取列地址值
                MOV     A,O_XL	        ; 读列地址寄存器
                CLR     C
                SUBB    A,#40H          ; 列地址-64
                JC      CCW_2           ; 〈0为左屏显示区域
                MOV     O_XL,A          ; ≥0为右屏显示区域
                MOV     A,O_YL
                SETB    ACC.5           ; 设置区域标志位.
                MOV     O_YL,A          ; "00"为左,"10"为右
        CCW_2:  MOV     COM,O_XL        ; 设置列地址值
                ORL     COM,#40H        ; "或"列地址指令标志位
                MOV     A,O_YL          ; 判区域标志以确定设置哪个控制器
                ANL     A,#30H
        CCW_31: CJNE    A,#20H,CCW_32   ; "10"为右区
                LCALL   PR4
                LJMP    CCW_4
        CCW_32: LCALL   PR1             ; "00"为左区
        CCW_4:  MOV     A,CODE1		; 取间址寄存器值
                MOVC    A,@A+DPTR	; 取汉字字模数据
                MOV     DAT1,A		; 写数据
                MOV     A,O_YL          ; 判区域标志
                ANL     A,#30H
        CCW_41: CJNE    A,#20H,CCW_42   ; "10"为右区
                LCALL   PR5
                LJMP    CCW_5
        CCW_42: LCALL   PR2             ; "00"为左区
        CCW_5:  INC     CODE1            ; 间址寄存器加1
                INC     O_XL		; 列地址寄存器加1
                MOV     A,O_XL	        ; 判列地址是否超出区域范围
                CJNE    A,#40H,CCW_6
        CCW_6:  JC      CCW_7           ; 未超出则继续
                MOV     O_XL,#00H
                MOV     A,O_YL          ; 超出则判在何区域
                JB      ACC.5,CCW_8     ; 在右区域则退出
        CCW_61: SETB    ACC.5           ; 在左区则转右区
                MOV     O_YL,A
                MOV     COM,#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
                MOV     CODE1,#10H	; 间址寄存器设置为16
                LJMP    CCW_1		; 大循环
        CCW_9:  RET
;============= 西文显示演示程序段 ====================
     DISTEXT:   MOV     O_YL,#1H       ; 8x8点阵字体, 第6页
                MOV     O_XL,#00H       ; 起始列为第48列
                MOV     CODE1,#01H       ; 字符代码
                LCALL   CW_PR
                MOV     O_YL,#2H
                MOV     O_XL,#00H
                MOV     CODE1,#02H
                LCALL   CW_PR
                MOV     O_YL,#0H
                MOV     O_XL,#00H
                MOV     CODE1,#03H
                LCALL   CW_PR
                MOV     O_YL,#3H
                MOV     O_XL,#0H
                MOV     CODE1,#1AH
                LCALL   CW_PR
                MOV     R7,#00H
                MOV     R6,#40H
         LOOP:  MOV     A,R7
                MOV     DPTR,#TAB1
                MOVC    A,@A+DPTR
                MOV     CODE1,A
                MOV     O_YL,#05H       ; 6X8点阵字体, 第4页
                MOV     O_XL,R6
                LCALL   CW_PR
                INC     R7
                MOV     A,#06H
                ADD     A,R6
                MOV     R6,A
                CJNE    R7,#08H,LOOP
                ret
        TAB1:   DB 21h,22h,23h,24h,25h,26h,27h,28h

        CW_PR:  MOV     DPTR,#CHTAB	; 确定字符字模块首地址
                MOV     A,CODE1		; 取代码
                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     CODE1,#00H       ; 借用为间址寄存器
                MOV     A,O_YL          ; 读页地址寄存器
                JB      ACC.7,CW_1	; 判字符体
                MOV     COUNT1,#08H	; 6x8点阵
                JMP    CW_2
        CW_1:   MOV     COUNT1,#08H	; 8x8点阵
        CW_2:   ANL     A,#07H          ; 取页地址值
                ORL     A,#0B8H		; "或"页地址指令代码
                MOV     COM,A		; 写页地址指针
                LCALL   PR1
                LCALL   PR4
                MOV     A,O_XL	        ; 读列地址寄存器
                CLR     C
                SUBB    A,#40H          ; 列地址-64
                JC      CW_3            ; 〈0为左屏显示区域
                MOV     O_XL,A          ; ≥0为右屏显示区域
                MOV     A,O_YL
                SETB    ACC.5           ; 设置区域标志位.
                MOV     O_YL,A          ; "00"为左,"10"为右
        CW_3:   MOV     COM,O_XL        ; 设置列地址值
                ORL     COM,#40H        ; "或"列地址指令标志位
                MOV     A,O_YL          ; 判区域标志以确定设置哪个控制器
                ANL     A,#30H
        CW_31:  CJNE    A,#20H,CW_32    ; "10"为右区
                LCALL   PR4
                LJMP    CW_4
        CW_32:  LCALL   PR1             ; "00"为左区
        CW_4:   MOV     A,CODE1          ; 取间址寄存器值
                MOVC    A,@A+DPTR	; 取字符字模数据
                MOV     DAT1,A		; 写数据
                MOV     A,O_YL          ; 判区域标志
                ANL     A,#30H
        CW_41:  CJNE    A,#20H,CW_42    ; "10"为右区
                LCALL   PR5
                LJMP    CW_5
        CW_42:  LCALL   PR2             ; "00"为左区
        CW_5:   INC     CODE1            ; 间址加1
                INC     O_XL		; 列地址加1
                MOV     A,O_XL	        ; 判列地址是否超出区域范围
                CJNE    A,#40H,CW_6
        CW_6:   JC      CW_9            ; 未超出则继续
                MOV     O_XL,#00H       ;
                MOV     A,O_YL          ; 超出则判在何区域
                JB      ACC.5,CW_91     ; 在右区域则退出
        CW_61:  SETB    ACC.5           ; 在左区则转右区
                MOV     O_YL,A
                MOV     COM,#40H        ; 设置右区列地址为"0"
                LCALL   PR4
        CW_9:   DJNZ    COUNT1,CW_4     ; 循环
        CW_91:  RET

      DISCHA:   MOV     O_YL,#00H       ; 第3页
                MOV     O_XL,#00H       ;
                MOV     CODE1,#0H       ; 汉字代码
                MOV     CONT0,#0BH 
                LCALL   CCW_PR           ;1

                MOV     O_YL,#00H       ; 第3页
                MOV     O_XL,#09H       ;
                MOV     CODE1,#1H       ; 汉字代码
                MOV     CONT0,#0BH
                LCALL   CCW_PR           ;:

                MOV     O_YL,#00H       ; 第3页
                MOV     O_XL,#0EH       ;
                MOV     CODE1,#2H       ; 汉字代码
                MOV     CONT0,#0FH
                LCALL   CCW_PR           ;:

                MOV     O_YL,#00H       ; 第3页
                MOV     O_XL,#1BH       ;
                MOV     CODE1,#3H       ; 汉字代码
                MOV     CONT0,#0BH
                LCALL   CCW_PR


                MOV     O_YL,#00H       ; 第3页
                MOV     O_XL,#2aH       ;
                MOV     CODE1,#1H       ; 汉字代码
                MOV     CONT0,#0bH
                LCALL   CCW_PR

                MOV     O_YL,#00H       ; 第3页
                MOV     O_XL,#2fH       ;
                MOV     CODE1,#2H       ; 汉字代码
                MOV     CONT0,#0FH
                LCALL   CCW_PR

;//////////////////////////////
                MOV     O_YL,#00H       ; 第3页
                MOV     O_XL,#3fH       ;
                MOV     CODE1,#0H       ; 汉字代码
                MOV     CONT0,#0BH 
                LCALL   CCW_PR

                MOV     O_YL,#00H       ; 第3页
                MOV     O_XL,#49H       ;
                MOV     CODE1,#1H       ; 汉字代码
                MOV     CONT0,#0BH
                LCALL   CCW_PR

                MOV     O_YL,#00H       ; 第3页
                MOV     O_XL,#4dH       ;
                MOV     CODE1,#2H       ; 汉字代码
                MOV     CONT0,#0FH
                LCALL   CCW_PR

                MOV     O_YL,#00H       ; 第3页
                MOV     O_XL,#5eH       ;
                MOV     CODE1,#3H       ; 汉字代码
                MOV     CONT0,#0BH
                LCALL   CCW_PR


                MOV     O_YL,#00H       ; 第3页
                MOV     O_XL,#6aH       ;
                MOV     CODE1,#1H       ; 汉字代码
                MOV     CONT0,#0bH
                LCALL   CCW_PR

                MOV     O_YL,#00H       ; 第3页
                MOV     O_XL,#6fH       ;
                MOV     CODE1,#2H       ; 汉字代码
                MOV     CONT0,#0FH
                LCALL   CCW_PR
                ;OK
               
                MOV     O_YL,#02H       ; 第3页
                MOV     O_XL,#4BH       ;
                MOV     CODE1,#4H       ; 汉字代码

⌨️ 快捷键说明

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