文獻標識碼: A
文章編號: 0258-7998(2011)02-0127-03
LCD在人們生活中的應用越來越廣泛,手機、車載系統(tǒng)及工業(yè)測量設備等都把LCD作為重要的人機接口,將使用者需要的信息顯示出來。這種方法是通過微處理器如單片機輸出圖形數(shù)據(jù),再由LCD顯示模塊根據(jù)該圖形數(shù)據(jù)進行顯示[1-3]。其缺點是需要在LCD的像素排列和程序邏輯設計中花費大量的時間,而且在進行不同LCD顯示模塊的驅(qū)動設計時,要根據(jù)該LCD的驅(qū)動模塊重寫驅(qū)動程序,導致系統(tǒng)開發(fā)周期長、成本增加[4]。
本文介紹一種使用虛擬技術(shù)實現(xiàn)LCD顯示模塊的方法以彌補前述方法的不足。該方法通過在單片機的RAM中建立緩沖區(qū)數(shù)組并對虛擬LCD的顯示數(shù)據(jù)進行存儲后,將顯示數(shù)據(jù)傳遞給PC機,再對這些數(shù)據(jù)進行處理后構(gòu)建虛擬LCD以顯示字符或者圖形。
1 虛擬LCD顯示模塊的結(jié)構(gòu)
虛擬LCD顯示模塊的功能結(jié)構(gòu)如圖1所示。虛擬LCD顯示模塊主要由4×4按鍵輸入單元、緩沖區(qū)單元、串口通信單元、數(shù)據(jù)接收單元、顯示數(shù)據(jù)處理單元、虛擬LCD界面組成。其中,4×4按鍵輸入單元負責選擇需要的虛擬LCD界面的大小及輸入顯示數(shù)據(jù),這些信息由BTF020單片機存儲在緩沖區(qū)單元中;緩沖區(qū)單元通過所建的二維數(shù)組將數(shù)據(jù)分配給不同的存儲單元;串口通信單元根據(jù)BTF020單片機的命令負責將緩沖區(qū)單元中的數(shù)據(jù)發(fā)送給PC機;PC機中的數(shù)據(jù)接收單元負責接收串口通信單元發(fā)出的數(shù)據(jù);顯示數(shù)據(jù)處理單元根據(jù)數(shù)據(jù)接收單元送出的數(shù)據(jù)進行數(shù)據(jù)轉(zhuǎn)換和處理,以便構(gòu)建虛擬LCD界面;虛擬LCD界面負責將送入的字符或者圖形數(shù)據(jù)顯示出來。
2 虛擬LCD顯示數(shù)據(jù)的處理
2.1顯示緩沖區(qū)及數(shù)組的建立
虛擬LCD的分辨率可根據(jù)BTF020發(fā)送的數(shù)據(jù)確定并采用分頁縱向顯示。在BTF020中建立一個緩沖區(qū)來存放需要顯示的數(shù)據(jù),然后將這個緩沖區(qū)中的數(shù)據(jù)發(fā)送給PC機,由PC機將接收到的BYTE類型數(shù)據(jù)還原成8位二進制碼,然后再對該二進制碼進行逐位解析并按順序進行處理和顯示。當虛擬LCD的分辨率確定為256×256,顯示色為單色時,串口傳輸?shù)臄?shù)據(jù)為8位二進制碼,因此建立一個二維數(shù)組LCDdata[31][255]作為虛擬LCD的字符顯示緩沖區(qū),共32頁(0~31)、256列(0~255)。該虛擬LCD的顯示緩沖區(qū)分布如圖2所示。
2.2 字符的處理與顯示
虛擬LCD顯示漢字前需先取模。漢字的字模分成上下兩個部分,當顯示規(guī)格為16×16點陣的漢字時,取模走向為縱向且高位在前??上葘ι习氩糠謴淖蟮接胰∧?,然后對下半部分從左到右取模,再將該漢字所占的像素點標為“1”,其余標為“0”,從左到右開始取字模的結(jié)果并以十六進制表示。以同樣的方法,再對下半部分取模,其結(jié)果仍以十六進制表示。此時,將這兩次的結(jié)果結(jié)合起來就可得該漢字的字模。在取完字模后,把該字的字模預先存儲到一個一維數(shù)組中,然后確定漢字顯示于屏幕的位置。由于漢字顯示是以頁和列為定位坐標,單個漢字不跨頁顯示,因此可以調(diào)用漢字顯示函數(shù)來顯示漢字,這樣通過替換顯示緩沖區(qū)中的數(shù)據(jù)就可以達到顯示漢字的目的。該漢字顯示函數(shù)為:
void Write_word(int y,int x, unsigned char word [ ]
其中,y代表頁,x代表列,word代表希望顯示的字的字模。圖3為漢字顯示流程。虛擬LCD顯示規(guī)格為8×16點陣的數(shù)字0~9時,取模走向為縱向,高位在前,點陣格式為陰碼,取模方式為行列式。
通過調(diào)用數(shù)字顯示函數(shù)進行顯示,這樣通過替換顯示緩沖區(qū)中的數(shù)據(jù)就可以達到顯示數(shù)字的目的。該數(shù)字顯示函數(shù)為:
void Write_num(int y,int x,int number)
2.3 點、直線和矩形的處理與顯示
漢字在縱向的顯示處理是按頁計算,而點在縱向的顯示處理是按行計算,其計算方式與列的計算方式相同。把整個虛擬LCD屏幕分成255行、255列,則該虛擬LCD的圖形顯示緩沖區(qū)分布如圖4所示。
按照以上分布規(guī)則,通過調(diào)用畫點函數(shù)可在屏幕上畫點。該畫點函數(shù)為:
void Point(int x,int y)
該函數(shù)中橫坐標可被系統(tǒng)識別,而縱坐標須轉(zhuǎn)換成頁的表示形式才能被系統(tǒng)識別。將縱坐標轉(zhuǎn)換成頁地址時先確定畫點所在頁,由于一頁中縱方向上有8個坐標點,因此可用整除的方式得到確定的頁地址。表1表示一頁中點亮像素點的數(shù)據(jù)與整除y時得到的余數(shù)的關(guān)系。
設:點亮像素點的數(shù)據(jù)為add值,LCDdata [ ][ ]為顯示緩沖區(qū)數(shù)組,y/8為頁地址,x為列地址,則可得到顯示緩沖區(qū)。該顯示緩沖區(qū)的數(shù)據(jù)為:
LCDdata[y/8][x]=add+LCDdata[y/8][x]
按上述方法得到畫點的坐標后,再根據(jù)虛擬LCD顯示線段的坐標,在確定的方向上依次進行點的顯示。畫橫線的函數(shù)定義為:
void HLine(int x1,int x2,int y)
式中,x1、x2分別為橫線的橫坐標起始、結(jié)束點,y為縱坐標。
畫豎線的函數(shù)定義為:
void SLine(int x,int y1,int y2)
式中,x為豎線的橫坐標,y1、y2分別為豎線縱坐標起始、結(jié)束點。
畫矩形的函數(shù)定義為:
void Rectangle(int x1,int y1,int x2,int y2)
式中,x1為矩形左上角橫坐標,y1為矩形左上角縱坐標,x2為矩形右下角橫坐標,y2為矩形右下角縱坐標。
3 實驗
進行實驗時采用VB6.0語言編程,圖5是用上述方法虛擬的分辨率為256×256的LCD顯示界面,該虛擬LCD界面的左上角的坐標為(0,0),右下角的坐標為(255,255)。界面中像素點以一個方格表示,初始界面由綠色方格組成,當期望的像素點進行點亮顯示時該位置為黑色方格。
完成上述界面中字符和圖形顯示功能的語句為
Rectangle(50,30,200,100); 畫邊框
Write_word(6,128,peng); 寫“鵬”
Write_num(8,111,0); 寫“0”
Write_num(8,119,5); 寫“5”
Write_num(8,127,2); 寫“2”
Write_num(8,135,2); 寫“2”
Write_comm( ); 緩沖區(qū)發(fā)送到PC
通過顯示緩沖區(qū)的數(shù)組存儲虛擬LCD的顯示數(shù)據(jù),然后將數(shù)據(jù)傳送給PC機,再用VB6.0語言對這些數(shù)據(jù)進行處理并構(gòu)建虛擬LCD的顯示界面,可以正確顯示字符、點、線和矩形等圖形。所建的虛擬LCD顯示模塊具有開發(fā)簡便、快速、通用性強的特點。
參考文獻
[1] 劉冬生,曾曉雁. 液晶顯示控制器SED1330/SED1335/SED1336/E1330的應用[J].電子技術(shù)應用,2004,30(2):
71-73.
[2] 吳捷,陸鋒,左劍. 圖形液品顯示控制器SI D13503在單片機系統(tǒng)中的應用[J].信息化研究,2009,35(11):54-56.
[3] 潘敏,焦生杰,翁寅生. 基于DSP和ST7920的液晶顯示模塊的實現(xiàn). 電子技術(shù)應用, 2007,33(6):48-50.
[4] 王震, 謝丁龍. 點陣LCD 顯示模塊通用驅(qū)動程序的開發(fā)[J]. 許昌學院學報, 2005,24(5):84-87.