?? subprogram.asm
字號:
LCALL PR2
INC COM
LCALL PR1
MOV DAT1,O_YL
LCALL PR2
INC COM ;設置寫入顯示數據指令
LCALL PR1
MOV A,#00H ;因為有灰度等級所以稍顯麻煩一些.
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 C_PR51
INC COUNT1
;IF COUNT/2!=0; LCALL CW_PR51
; ELSE UNDER
MOV A,COUNT1
CJNE A,#08H,C_PR51 ; 循環
RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 繪點子程序W_DOT childprogram (2) JINBEN 基本的思路都是由行列的抽象地址取得絕對
; 占用內部寄存器:O_XL,O_XH,O_YL,O_YH,A,B 地址
; 內部調用子程序:PR1,PR2,PR3
; 程序調用入口: W_DOT
; 程序參數:PARA1
; 程序輸入變量: O_XL,O_XH,O_YL,O_YH 只有在點列中我們才會使用O_XH
;xh=r6,xl=r7,yl=r4,yh=r5;
_W_DOT: MOV O_XL,R7
MOV O_XH,R6
MOV O_YL,R5
MOV O_YH,R4
MOV A,O_XH ; XY坐標值轉換成地址值
MOV B,#40H ; 256點占字節數(灰度)
MUL AB ; 由于LCD屏幕寬度的限制所以乘積的結果中B的值為零
MOV O_XH,A ; 低8位地址存O_XH
MOV B,#PARA1 ; 顯示域寬度值
MOV A,O_YL ;
MUL AB
ADD A,O_XH
MOV O_XH,A
MOV A,B
ADDC A,#00H
MOV O_YL,A ; 高8位地址存O_YL
MOV A,O_YH
CLR ACC.7
MOV B,#PARA1
MUL AB
ADD A,O_YL ;
MOV O_YL,A
MOV A,B
ADDC A,#00H
MOV O_YH,A ; A16存O_YH,我們當前的應用中只有A16是有數值的
MOV A,O_XL
MOV B,#08H
DIV AB
MOV O_XL,B
MOV B,#02H ; 8位繪點數據占二個字節
MUL AB ; A中的數據就是商即整數個字節數
ADD A,O_XH
MOV O_XH,A ; 地址值暫存DISADDL和DISADDH
MOV A,O_YL
ADDC A,#00H
MOV O_YL,A
MOV A,O_YH
ADDC A,#00H
MOV O_YH,A
MOV B,O_XL ; 計算點位置值
INC B
CLR A
SETB C
W_DOT1: RRC A ; 從這里開始RESEARCH
DJNZ B,W_DOT1 ; C==0
MOV B,A ; 點位置數據暫存B
MOV A,O_YH
MOV C,ACC.0
CLR A
MOV ACC.2,C
ORL A,#08H ; 設置顯示單元地址
MOV COM,A
LCALL PR1
MOV DAT1,O_XH
LCALL PR2
INC COM
LCALL PR1
MOV DAT1,O_YL
LCALL PR2
INC COM ;一個前導的讀寫指令可以后跟無數的讀寫操作.
LCALL PR1
MOV COUNT1,#02H
W_DOT2: LCALL PR3
MOV A,B ; 將點數據位再次取出
MOV COUNT2,#04H
W_DOT3: RLC A ; 取數據位C==0
JC W_DOT5
XCH A,DAT1
RL A
RL A
XCH A,DAT1
W_DOT4: DJNZ COUNT2,W_DOT3
MOV B,A ;再次保存點數據位
LCALL PR2
DJNZ COUNT1,W_DOT2
RET
W_DOT5: XCH A,GRAYB
MOV C,ACC.7 ;取得背景數據值
XCH A,DAT1
RLC A
XCH A,DAT1
MOV C,ACC.6
XCH A,DAT1
RLC A
XCH A,DAT1
XCH A,GRAYB
LJMP W_DOT4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 清顯示RAM 區(清屏)子程序CLEAR childprogram//(1)//
; 占用內部寄存器:COM,DAT1,A,R3,R4
; 內部調用子程序:PR1,PR2,GRAY
; 程序輸入變量:無
; 程序調用入口:CLEAR
;---------------------------------------------
CLEAR: MOV R3,#00H ; 循環量
MOV R4,#0A0H
MOV COM,#00H ; 低位地址設置
LCALL PR1
MOV DAT1,#00H
LCALL PR2
MOV COM,#01H ; 高位地址設置
LCALL PR1
MOV DAT1,#00H
LCALL PR2
MOV COM,#0AH ; 選擇數據通道
LCALL PR1
MOV A,GRAYB
SWAP A
ANL A,#0C0H
MOV DAT1,A
RR A
RR A
ORL A,DAT1
MOV DAT1,A
SWAP A
ORL A,DAT1
MOV DAT1,A ;一個字節全部變成統一的前景
CLR1: LCALL PR2 ; 寫數據“0”
LCALL PR2 ;寫入連續的兩個地址
DJNZ R3,CLR1
DJNZ R4,CLR1
RET
_CL_DOT: MOV O_XL,R7
MOV O_XH,R6
MOV O_YL,R5
MOV O_YH,R4
MOV A,O_XH ; XY坐標值轉換成地址值
MOV B,#40H ; 256點占字節數(灰度)
MUL AB
MOV O_XH,A ; 低8位地址存O_XH
MOV B,#PARA1 ; 顯示域寬度值
MOV A,O_YL ;
MUL AB
ADD A,O_XH
MOV O_XH,A
MOV A,B
ADDC A,#00H
MOV O_YL,A ; 高8位地址存O_YL
MOV A,O_YH
CLR ACC.7
MOV B,#PARA1
MUL AB
ADD A,O_YL ;
MOV O_YL,A
MOV A,B
ADDC A,#00H
MOV O_YH,A ; A16存O_YH
MOV A,O_XL
MOV B,#08H
DIV AB
MOV O_XL,B ;保存余數
MOV B,#02H ; 8位繪點數據占二個字節
MUL AB
ADD A,O_XH
MOV O_XH,A ; 地址值暫存DISADDL和DISADDH
MOV A,O_YL
ADDC A,#00H
MOV O_YL,A
MOV A,O_YH
ADDC A,#00H
MOV O_YH,A
MOV B,O_XL ; 計算點位置值
INC B
CLR A
SETB C
WW_DOT1: RRC A
DJNZ B,WW_DOT1
MOV B,A ; 點位置數據暫存B
MOV A,O_YH
MOV C,ACC.0
CLR A
MOV ACC.2,C
ORL A,#08H ; 設置顯示單元地址
MOV COM,A
LCALL PR1
MOV DAT1,O_XH
LCALL PR2
INC COM
LCALL PR1
MOV DAT1,O_YL
LCALL PR2
INC COM
LCALL PR1
MOV COUNT1,#02H
WW_DOT2:LCALL PR3
MOV A,B
MOV COUNT2,#04H
WW_DOT3: RLC A ; 取數據位
JC WW_DOT5
XCH A,DAT1
RL A
RL A
XCH A,DAT1
WW_DOT4: DJNZ COUNT2,WW_DOT3
MOV B,A
LCALL PR2
DJNZ COUNT1,WW_DOT2
RET
WW_DOT5:XCH A,GRAYB
MOV C,ACC.3 ;取得前景數據而不是簡單的清零
XCH A,DAT1
RLC A
XCH A,DAT1
MOV C,ACC.2
XCH A,DAT1
RLC A
XCH A,DAT1
XCH A,GRAYB
LJMP WW_DOT4
RET
;;THE BLOW IS CHANGED BY 11/9
_ONEBYTE_PR: MOV O_XL,R7
MOV O_XH,R6
MOV O_YL,R5
MOV O_YH,R4
MOV COUNT1,R3
MOV A,O_XL
RL A ; X*2
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_PR21: 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 ; 取字模數據/////ATENTION PLEAS THREE PARAMETES USE R3 THE LOW BYTE R2,THE HIGH BYTE
LCALL _GRAY ; 調灰度生成子程序(IN THE PROGRAM ,CALL TWICE WRITEDATA COMMAND SEEMS LIKE PR1)
RET
_CLCW_PR: MOV O_XL,R7
MOV O_XH,R6
MOV O_YL,R5
MOV O_YH,R4
MOV COUNT1,#00H ; 計數器=0
MOV A,O_XL
RL A ; X*2
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_PR12: 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,#00H
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_PR12 ; 循環
RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -