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