?? subprogram.asm
字號:
;SUBPROGRAM FOR LCD DISPLAY
;ASM FILE FOR LCD DISPLAY
;;;;.asm
; 直接訪問方式地址定義,根據用戶平臺接口修改
;;WE MUST SHUOMING THAT THE CHINESECU AND THE CHARACTO CU MUST BUILD IN ASM FILES
;;必須說明中文字庫埠?/和西文字庫都要在匯編和文件中建立
CWADD1 EQU 0D000H ; 寫指令代碼地址
DWADD1 EQU 0D001H ; 寫參數及顯示數據地址
DRADD1 EQU 0D001H ; 讀參數及顯示數據地址
; 間接控制方式信號定義,根據用戶平臺接口修改
;//RS EQU P3.0 ; RS
;//RD EQU P3.1 ; /RD
;//WR EQU P3.2 ; /WR
;//DATBUS EQU P1 ; 數據總線
; 程序參數定義,根據用戶選擇的LCM型號修改
PARA1 EQU 0A0H ; 顯示區域寬度
; 程序變量定義,根據用戶平臺提供的內部資源修改
COM EQU 50H ; 指令寄存器
DAT1 EQU 51H ; 參數及顯示數據寄存器
COUNT1 EQU 52H ; 計數器1
COUNT2 EQU 53H ; 計數器2
O_XL EQU 54H ; X坐標低8位寄存器(字節)
; X坐標低8位寄存器(點列)
O_XH EQU 55H ; X坐標高8位寄存器(點列)
; D7位為繪點(D7=1)和消點(D7=0)標志位
O_YL EQU 56H ; Y坐標寄存器低8位(點行)
O_YH EQU 57H ; Y坐標寄存器高8位(點行)
CODEE EQU 58H ; 字符代碼
GRAYB EQU 59H
; 00H-暗;01H-淡;
; 10H-深;11H-亮
GRAYH EQU 5AH ; 灰度數據寄存器高字節
GRAYL EQU 5BH ; 灰度數據寄存器低?
PUBLIC GRAYB
PUBLIC CLEAR,_ONEBYTE_PR,_CLCW_PR,_CL_DOT
PUBLIC _W_DOT,_CCW_PR,_CC24PR,_CW_PR,_CW_PRR,_CLCW_PRR
mypro segment code
rseg mypro ; 允許編譯器重新定位
;=====漢字(16x16點陣)庫===============================
; 根據北京清華蓬遠科貿公司提供的軟件PICKHZ.EXE建立字庫
CCTAB: DB 000H,040H,037H,010H,083H,060H,02FH,008H;清
DB 013H,022H,0E3H,022H,023H,022H,022H,022H
DB 040H,048H,0FCH,040H,0F8H,040H,0FEH,008H
DB 0FCH,008H,0F8H,008H,0F8H,008H,028H,010H
DB 004H,004H,008H,008H,018H,029H,04AH,008H;華
DB 009H,001H,0FFH,001H,001H,001H,001H,001H
DB 040H,048H,058H,060H,0C0H,040H,044H,044H
DB 03CH,000H,0FEH,000H,000H,000H,000H,000H
; 漢字(24x24點陣)寫入子程序
;=====漢字(24x24點陣)庫===============================
; 根據北京清華蓬遠科貿公司提供的軟件PICKHZ.EXE建立字庫
CCTAB24:DB 000H,000H,000H,07FH,000H,020H,018H,00CH;蓬
DB 00CH,008H,001H,00CH,07EH,00CH,00CH,00CH
DB 00CH,00DH,00CH,00CH,032H,061H,020H,000H
DB 082H,0E3H,0C3H,0FFH,0D3H,09AH,03FH,030H
DB 049H,087H,019H,064H,086H,07FH,006H,07FH
DB 006H,0FFH,006H,006H,004H,0FFH,0FFH,000H
DB 000H,080H,00CH,0FEH,000H,040H,0E0H,0C0H
DB 080H,000H,0FEH,078H,000H,0F0H,000H,0E0H
DB 000H,0F8H,000H,000H,000H,0FEH,0F8H,000H
DB 000H,018H,00CH,006H,006H,004H,000H,000H;遠
DB 006H,07FH,006H,006H,006H,006H,006H,006H
DB 006H,006H,006H,006H,009H,030H,010H,000H
DB 000H,000H,03FH,000H,000H,000H,000H,0FFH
DB 019H,019H,019H,019H,019H,019H,019H,011H
DB 031H,021H,060H,0C0H,000H,0FFH,07FH,000H
DB 000H,060H,0F0H,000H,000H,000H,018H,0FCH
DB 080H,080H,080H,080H,080H,088H,088H,088H
DB 08CH,0FCH,0F8H,000H,000H,0FFH,0FCH,000H
; 漢字(24x24點陣)演示程序 callby
;DISCH24:MOV GRAYB,#4CH ;灰度值設置: 正向顯示
; MOV O_XL,#0CH
; MOV O_YL,#20H
; MOV O_YH,#00H
; MOV CODEE,#00H
; LCALL _CC24PR
;;; MOV GRAYB,#0C4H ;灰度值設置: 負向顯示
; MOV O_XL,#15H
; MOV O_YL,#38H
; MOV O_YH,#01H
; MOV CODEE,#01H
; LCALL _CC24PR
; SJMP $
; 繪圖演示程序段 callby
;DRAW: MOV GRAYB,#0C0H ;有灰度的顯示將把所有顯示都分成相應的灰度等級
; MOV R2,#00H
; MOV R3,#00H
; MOV R4,#00H
; MOV R5,#00H
; LOOP1: MOV O_XL,R2
; MOV O_XH,R3
; MOV O_YL,R4
; MOV O_YH,R5
; LCALL _W_DOT
; MOV A,R2
; MOV R2,A
; MOV A,R3
; ADDC A,#00H
; MOV R3,A
; MOV A,R4
; ADD A,#01H
; MOV R4,A
; MOV A,R5
; ADDC A,#00H
; MOV R5,A
; CJNE A,#01H,LOOP1
; SJMP $
;----------------------------------callby----------------
;WIPE: MOV GRAYB,#00H
; MOV R2,#00H
; MOV R3,#80H
; MOV R4,#00H
; MOV R5,#00H
; LOOP2: MOV O_XL,R2
; MOV O_XH,R3
; MOV O_YL,R4
; MOV O_YH,R5
; LCALL _W_DOT
; MOV A,R2
; ADD A,#01H
; MOV R2,A
; MOV A,R3
; ADDC A,#00H
; MOV R3,A
; MOV A,R4
; ADD A,#01H
; MOV R4,A
; MOV A,R5
; ADDC A,#00H
; MOV R5,A
; CJNE A,#01H,LOOP2
; SJMP $
;;;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; 直接訪問方式的驅動子程序
; 程序口地址設置CWADD1,DWADD1,DRADD1
; 占用內部資源DAT1,A,COM
; 程序輸入變量: DAT1,,COM
;===============直接訪問方式驅動子程序==================
; 寫指令子程序 ////childprogram(7)
PR1: PUSH DPL
PUSH DPH
MOV DPTR,#CWADD1
MOV A,COM
MOVX @DPTR,A
POP DPH
POP DPL
RET
; 寫數據子程序 childprogram(8)
PR2: PUSH DPL
PUSH DPH
MOV DPTR,#DWADD1
MOV A,DAT1
MOVX @DPTR,A
POP DPH
POP DPL
RET
; 讀數據子程序 childprogram(9)
PR3: PUSH DPL
PUSH DPH
MOV DPTR,#DRADD1
MOVX A,@DPTR
MOV DAT1,A
POP DPH
POP DPL
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;======西文字符庫==============================================
CHTAB: DB 000H,000H,000H,000H,000H,000H,000H,000H ;" "代碼"0"
DB 004H,004H,004H,004H,000H,000H,004H,000H ; ! 代碼"1"
DB 00AH,00AH,00AH,00AH,000H,000H,000H,000H ; " 代碼"2"
DB 00AH,00AH,01FH,00AH,01FH,00AH,00AH,000H ; # 代碼"3"
DB 004H,00FH,014H,00EH,005H,01EH,004H,000H ; $ 代碼"4"
DB 018H,019H,002H,004H,008H,013H,003H,000H ; % 代碼"5"
DB 00CH,012H,014H,008H,015H,012H,00DH,000H ; & 代碼"6"
DB 00CH,004H,008H,000H,000H,000H,000H,000H ; ' 代碼"7"
DB 002H,004H,008H,008H,008H,004H,002H,000H ; ( 代碼"8"
DB 008H,004H,002H,002H,002H,004H,008H,000H ; ) 代碼"9"
DB 000H,004H,015H,00EH,015H,004H,000H,000H ; * 代碼"A"
DB 000H,004H,004H,01FH,004H,004H,000H,000H ; + 代碼"B"
DB 000H,000H,000H,000H,00CH,004H,008H,000H ; , 代碼"C"
DB 000H,000H,000H,01FH,000H,000H,000H,000H ; - 代碼"D"
DB 000H,000H,000H,000H,000H,00CH,00CH,000H ; . 代碼"E"
DB 000H,001H,002H,004H,008H,010H,000H,000H ; / 代碼"F"
DB 00EH,011H,013H,015H,019H,011H,00EH,000H ; 0 代碼"10"
DB 004H,00CH,004H,004H,004H,004H,00EH,000H ; 1 代碼"11"
DB 00EH,011H,001H,002H,004H,008H,01FH,000H ; 2 代碼"12"
DB 01FH,002H,004H,002H,001H,011H,00EH,000H ; 3 代碼"13"
DB 002H,006H,00AH,012H,01FH,002H,002H,000H ; 4 代碼"14"
DB 01FH,010H,01EH,001H,001H,011H,00EH,000H ; 5 代碼"15"
DB 006H,008H,010H,01EH,011H,011H,00EH,000H ; 6 代碼"16"
DB 01FH,001H,002H,004H,004H,004H,004H,000H ; 7 代碼"17"
DB 00EH,011H,011H,00EH,011H,011H,00EH,000H ; 8 代碼"18"
DB 00EH,011H,011H,00EH,001H,002H,00CH,000H ; 9 代碼"19"
DB 000H,00CH,00CH,000H,00CH,00CH,000H,000H ; : 代碼"1A"
DB 000H,00CH,00CH,000H,00CH,004H,008H,000H ; ; 代碼"1B"
DB 002H,004H,008H,010H,008H,004H,002H,000H ; < 代碼"1C"
DB 000H,000H,01FH,000H,01FH,000H,000H,000H ; = 代碼"1D"
DB 008H,004H,002H,001H,002H,004H,008H,000H ; > 代碼"1E"
DB 00EH,011H,001H,002H,004H,000H,004H,000H ; ? 代碼"1F"
DB 00EH,011H,001H,00DH,015H,015H,00EH,000H ; @ 代碼"20"
DB 00EH,011H,011H,011H,01FH,011H,011H,000H ; A 代碼"21"
DB 01EH,009H,009H,00EH,009H,009H,01EH,000H ; B 代碼"22"
DB 00EH,011H,010H,010H,010H,011H,00EH,000H ; C 代碼"23"
DB 01EH,009H,009H,009H,009H,009H,01EH,000H ; D 代碼"24"
DB 01FH,010H,010H,01FH,010H,010H,01FH,000H ; E 代碼"25"
DB 01FH,010H,010H,01EH,010H,010H,010H,000H ; F 代碼"26"
DB 00EH,011H,010H,013H,011H,011H,00FH,000H ; G 代碼"27"
DB 011H,011H,011H,01FH,011H,011H,011H,000H ; H 代碼"28"
DB 00EH,004H,004H,004H,004H,004H,00EH,000H ; I 代碼"29"
DB 007H,002H,002H,002H,002H,012H,00CH,000H ; J 代碼"2A"
DB 011H,012H,014H,018H,014H,012H,011H,000H ; K 代碼"2B"
DB 010H,010H,010H,010H,010H,010H,01FH,000H ; L 代碼"2C"
DB 011H,01BH,015H,011H,011H,011H,011H,000H ; M 代碼"2D"
DB 011H,019H,019H,015H,013H,013H,011H,000H ; N 代碼"2E"
DB 00EH,011H,011H,011H,011H,011H,00EH,000H ; O 代碼"2F"
DB 01EH,011H,011H,01EH,010H,010H,010H,000H ; P 代碼"30"
DB 00EH,011H,011H,011H,015H,012H,00BH,000H ; Q 代碼"31"
DB 01EH,011H,011H,01EH,014H,012H,011H,000H ; R 代碼"32"
DB 00EH,011H,010H,00EH,001H,011H,00EH,000H ; S 代碼"33"
DB 01FH,004H,004H,004H,004H,004H,004H,000H ; T 代碼"34"
DB 011H,011H,011H,011H,011H,011H,00EH,000H ; U 代碼"35"
DB 011H,011H,011H,011H,011H,00AH,004H,000H ; V 代碼"36"
DB 011H,011H,011H,015H,015H,01BH,011H,000H ; W 代碼"37"
DB 011H,011H,00AH,004H,00AH,011H,011H,000H ; X 代碼"38"
DB 011H,011H,011H,00AH,004H,004H,004H,000H ; Y 代碼"39"
DB 01FH,001H,002H,004H,008H,010H,01FH,000H ; Z 代碼"3A"
DB 00EH,008H,008H,008H,008H,008H,00EH,000H ; [ 代碼"3B"
DB 000H,010H,008H,004H,002H,001H,000H,000H ; \ 代碼"3C"
DB 00EH,002H,002H,002H,002H,002H,00EH,000H ; ] 代碼"3D"
DB 004H,00AH,011H,000H,000H,000H,000H,000H ; ^ 代碼"3E"
DB 000H,000H,000H,000H,000H,000H,01FH,000H ; _ 代碼"3F"
DB 010H,008H,004H,000H,000H,000H,000H,000H ; ` 代碼"40"
DB 000H,000H,00EH,001H,00FH,011H,00FH,000H ; a 代碼"41"
DB 010H,010H,016H,019H,011H,011H,01EH,000H ; b 代碼"42"
DB 000H,000H,00EH,011H,010H,011H,00EH,000H ; c 代碼"43"
DB 001H,001H,00DH,013H,011H,011H,00FH,000H ; d 代碼"44"
DB 000H,000H,00EH,011H,01FH,010H,00EH,000H ; e 代碼"45"
DB 002H,005H,004H,00EH,004H,004H,004H,000H ; f 代碼"46"
DB 000H,00DH,013H,013H,00DH,001H,00EH,000H ; g 代碼"47"
DB 010H,010H,016H,019H,011H,011H,011H,000H ; h 代碼"48"
DB 004H,000H,00CH,004H,004H,004H,00EH,000H ; i 代碼"49"
DB 002H,000H,006H,002H,002H,012H,00CH,000H ; j 代碼"4A"
DB 008H,008H,009H,00AH,00CH,00AH,009H,000H ; k 代碼"4B"
DB 00CH,004H,004H,004H,004H,004H,00EH,000H ; l 代碼"4C"
DB 000H,000H,01AH,015H,015H,015H,015H,000H ; m 代碼"4D"
DB 000H,000H,016H,019H,011H,011H,011H,000H ; n 代碼"4E"
DB 000H,000H,00EH,011H,011H,011H,00EH,000H ; o 代碼"4F"
DB 000H,016H,019H,019H,016H,010H,010H,000H ; p 代碼"50"
DB 000H,00DH,013H,013H,00DH,001H,001H,000H ; q 代碼"51"
DB 000H,000H,016H,019H,010H,010H,010H,000H ; r 代碼"52"
DB 000H,000H,00FH,010H,01EH,001H,01FH,000H ; s 代碼"53"
DB 008H,008H,01CH,008H,008H,009H,006H,000H ; t 代碼"54"
DB 000H,000H,012H,012H,012H,012H,00DH,000H ; u 代碼"55"
DB 000H,000H,011H,011H,011H,00AH,004H,000H ; v 代碼"56"
DB 000H,000H,011H,011H,015H,015H,00AH,000H ; w 代碼"57"
DB 000H,000H,011H,00AH,004H,00AH,011H,000H ; x 代碼"58"
DB 000H,000H,011H,011H,013H,00DH,001H,00EH ; y 代碼"59"
DB 000H,000H,01FH,002H,004H,008H,01FH,000H ; z 代碼"5A"
DB 002H,004H,004H,008H,004H,004H,002H,000H ; { 代碼"5B"
DB 002H,002H,002H,000H,002H,002H,002H,000H ; | 代碼"5C"
DB 008H,004H,004H,002H,004H,004H,008H,000H ; } 代碼"5D"
DB 008H,015H,002H,000H,000H,000H,000H,000H ; ~ 代碼"5E"
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH ;" "代碼"5F"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 灰度生成子程序(字節)GRAYt m childprogram//(6)//
; 占用內部資源:GRAYB,GRAYH,GRAYL,COUNT2,A
; 內部調用子程序:PR2
; 程序調用入口: GRAY
; 程序輸入變量:GRAYB
; 灰度生成子程序(字節)如下:
_GRAY: ; MOV GRAYB,R7 ;用兩個字節來描述一個字節的內容這一個字節的數據,1代表前景數據,0代表背景數據,但是
;MOV A,R6 ;前景數據是分等級的我們一定要注意這一點,這里似乎又是堆棧內存空間的不足造成了這樣
;MOV GRAYB,#0CH ;的無法預知的錯誤
MOV GRAYH,#00H ; 灰度寄存器清零
MOV GRAYL,#00H
MOV COUNT2,#08H
GRAY1: RLC A ; 取數據位
PUSH ACC ; 存數據
MOV A,GRAYB ; 取灰度寄存器,首先得到前景和后景的灰度的等級.
JC GRAY3 ; 判數據位是否為"0" ,這一個跳轉上選擇顯示前景還是顯示后景
MOV C,ACC.3 ; 為"1" 取前景灰度數據
XCH A,GRAYL ; 生成灰度數據,前景和背景形成反差和0,1形成反差是一樣的道理
RLC A
XCH A,GRAYL ;GRAYH<-GRAY_L 也就是說兩個變量全部加入移位的過程,C位的隱含的使用
XCH A,GRAYH
RLC A
XCH A,GRAYH
MOV C,ACC.2 ; 取前景灰度數據
XCH A,GRAYL
RLC A
XCH A,GRAYL
XCH A,GRAYH
RLC A
XCH A,GRAYH
GRAY2: POP ACC ; 取數據
DJNZ COUNT2,GRAY1 ; 計數器計數
MOV DAT1,GRAYH ; 數據寫入顯示RAM
LCALL PR2
MOV DAT1,GRAYL ; 已經設好地址而后才寫入數據.
LCALL PR2
RET
GRAY3: MOV C,ACC.7 ; 為"0"取背景灰度數據
XCH A,GRAYL ; 生成灰度數據
RLC A
XCH A,GRAYL
XCH A,GRAYH
RLC A
XCH A,GRAYH
MOV C,ACC.6 ; 取背景灰度數據
XCH A,GRAYL
RLC A
XCH A,GRAYL
XCH A,GRAYH
RLC A
XCH A,GRAYH
LJMP GRAY2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 漢字寫入子程序(16*16點陣字庫)CCW_PR childprogra (5)m
; 占用內部資源:O_XL,O_YL,O_YH,CODE,COUNT1,A,B,DPTR
; 內部調用子程序:PR1,PR2,GRAY
; 連接字庫: CCTAB
; 程序參數: PARA1
; 程序調用入口: CCW_PR
; 程序輸入變量: O_XL,O_YL,O_YH,CODE ,之所以O_XL只用一個字節是因為橫向是以字節為單位的640*480橫向也就是60個字節
; 漢字寫入子程序如下: 基本的過程就是首先計算地址而后取字模的數據
_CCW_PR: MOV A,R7 ;注意參數的傳遞的順序奇數是低字節,而偶數是高字節
MOV O_XL,A
MOV A,R5
MOV O_YL,A
MOV A,R4
MOV O_YH,A
MOV A,R3
MOV CODEE,A
MOV COUNT1,#00H ; 計數器=0
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -