(3) 常用圖形(如產(chǎn)品商標(biāo)等)的點(diǎn)陣圖形的建立。對(duì)已有的圖形可采用掃描儀進(jìn)行掃描,然后用圖形處理軟件進(jìn)行處理,再將BMP 格式文件轉(zhuǎn)換成MCS-51 的匯編文件的格式。
以上所有的字模數(shù)據(jù)都存放在單片機(jī)W78E58 的程序存儲(chǔ)器中,如用到的漢字、圖形較多,可選用較大容量的程序存儲(chǔ)器。
通用子程序:通用子程序分左半屏、右半屏寫指令代碼子程序和寫顯示數(shù)據(jù)子程序。液晶顯示驅(qū)動(dòng)器HD16202 內(nèi)部有個(gè)忙標(biāo)志寄存器,當(dāng)BF=1 時(shí),表示內(nèi)部操作正在運(yùn)行,不能接受外部數(shù)據(jù)或指令。下面子程序中設(shè)指令代碼寄存器為COMM,數(shù)據(jù)寄存器為DATA。
(COMM EQU 20H /*指令寄存器*/ DATA EQU 21H /*數(shù)據(jù)寄存器*/)
?。?) 左半屏寫指令子程序
WR_CMD1: MOV DPTR,#CRADR1 ;/*讀狀態(tài)字口地址*/ WAIT1: MOVX A,@DPTR ;/* 讀狀態(tài)字 */
JB ACC.7,WAIT1 ;/*判忙標(biāo)志BF,如BF=1 忙,等待*/
MOV DPTR,#CWADR1 ;/*寫指令字口地址*/
MOV A,COMM ;/*取指令代碼*/
MOVX @DPTR,A ;/*寫指令代碼*/
RET
?。?)左半屏寫數(shù)據(jù)子程序
WR_DATA1:MOV DPTR,#CRADR1 ;/*讀狀態(tài)字口地址*/
WAIT11: MOVX A,@DPTR ;/* 讀狀態(tài)字 */
JB ACC.7,WAIT11 ;/*判忙標(biāo)志BF,如BF=1 忙,等待*/
MOV DPTR,#DWADR1 ;/*寫數(shù)據(jù)字口地址*/
MOV A,DATA ;/*取數(shù)據(jù)/
MOVX @DPTR,A ;/*寫數(shù)據(jù)*/
RET
?。?)右半屏寫指令子程序WR_CMD2 和右半屏寫數(shù)據(jù)子程序WR_DATA2 的編制同左半屏子程序相同,只是對(duì)應(yīng)口地址不同。
8X16 字符顯示子程序:MGLS12864 液晶顯示屏由二片HD61202 控制,LCD 顯示中應(yīng)盡量避免一個(gè)字符一半在左半屏顯示,另一半在右半屏顯示的情況。設(shè)列地址寄存器為COLUMN,頁(yè)地址寄存器為PAGE,要顯示的字符代碼寄存器為ASCIICODE,W78E58 內(nèi)RAM28H-RAM37H 共16 個(gè)字節(jié)存放8×16 的點(diǎn)陣數(shù)據(jù),生成的8×16 點(diǎn)陣庫(kù)文件存放在單片機(jī)W78E58 存儲(chǔ)器中的首地址定義為ASCII_DOT816。
DISP_ASCII816: MOV DPTR,#ASCII_DOT816 ;8×16 點(diǎn)陣庫(kù)首地址
MOV A,ASCIICODE ;顯示字符代碼ASCIICODE
MOV B,#16 ;每個(gè)字符點(diǎn)陣占16 個(gè)字節(jié)
MUL AB ;計(jì)算顯示字符在字庫(kù)的首地址
ADD A,DPL
MOV DPL,A
MOV A,DPH
ADDC A,B
MOV DPH,A
??;MOV R0,#28H ;將點(diǎn)陣數(shù)據(jù)放到RAM28H-RAM37H
MOV R2,#00H
LP_MOVDOT16: MOV A,R2
MOVC A,@A+DPTR
MOV @R0,A ;如要將字符反顯(黑底白字),則讀出點(diǎn)
INC R0 ;陣數(shù)據(jù)后求反放入單片機(jī)的RAM 中
INC R2
CJNE R2,#16,LP_MOVDOT16
??;
PUSH COLUMN
MOV A,COLUMN ;顯示列數(shù)COLUMN 是否在右半屏
CJNE A,#64,ASCII_IF64
ASCII_IF64: JNC ASCII_YGE64
MOV DPTR,#CWADR1 ;在左半屏?xí)r,選擇左半屏寫指令代碼地址
CLR FIRST0_SECOND1_BIT ;左半屏列數(shù)標(biāo)志BIT=0
SJMP ALL_COLUMN
ASCII_YGE64: CLR C
SUBB A,#64
MOV COLUMN,A
MOV DPTR,#CWADR2 ;在右半屏?xí)r,選擇右半屏寫指令代碼地址
SETB FIRST0_SECOND1_BIT ;右半屏列數(shù)標(biāo)志BIT=1
ALL_COLUMN: MOV A,PAGE
ADD A,#10111000B ;設(shè)置頁(yè)地址命令
MOVX @DPTR,A
MOV A,COLUMN ;設(shè)置列地址命令
ADD A,#01000000B
MOVX @DPTR,A
MOV DPTR,DWADR1 ;根據(jù)左右半屏列數(shù)標(biāo)志,選擇寫顯示數(shù)據(jù)地址
JNB FIRST0_SECOND1_BIT,ALLMOV1
MOV DPTR,DWADR2
ALLMOV1: MOV R0,#28H
MOV_8BYTE1: MOV A,@R0
MOVX @DPTR,A ;寫顯示數(shù)據(jù)
NOP
INC R0
CJNE R0,#30H,MOV_8BYTE1
MOV DPTR,#CWADR1
JNB FIRST0_SECOND_BIT,ALLMOV2
MOV DPTR,#CWADR2
ALLMOV2: MOV A,PAGE
INC A ;頁(yè)地址加1
ADD A,#10111000B
MOVX @DPTR,A ;設(shè)置頁(yè)地址命令
MOV A,COLUMN ;設(shè)置列地址命令
ADD A,#01000000B
MOVX @DPTR,A
MOV DPTR,DWADR1;根據(jù)左右半屏列數(shù)標(biāo)志,選擇寫顯示數(shù)據(jù)地址
JNB FIRST0_SECOND1_BIT,ALLMOV3
MOV DPTR,DWADR2
ALLMOV3: MOV R0,#30H
MOV_8BYTE2: MOV A,@R0
MOVX @DPTR,A ;寫顯示數(shù)據(jù)
INC R0
CJNE R0,#38H,MOV_8BYTE2
?。?/p>
POP COLUMN
RET
16×16 漢字顯示子程序:16×16 漢字顯示子程序與8X16 字符顯示子程序基本相同。不同在于每次寫32 字
節(jié)顯示數(shù)據(jù),可定義W78E58 內(nèi)RAM28H-RAM47H 共32 個(gè)字節(jié)存放16×16 的點(diǎn)陣數(shù)據(jù),生成的16×16 點(diǎn)陣庫(kù)文件存放在單片機(jī)W78E58 存儲(chǔ)器中的首地址定義為HZK_DOT16X16。具體程序略,讀者如需要可來(lái)函索取。
結(jié)語(yǔ)
本文在介紹液晶顯示模塊與單片機(jī)接口的同時(shí),采用了新穎的改造方案以解決應(yīng)用中的問(wèn)題。由于節(jié)省了單片機(jī)口線,使系統(tǒng)資源得到了充分利用。可顯示漢字、字符和圖形,使人機(jī)界面更為美觀、易讀。其它如8×8 西文點(diǎn)陣字庫(kù)及圖形的建立和顯示可參照上面介紹的方法來(lái)編寫程序。由于各種液晶顯示模塊的接口基本相同,因此本文所討論的內(nèi)容也適用于其它型號(hào)的液晶顯示模塊。液晶顯示較其它顯示終端有許多優(yōu)點(diǎn):功耗低且字型美觀、可用集成電池供電,便于攜帶等。相信它將得到越來(lái)越廣泛的使用。
評(píng)論
查看更多