?? subprogram.asm
字號:
MOV DPTR,#CCTAB ; 設置漢字字庫指針
MOV A,CODEE ; 取漢字代碼
MOV B,#20H ; 計算字模首地址
MUL AB ;
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
MOV A,O_XL ; 8點占2個字節
RL A ; X*2(change the acc to a)
MOV O_XL,A
MOV A,O_YL ; XY坐標值轉換成顯示RAM 地址值
MOV B,#PARA1 ; 顯示域寬度值
MUL AB ;所使用的正好是多字節乘法的內容
ADD A,O_XL
MOV O_XL,A
MOV A,B
ADDC A,#00H
MOV O_YL,A
MOV A,O_YH
MOV B,#PARA1
MUL AB
ADD A,O_YL
MOV O_YL,A ; 地址存入O_XL,O_YL和O_YH,也就是說顯示的地址占用三個字節,由低到高依次排列,使用的是多字節乘法錯位相加的思路
MOV A,B
ADDC A,#00H ;因為是128K所以必然要使用三個字節因為兩個字節就是64K的地址
MOV O_YH,A
CCW_PR1:MOV A,O_YH
MOV C,ACC.0 ; 取A16值.因為一共是128K所以要判斷A16的值來確定上低64K還是高64K
CLR A
MOV ACC.2,C
MOV COM,A
ORL COM,#08H ; 設置顯示RAM單元地址
LCALL PR1
MOV DAT1,O_XL ;所以第三個字節僅僅就是一個標志位
LCALL PR2
INC COM
LCALL PR1
MOV DAT1,O_YL
LCALL PR2
INC COM ; 設置顯示數據讀寫狀態
LCALL PR1
MOV A,COUNT1
MOVC A,@A+DPTR ; 取左半部字模數
;MOV R7,A ;;;;;;;;;;;;
;MOV R6,#48H ;;;;;;;;;;;;;;;
LCALL _GRAY ; 調灰度生成子程序
MOV A,COUNT1
ORL A,#10H ; 計算右半部字模地址,這個偏移地址的確定與字模數據的存儲的形式有關
MOVC A,@A+DPTR ; 取右半部字模數據
;MOV R7,A ;;;;;;;;;;;;
;MOV R6,#48H ;;;;;;;;;;;;;;;
LCALL _GRAY ; 調灰度生成子程序
MOV A,O_XL ; 修正地址
ADD A,#PARA1 ;相當于光標向下移動一行
MOV O_XL,A
MOV A,O_YL ;雙字節加法的簡單的應用
ADDC A,#00H
MOV O_YL,A
CLR A
ADDC A,O_YH ;防止進入下一個顯示區域
MOV O_YH,A
INC COUNT1 ; 計數器加一
MOV A,COUNT1
CJNE A,#10H,CCW_PR1; 循環
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 漢字寫入子程序(24*24點陣字庫)CC24PR childpam(4)
; 占用內部資源:O_XL,O_YL,O_YH,CODE,COUNT1,A,B,DPTR
; 內部調用子程序:PR1,PR2
; 連接字庫: CCTAB24
; 程序參數: PARA1
; 程序調用入口: CC24PR
; 程序輸入變量: O_XL,O_YL,O_YH,CODE
; 漢字寫入子程序如下:
_CC24PR: MOV O_XL,R7
MOV O_YL,R5
MOV O_YH,R4
MOV CODEE,R3
MOV COUNT1,#00H ; 計數器=0
MOV DPTR,#CCTAB24 ; 設置漢字字庫指針
MOV A,CODEE ; 取漢字代碼
MOV B,#48H ; 計算字模數據首地址
MUL AB
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
MOV A,O_XL ; 8點占2個字節
RL A ; X*2(change the acc to the a)
MOV O_XL,A
MOV A,O_YL ; XY坐標值轉換成顯示RAM 地址值
MOV B,#PARA1 ; 顯示域寬度值
MUL AB
ADD A,O_XL
MOV O_XL,A
MOV A,B
ADDC A,#00H
MOV O_YL,A
MOV A,O_YH
MOV B,#PARA1
MUL AB
ADD A,O_YL
MOV O_YL,A ; 地址存入O_XL,O_YL和O_YH
MOV A,B
ADDC A,#00H
MOV O_YH,A
CC24PR1:MOV A,O_YH
MOV C,ACC.0 ; 取A16值
CLR A
MOV ACC.2,C
MOV COM,A
ORL COM,#08H ; 設置顯示RAM單元地址
LCALL PR1
MOV DAT1,O_XL
LCALL PR2
INC COM
LCALL PR1
MOV DAT1,O_YL
LCALL PR2
INC COM ; 設置顯示數據讀寫狀態,真正的或讀或寫動作由后續的指令來完成
LCALL PR1
MOV A,COUNT1
MOVC A,@A+DPTR ; 取左半部字模數
; MOV R7,A ;;;;;;;;;;;;
; MOV R6,#48H ;;;;;;;;;;;;;;;
LCALL _GRAY ; 調灰度生成子程序
MOV A,COUNT1
ADD A,#18H ; 計算中部字模地址
MOVC A,@A+DPTR ; 取中部字模數據
; MOV R7,A ;;;;;;;;;;;;
; MOV R6,#48H ;;;;;;;;;;;;;;;
LCALL _GRAY ; 調灰度生成子程序
MOV A,COUNT1
ADD A,#30H ; 計算右半部字模地址
MOVC A,@A+DPTR ; 取右半部字模數據
; MOV R7,A ;;;;;;;;;;;;
; MOV R6,#48H ;;;;;;;;;;;;;;;
LCALL _GRAY ; 調灰度生成子程序
MOV A,O_XL ; 修正地址
ADD A,#PARA1 ; 顯示地址向下移動一列
MOV O_XL,A
MOV A,O_YL
ADDC A,#00H
MOV O_YL,A
CLR A
ADDC A,O_YH
MOV O_YH,A
INC COUNT1 ; 計數器加一
MOV A,COUNT1
CJNE A,#18H,CC24PR1; 循環
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 西文字符寫入子程序CW_PR childprogram (3)
; 占用內部資源:O_XL,O_YL,O_YH,CODE,COUNT1,A,B,DPTR
; 內部調用子程序:PR1,PR2,GRAY
; 程序參數: PARA1
; 連接字庫: CHTAB
; 程序調用入口: CW_PR
; 程序輸入變量: O_XL,O_YL,O_YH,CODE
; 西文字符寫入子程序如
_CW_PR: MOV O_XL,R7
MOV O_YL,R5
MOV O_YH,R4
MOV CODEE,R3
MOV COUNT1,#00H ; 計數器=0
MOV DPTR,#CHTAB ; 設置西文字庫指針
MOV A,CODEE ; 取字符代碼
MOV B,#08H ; 計算字符字模的首地址
MUL AB ; 建立字模指針
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
MOV A,O_XL
RL A ; X*2(change the acc to a)
MOV O_XL,A
MOV A,O_YL ; 坐標值轉換地址值計算
MOV B,#PARA1 ; 顯示域寬度
MUL AB
ADD A,O_XL
MOV O_XL,A
MOV A,B
ADDC A,#00H
MOV O_YL,A
MOV A,O_YH
MOV B,#PARA1
MUL AB
ADD A,O_YL
MOV O_YL,A ; 地址存入O_XL,O_YL和O_YH
CLR A
ADDC A,#00H
MOV O_YH,A
CW_PR1: MOV A,O_YH
MOV C,ACC.0 ; 取A16值
CLR A
MOV ACC.2,C
MOV COM,A
ORL COM,#08H ; 設置顯示RAM 單元地址
LCALL PR1
MOV DAT1,O_XL
LCALL PR2
INC COM
LCALL PR1
MOV DAT1,O_YL
LCALL PR2
INC COM ; 設置寫入顯示數據指令
LCALL PR1
MOV A,COUNT1 ; 取間址
MOVC A,@A+DPTR ; 取字模數據
; MOV R7,A ;;;;;;;;;;;;
;MOV R6,#48H ;;;;;;;;;;;;;;;
LCALL _GRAY ; 調灰度生成子程序
MOV A,O_XL ; 修正地址值
ADD A,#PARA1
MOV O_XL,A
MOV A,O_YL
ADDC A,#00H
MOV O_YL,A
MOV A,O_YH
ADDC A,#00H
MOV O_YH,A
INC COUNT1 ; 計數器加一
MOV A,COUNT1
CJNE A,#08H,CW_PR1 ; 循環
RET
;;this place i want to write 16*8 english charactors to display on the screen
;;I WANT IT TO WORKS ,LET us TEST IT!他的這個16*8是靠8*8拉長形成的.
_CW_PRR: MOV O_XL,R7
MOV O_YL,R5
MOV O_YH,R4
MOV CODEE,R3
MOV COUNT1,#00H ; 計數器=0
MOV DPTR,#CHTAB ; 設置西文字庫指針
MOV A,CODEE ; 取字符代碼
MOV B,#08H ; 計算字符字模的首地址
MUL AB ; 建立字模指針
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
MOV A,O_XL
RL A ; X*2(change the acc to a)
MOV O_XL,A
MOV A,O_YL ; 坐標值轉換地址值計算
MOV B,#PARA1 ; 顯示域寬度
MUL AB
ADD A,O_XL
MOV O_XL,A
MOV A,B
ADDC A,#00H
MOV O_YL,A
MOV A,O_YH
MOV B,#PARA1
MUL AB
ADD A,O_YL
MOV O_YL,A ; 地址存入O_XL,O_YL和O_YH
CLR A
ADDC A,#00H
MOV O_YH,A
PP:MOV R0,#00H
CW_PR51: MOV A,O_YH
MOV C,ACC.0 ; 取A16值
CLR A
MOV ACC.2,C
MOV COM,A
ORL COM,#08H ; 設置顯示RAM 單元地址
LCALL PR1
MOV DAT1,O_XL
LCALL PR2
INC COM
LCALL PR1
MOV DAT1,O_YL
LCALL PR2
INC COM ; 設置寫入顯示數據指令
LCALL PR1
MOV A,COUNT1 ; 取間址
MOVC A,@A+DPTR ; 取字模數據
LCALL _GRAY ; 調灰度生成子程?
INC R0
MOV A,O_XL ; 修正地址值
ADD A,#PARA1
MOV O_XL,A
MOV A,O_YL
ADDC A,#00H
MOV O_YL,A
MOV A,O_YH
ADDC A,#00H
MOV O_YH,A
MOV A,R0
MOV B,#02H
DIV AB
MOV A,B
JNZ CW_PR51
INC COUNT1
;IF COUNT/2!=0; LCALL CW_PR51
; ELSE UNDER
MOV A,COUNT1
CJNE A,#08H,CW_PR51 ; 循環
RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;this place i want to wipe the 16*8 english charactors on the screen
_CLCW_PRR: MOV O_XL,R7
MOV O_YL,R5
MOV O_YH,R4
;MOV CODEE,R3
MOV COUNT1,#00H ; 計數器=0
MOV DPTR,#CHTAB ; 設置西文字庫指針
MOV A,CODEE ; 取字符代碼
MOV B,#08H ; 計算字符字模的首地址
MUL AB ; 建立字模指針
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
MOV A,O_XL
RL A ; X*2(change the acc to a)
MOV O_XL,A
MOV A,O_YL ; 坐標值轉換地址值計算
MOV B,#PARA1 ; 顯示域寬度
MUL AB
ADD A,O_XL
MOV O_XL,A
MOV A,B
ADDC A,#00H
MOV O_YL,A
MOV A,O_YH
MOV B,#PARA1
MUL AB
ADD A,O_YL
MOV O_YL,A ; 地址存入O_XL,O_YL和O_YH
CLR A
ADDC A,#00H
MOV O_YH,A
cPP:MOV R0,#00H
C_PR51: MOV A,O_YH
MOV C,ACC.0 ; 取A16值
CLR A
MOV ACC.2,C
MOV COM,A
ORL COM,#08H ; 設置顯示RAM 單元地址
LCALL PR1
MOV DAT1,O_XL
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -