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

📄 ccwprd.asm

📁 基于61202控制芯片的LCD液晶显示驱动程序。
💻 ASM
字号:
;16*16点阵中文写入子程序CCW_PR(适应MGLS12864)
;  占用内部资源:O_XL,O_YL,CODE,COUNT1,A,B,DPTR
;  内部调用子程序:PR1,PR2,PR4,PR5
;  连接字库:      CCTAB 
;  程序调用入口:  CCW_PR
;  程序输入变量:  O_XL,O_YL,CODE
;---------------------------------------------------------------------
        CCW_PR: MOV     DPTR,#CCTAB     ; 确定字符字模块首地址    
                MOV     A,CODE          ; 取代码                  
                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     CODE,#00H	; 代码寄存器借用为间址寄存器
        CCW_1:  MOV     COUNT1,#10H	; 计数器设置为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,CODE		; 取间址寄存器值
                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     CODE            ; 间址寄存器加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     CODE,#10H	; 间址寄存器设置为16
                LJMP    CCW_1		; 大循环
        CCW_9:  RET

⌨️ 快捷键说明

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