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

📄 8乘16点阵字符写入子程序-cnw_pr.asm

📁 红外抄表器.rar
💻 ASM
字号:
;###########8*16点阵字符写入程序-CNW_PR #################
; 程序参数选择:PARA1        PARA1   EQU 3DH  ;液晶模块参数 MGLS12232   用于判断在左半边显示还是在右半边显示
; 占用内部资源:O_XL,O_YL,CODE,COUNT1,A,DPTR
; 入口参数:列地址:O_XL,页地址的D0,D1: O_YL,字符字库偏移量:CODE
; 出口参数: 无
; 内部调用子程序:
;     1. 写指令代码子程序(左屏E1)PR1
;     2. 写显示数据子程序(左屏E1)PR2
;     3. 写指令代码子程序(右屏E2)PR4
;     4. 写显示数据子程序(右屏E2)PR5
; 连接字库:CCTAB
;###########################################################

        CNW_PR: MOV     DPTR,#CNTAB     ;确定数字字符字模块首地址
                MOV     A,CODE          ;取代码
                MOV     B,#10H          ;字模块宽度为16个字节
                MUL     AB              ;代码x16        乘除指令会自动清进位C
                ADD     A,DPL           ;字符字模块首地址
                MOV     DPL,A           ;=字模库首地址+代码x16
                MOV     A,B
                ADDC    A,DPH
                MOV     DPH,A
                PUSH    O_XL		   ;列地址入栈
                PUSH    O_XL		   ;列地址入栈
                MOV     CODE,#00H	;代码寄存器借用为间址寄存器
        CNW_1:  MOV     COUNT1,#08H	;计数器设置为8
                MOV     A,O_YL		;读页地址寄存器
                ANL     A,#03H
                ORL     A,#0B8H		;"或"页地址设置代码
                MOV     COM,A		;写页地址设置指令
                LCALL   PR1
                LCALL   PR4
                POP     O_XL		    ;取列地址值
                MOV     A,O_XL	        ;读列地址寄存器
                CLR     C
                SUBB    A,#PARA1        ;列地址-模块参数
                JC      CNW_2           ;〈0为左半屏显示区域(E1)
                MOV     O_XL,A          ;≥0为右半屏显示区域(E2)
                MOV     A,O_YL
                SETB    ACC.3           ;设置区域标志位.
                MOV     O_YL,A          ;"0"为E1,"1"为E2
        CNW_2:  MOV     COM,O_XL        ;设置列地址值
                MOV     A,O_YL          ;判区域标志以确定设置哪个控制器
                JNB     ACC.3,CNW_3
                LCALL   PR4		;区域E2
                LJMP    CNW_4
        CNW_3:  LCALL   PR1		;区域E1
        CNW_4:  MOV     A,CODE		;取间址寄存器值
                MOVC    A,@A+DPTR	;取汉字字模数据
                JNB     DISMOD,CNW_41
                CPL     A               ;反白显示
        CNW_41: MOV     DAT1,A		;写数据
                MOV     A,O_YL
                JNB     ACC.3,CNW_5
                LCALL   PR5		;区域E2
                LJMP    CNW_6
        CNW_5:  LCALL   PR2		;区域E1
        CNW_6:  INC     CODE		;间址寄存器加1
                INC     O_XL		;列地址寄存器加1
                MOV     A,O_XL	        ;判列地址是否超出区域范围
                CJNE    A,#PARA1,CNW_7
        CNW_7:  JC      CNW_8           ;未超出则继续
                MOV     A,O_YL          ;超出则判是否在区域E2
                JB      ACC.3,CNW_8     ;在区域E2则退出
                SETB    ACC.3           ;在区域E1则修改成区域E2
                MOV     O_YL,A
                MOV     COM,#00H	;设置区域E2列地址为"0"
                LCALL   PR4
        CNW_8:  DJNZ    COUNT1,CNW_4	;当页循环
                MOV     A,O_YL          ;读页地址寄存器
                JB      ACC.7,CNW_9     ;判完成标志D7位, "1"则完成退出
                INC     A		;否则页地址加1
                SETB    ACC.7		;置完成位为"1"
                CLR     ACC.3
                MOV     O_YL,A
                MOV     CODE,#08H	;间址寄存器设置为16
                LJMP    CNW_1		;大循环
        CNW_9:  RET
		
;==============================================================
;数字和符号字库
CNTAB:
;--  文字:  0  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
        DB 000H,0E0H,010H,008H,008H,010H,0E0H,000H
        DB 000H,00FH,010H,020H,020H,010H,00FH,000H

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

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

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

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

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

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

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

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

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

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

;==============================================================

⌨️ 快捷键说明

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