?? ccwprd.asm
字號:
;16*16點(diǎn)陣中文寫入子程序CCW_PR(適應(yīng)MGLS12864)
; 占用內(nèi)部資源:O_XL,O_YL,CODE,COUNT1,A,B,DPTR
; 內(nèi)部調(diào)用子程序:PR1,PR2,PR4,PR5
; 連接字庫: CCTAB
; 程序調(diào)用入口: CCW_PR
; 程序輸入變量: O_XL,O_YL,CODE
;---------------------------------------------------------------------
CCW_PR: MOV DPTR,#CCTAB ; 確定字符字模塊首地址
MOV A,CODE ; 取代碼
MOV B,#20H ; 字模塊寬度為32個(gè)字節(jié)
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 ; 計(jì)數(shù)器設(shè)置為16
MOV A,O_YL ; 讀頁地址寄存器
ANL A,#07H
ORL A,#0B8H ; "或"頁地址設(shè)置代碼
MOV COM,A ; 寫頁地址設(shè)置指令
LCALL PR1
LCALL PR4
POP O_XL ; 取列地址值
MOV A,O_XL ; 讀列地址寄存器
CLR C
SUBB A,#40H ; 列地址-64
JC CCW_2 ; 〈0為左屏顯示區(qū)域
MOV O_XL,A ; ≥0為右屏顯示區(qū)域
MOV A,O_YL
SETB ACC.5 ; 設(shè)置區(qū)域標(biāo)志位.
MOV O_YL,A ; "00"為左,"10"為右
CCW_2: MOV COM,O_XL ; 設(shè)置列地址值
ORL COM,#40H ; "或"列地址指令標(biāo)志位
MOV A,O_YL ; 判區(qū)域標(biāo)志以確定設(shè)置哪個(gè)控制器
ANL A,#30H
CCW_31: CJNE A,#20H,CCW_32 ; "10"為右區(qū)
LCALL PR4
LJMP CCW_4
CCW_32: LCALL PR1 ; "00"為左區(qū)
CCW_4: MOV A,CODE ; 取間址寄存器值
MOVC A,@A+DPTR ; 取漢字字模數(shù)據(jù)
MOV DAT1,A ; 寫數(shù)據(jù)
MOV A,O_YL ; 判區(qū)域標(biāo)志
ANL A,#30H
CCW_41: CJNE A,#20H,CCW_42 ; "10"為右區(qū)
LCALL PR5
LJMP CCW_5
CCW_42: LCALL PR2 ; "00"為左區(qū)
CCW_5: INC CODE ; 間址寄存器加1
INC O_XL ; 列地址寄存器加1
MOV A,O_XL ; 判列地址是否超出區(qū)域范圍
CJNE A,#40H,CCW_6
CCW_6: JC CCW_7 ; 未超出則繼續(xù)
MOV O_XL,#00H
MOV A,O_YL ; 超出則判在何區(qū)域
JB ACC.5,CCW_8 ; 在右區(qū)域則退出
CCW_61: SETB ACC.5 ; 在左區(qū)則轉(zhuǎn)右區(qū)
MOV O_YL,A
MOV COM,#40H ; 設(shè)置右區(qū)列地址為"0"
LCALL PR4
CCW_7: DJNZ COUNT1,CCW_4 ; 當(dāng)頁循環(huán)
CCW_8: MOV A,O_YL ; 讀頁地址寄存器
JB ACC.7,CCW_9 ; 判完成標(biāo)志D7位, "1"則完成退出
INC A ; 否則頁地址加1
SETB ACC.7 ; 置完成位為"1"
ANL A,#0CFH ; 清區(qū)域標(biāo)志
MOV O_YL,A
MOV CODE,#10H ; 間址寄存器設(shè)置為16
LJMP CCW_1 ; 大循環(huán)
CCW_9: RET
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -