文獻標(biāo)識碼: A
文章編號: 0258-7998(2011)02-0127-03
LCD在人們生活中的應(yīng)用越來越廣泛,手機,、車載系統(tǒng)及工業(yè)測量設(shè)備等都把LCD作為重要的人機接口,,將使用者需要的信息顯示出來。這種方法是通過微處理器如單片機輸出圖形數(shù)據(jù),,再由LCD顯示模塊根據(jù)該圖形數(shù)據(jù)進行顯示[1-3],。其缺點是需要在LCD的像素排列和程序邏輯設(shè)計中花費大量的時間,而且在進行不同LCD顯示模塊的驅(qū)動設(shè)計時,,要根據(jù)該LCD的驅(qū)動模塊重寫驅(qū)動程序,,導(dǎo)致系統(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按鍵輸入單元負(fù)責(zé)選擇需要的虛擬LCD界面的大小及輸入顯示數(shù)據(jù),,這些信息由BTF020單片機存儲在緩沖區(qū)單元中,;緩沖區(qū)單元通過所建的二維數(shù)組將數(shù)據(jù)分配給不同的存儲單元;串口通信單元根據(jù)BTF020單片機的命令負(fù)責(zé)將緩沖區(qū)單元中的數(shù)據(jù)發(fā)送給PC機,;PC機中的數(shù)據(jù)接收單元負(fù)責(zé)接收串口通信單元發(fā)出的數(shù)據(jù),;顯示數(shù)據(jù)處理單元根據(jù)數(shù)據(jù)接收單元送出的數(shù)據(jù)進行數(shù)據(jù)轉(zhuǎn)換和處理,以便構(gòu)建虛擬LCD界面,;虛擬LCD界面負(fù)責(zé)將送入的字符或者圖形數(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位二進制碼,然后再對該二進制碼進行逐位解析并按順序進行處理和顯示,。當(dāng)虛擬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顯示漢字前需先取模,。漢字的字模分成上下兩個部分,當(dāng)顯示規(guī)格為16×16點陣的漢字時,,取模走向為縱向且高位在前,。可先對上半部分從左到右取模,,然后對下半部分從左到右取模,,再將該漢字所占的像素點標(biāo)為“1”,其余標(biāo)為“0”,,從左到右開始取字模的結(jié)果并以十六進制表示,。以同樣的方法,再對下半部分取模,,其結(jié)果仍以十六進制表示,。此時,將這兩次的結(jié)果結(jié)合起來就可得該漢字的字模,。在取完字模后,,把該字的字模預(yù)先存儲到一個一維數(shù)組中,然后確定漢字顯示于屏幕的位置,。由于漢字顯示是以頁和列為定位坐標(biāo),,單個漢字不跨頁顯示,因此可以調(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ù)中橫坐標(biāo)可被系統(tǒng)識別,,而縱坐標(biāo)須轉(zhuǎn)換成頁的表示形式才能被系統(tǒng)識別,。將縱坐標(biāo)轉(zhuǎn)換成頁地址時先確定畫點所在頁,由于一頁中縱方向上有8個坐標(biāo)點,,因此可用整除的方式得到確定的頁地址,。表1表示一頁中點亮像素點的數(shù)據(jù)與整除y時得到的余數(shù)的關(guān)系。
設(shè):點亮像素點的數(shù)據(jù)為add值,,LCDdata [ ][ ]為顯示緩沖區(qū)數(shù)組,,y/8為頁地址,x為列地址,,則可得到顯示緩沖區(qū),。該顯示緩沖區(qū)的數(shù)據(jù)為:
LCDdata[y/8][x]=add+LCDdata[y/8][x]
按上述方法得到畫點的坐標(biāo)后,再根據(jù)虛擬LCD顯示線段的坐標(biāo),,在確定的方向上依次進行點的顯示,。畫橫線的函數(shù)定義為:
void HLine(int x1,int x2,int y)
式中,x1,、x2分別為橫線的橫坐標(biāo)起始,、結(jié)束點,y為縱坐標(biāo),。
畫豎線的函數(shù)定義為:
void SLine(int x,int y1,int y2)
式中,x為豎線的橫坐標(biāo),,y1、y2分別為豎線縱坐標(biāo)起始,、結(jié)束點,。
畫矩形的函數(shù)定義為:
void Rectangle(int x1,int y1,int x2,int y2)
式中,x1為矩形左上角橫坐標(biāo),,y1為矩形左上角縱坐標(biāo),,x2為矩形右下角橫坐標(biāo),y2為矩形右下角縱坐標(biāo),。
3 實驗
進行實驗時采用VB6.0語言編程,,圖5是用上述方法虛擬的分辨率為256×256的LCD顯示界面,該虛擬LCD界面的左上角的坐標(biāo)為(0,0),右下角的坐標(biāo)為(255,,255),。界面中像素點以一個方格表示,,初始界面由綠色方格組成,當(dāng)期望的像素點進行點亮顯示時該位置為黑色方格,。
完成上述界面中字符和圖形顯示功能的語句為
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的應(yīng)用[J].電子技術(shù)應(yīng)用,2004,30(2):
71-73.
[2] 吳捷,陸鋒,左劍. 圖形液品顯示控制器SI D13503在單片機系統(tǒng)中的應(yīng)用[J].信息化研究,2009,35(11):54-56.
[3] 潘敏,焦生杰,翁寅生. 基于DSP和ST7920的液晶顯示模塊的實現(xiàn). 電子技術(shù)應(yīng)用, 2007,33(6):48-50.
[4] 王震, 謝丁龍. 點陣LCD 顯示模塊通用驅(qū)動程序的開發(fā)[J]. 許昌學(xué)院學(xué)報, 2005,24(5):84-87.