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