?? cwprt.asm
字號:
; 西文字符寫入子程序CW_PR(適應MGLS19264)
; 占用內部資源:O_XL,O_YL,CODE,COUNT1,A,B,DPTR
; 內部調用子程序:PR1,PR2,PR4,PR5,PR7,PR8
; 連接字庫: CHTAB
; 程序調用入口: CW_PR
; 程序輸入變量: O_XL,O_YL,CODE
CW_PR: MOV DPTR,#CHTAB ; 確定字符字模塊首地址
MOV A,CODE ; 取代碼
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 CODE,#00H ; 借用為間址寄存器
MOV A,O_YL ; 讀頁地址寄存器
JB ACC.7,CW_1 ; 判字符體
MOV COUNT1,#06H ; 6x8點陣
LJMP CW_2
CW_1: MOV COUNT1,#08H ; 8x8點陣
CW_2: ANL A,#07H ; 取頁地址值
ORL A,#0B8H ; "或"頁地址指令代碼
MOV COM,A ; 寫頁地址指針
LCALL PR1
LCALL PR4
LCALL PR7
MOV A,O_XL ; 讀列地址寄存器
CLR C
SUBB A,#40H ; 列地址-64
JC CW_3 ; 〈0為左屏顯示區域
MOV O_XL,A ;
SUBB A,#40H ; 列地址-64
JC CW_21 ; <0為中屏顯示區域
MOV O_XL,A ; ≥0為右屏顯示區域
MOV A,O_YL
SETB ACC.5 ; 設置區域標志位.
MOV O_YL,A ; "00"為左,"01"為中,"10"為右
LJMP CW_3
CW_21: MOV A,O_YL
SETB ACC.4 ;設置區域標志位
MOV O_YL,A
CW_3: MOV COM,O_XL ; 設置列地址值
ORL COM,#40H ; "或"列地址指令標志位
MOV A,O_YL ; 判區域標志以確定設置哪個控制器
ANL A,#30H
CJNE A,#10H,CW_31 ; "01"為中區
LCALL PR4 ;
LJMP CW_4
CW_31: CJNE A,#20H,CW_32 ; "10"為右區
LCALL PR7
LJMP CW_4
CW_32: LCALL PR1 ; "00"為左區
CW_4: MOV A,CODE ; 取間址寄存器值
MOVC A,@A+DPTR ; 取字符字模數據
MOV DAT1,A ; 寫數據
MOV A,O_YL ; 判區域標志
ANL A,#30H
CJNE A,#10H,CW_41 ; "01"為中區
LCALL PR5 ;
LJMP CW_5
CW_41: CJNE A,#20H,CW_42 ; "10"為右區
LCALL PR8
LJMP CW_5
CW_42: LCALL PR2 ; "00"為左區
CW_5: INC CODE ; 間址加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 ; 在右區域則退出
JB ACC.4,CW_61 ; 判在左或中區
SETB ACC.4 ; 在左區則轉中區
MOV O_YL,A
MOV COM,#40H ; 設置中區列地址為"0"
LCALL PR4
LJMP CW_9
CW_61: SETB ACC.5 ; 在中區則轉右區
CLR ACC.4
MOV O_YL,A
MOV COM,#40H ; 設置右區列地址為"0"
LCALL PR7
CW_9: DJNZ COUNT1,CW_4 ; 循環
CW_91: RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -