中心議題:
- 介紹基于ARM 和TFT6758 的液晶顯示屏設(shè)計(jì)
- 分析對(duì)液晶模塊TFT6758 的控制機(jī)理
解決方案:
- 接口電路采用PACK板形式與主板連接
- LCD 顯示軟件設(shè)計(jì)
引言
隨著液晶顯示技術(shù)的發(fā)展, LCD 液晶顯示模塊已成為家電、顯示儀器儀表和其他電子產(chǎn)品的重要組成部分。液晶顯示屏以其顯示直觀、便于操作的特點(diǎn)被用作各種便攜式系統(tǒng)的顯示終端。液晶顯示屏具有低電壓、微功耗、無(wú)輻射、小體積等特點(diǎn), 被廣泛應(yīng)用于各種各樣嵌入式產(chǎn)品中。ARM 是精簡(jiǎn)指令集計(jì)算機(jī)( RISC) , 其具有性能高、成本低和能耗小的特點(diǎn),被廣泛地應(yīng)用于嵌入式系統(tǒng)開(kāi)發(fā)。ARM 處理器幾乎已經(jīng)深入到各個(gè)領(lǐng)域: 工業(yè)控制領(lǐng)域、無(wú)線通訊領(lǐng)域、網(wǎng)絡(luò)應(yīng)用、消費(fèi)類電子產(chǎn)品、影像和安全產(chǎn)品等。
因此, 本文介紹一種基于ARM 和TFT6758 的液晶顯示屏設(shè)計(jì)。
1 TFT6758 控制器簡(jiǎn)介
TFT6758 LCD 模塊是點(diǎn)陣式LCD, 能顯示圖形、漢字、以及各種符號(hào)信息, 可為系統(tǒng)提供友好的人機(jī)界面。其主要是面向工作人員的, 將監(jiān)控信息等顯示出來(lái), 讓工作人員可以清晰地進(jìn)行監(jiān)控操作。TFT6758 液晶模塊的屏幕大小為2.2in, 點(diǎn)像素為240×320, 內(nèi)帶液晶控制器和液晶驅(qū)動(dòng)器, 支持真彩色262K 色, 用戶界面更華麗。TFT6758 LCD模塊的工作電壓為3.3V, 內(nèi)帶白光LED 背光燈, 可以直接使用8 位、16 位或18 位總線方式與控制器連接。
2 TFT6758 接口電路
TFT 液晶接口電路采用PACK板形式與主板連接, 其接口定義如圖1 所示。將TFT6758 液晶顯示模塊的RESET 引腳連接到J1 連接器上, 使用LPC2292 的P0.22 控制液晶模塊復(fù)位。TFT6758 液晶顯示模塊的CS、WR 和RD 引腳均連接到J1 連接器上, 與主板的LPC2292 的片選、寫(xiě)和讀信號(hào)連接。而RS 引腳則使用A1 連接, 當(dāng)A1 為高電平時(shí)為數(shù)據(jù)操作, 當(dāng)A1 為低電平時(shí)為命令( 索引) 操作,即使用兩個(gè)不同的地址來(lái)區(qū)別向TFT6758 液晶模塊發(fā)送命令還是發(fā)送數(shù)據(jù)。TFT6758 液晶模塊片選信號(hào): LCM_nCS0; 0x83200000~0x833FFFFF; 索引/ 指令操作地址為: 0x8320000; 數(shù)據(jù)操作地址為:0x83200002。
[page]
TFT6758 液晶模塊的背光是LED 背光, 采用4個(gè)白光LED 串連連接, 所以要設(shè)計(jì)升壓電路,CAT32TDI 就是專門(mén)用于白光LED 驅(qū)動(dòng)的升壓芯片, 可以驅(qū)動(dòng)4 個(gè)串連的白光LED。CAT32TDI 的為輸出關(guān)閉控制引腳, 由LEDC 信號(hào)控制( 與主板的LPC2292 的PWM 引腳P0.21 相連, 可以使用PWM 控制背光的亮度) , 為了保證LEDC 連接的I/O 在沒(méi)有配置為輸出時(shí)也能點(diǎn)亮LED 背光, 所以接了一個(gè)10kΩ 的上拉電阻R1。CAT32TDI 芯片為恒流輸出, 輸出由R2 控制。
3 TFT6758 顯示原理
TFT 液晶顯示器上的每一個(gè)液晶像素點(diǎn)都由集成在其后的薄膜晶體管來(lái)驅(qū)動(dòng)。TFT 液晶顯示器具有屏幕反應(yīng)速度快、對(duì)比度好、亮度高、可視角度大、色彩豐富等特點(diǎn)。
在文本顯示方式下, 液晶屏顯示信息的管理單位是8×8 點(diǎn)陣, 稱為一個(gè)文本顯示單位, 每個(gè)文本顯示單位對(duì)應(yīng)文本顯示緩沖區(qū)中的8 個(gè)連續(xù)存儲(chǔ)單元。寫(xiě)入文本顯示緩沖區(qū)的是字符代碼, 點(diǎn)陣狀態(tài)信息( 8×8) 即字模存放在RAM 中。漢字一般采用16×16的點(diǎn)陣來(lái)描述, 將它分為4 個(gè)8×8 的點(diǎn)陣, 用4 個(gè)字符代碼來(lái)描述一個(gè)漢字, 根據(jù)這4 個(gè)部分的位置關(guān)系將4 個(gè)代碼寫(xiě)入相應(yīng)的文本顯示緩沖區(qū)。LCD 的顯示與字模數(shù)據(jù)密切相關(guān), 顯示子程序的功能就是讀取相應(yīng)的字模數(shù)據(jù)送給LCD, 由LCD將接收到的字模在相應(yīng)的位置上顯示出來(lái)。但字模數(shù)據(jù)的生成與程序基本無(wú)關(guān), 相關(guān)的只是字模數(shù)據(jù)的內(nèi)容。向液晶發(fā)送的漢字必須用提取字模軟件轉(zhuǎn)換為點(diǎn)陣數(shù)組, 才能在程序中使用。
4 LCD 顯示軟件設(shè)計(jì)
首先進(jìn)行系統(tǒng)初始化, 接著對(duì)LCD 控制寄存器及地址寄存器進(jìn)行改寫(xiě), 設(shè)置一些LCD 的參數(shù), 配置Buffer 的起始地址和Buffer 大小等一些參數(shù), 然后是清屏, 最后系統(tǒng)可以通過(guò)控制器發(fā)出的指令調(diào)用相關(guān)函數(shù), 完成相應(yīng)的顯示功能。流程圖如圖2所示。
4.1 LCD 初始化
LCD 初始化主要包括對(duì)控制器的顯示頻率、顯示行數(shù)及顯示緩沖區(qū)地址的設(shè)置。主要程序如下:
void TftInit(void)
{ STCOM_INI init_dat;
int i;
TftReset();
for(i=0; i<100; i++) // 設(shè)定最多100 條初始化命令
{ init_dat = TFT6758_INI[i]; // TFT6758_INI 數(shù)組定義TFT6758 初始化數(shù)據(jù)信息
if(init_dat.type==DATA_END) break;
if(init_dat.type==HD66783_COM){ TftSerialCom(init_dat.com, init_dat.dat); // 向TFT 液晶模塊發(fā)送串行命令}
else{ TftSendCom(init_dat.com); // 向TFT 液晶模塊發(fā)送命令字TftSendDat(init_dat.dat); // 向TFT 液晶模塊發(fā)送數(shù)據(jù)}
DelaymS(init_dat.dly); // 延時(shí)等待}
}
4.2 LCD 清屏
由于系統(tǒng)上電時(shí), 顯示緩沖區(qū)的數(shù)據(jù)是不固定的, 顯示出亂碼, 因此在液晶顯示操作之前應(yīng)將緩沖區(qū)清零或向緩沖區(qū)發(fā)送指定的數(shù)據(jù)來(lái)填充屏幕。程序如下:
void GUI_ClearSCR(void){ TFT_FillSCR(GUI_CCOLOR); // 全屏填充, 直接使用數(shù)據(jù)填充顯示緩沖區(qū)}
4.3 數(shù)據(jù)顯示
液晶初始化結(jié)束后, 系統(tǒng)將采集來(lái)的信號(hào)通過(guò)處理后用文字、圖形等顯示到LCD 上。這里舉一個(gè)簡(jiǎn)單的畫(huà)窗口程序。為了提高程序的可讀性和可移植性, 在程序頭文件中都用了宏定義, 限于篇幅在此不再列出。
s tatic WINDOWS win;// GUI 初始化
void GUI_INIT(void){GUI_Initialize(); // 初始化GUI, 包括初始化顯示緩沖區(qū), 初始化LCM 并清屏
GUI_SetColor (WHITE,BLUE);// 顯示顏色:
WHITE 前景色; BLACK背景色I(xiàn)nitWin(&win); // 窗口初始化}
// 窗口初始化
void InitWin(WINDOWS *ptrwin){ptrwin- >x = Windows_x;ptrwin- >y = Windows_y;ptrwin- >with = Windows_width;ptrwin- >hight = Windows_hight;ptrwin- >title = (uint8 *)Windows_title;ptrwin- >s tate = (uint8 *)Windows_s tate;GUI_WindowsDraw(ptrwin); // 顯示窗口。根據(jù)提供的窗口參數(shù)進(jìn)行畫(huà)窗口。
}[page]
其中顯示漢字的程序如下:
void MyGUI_PutHZ(uint32 x, uint32 y, uint8 *dat){GUI_PutHZ(x,y,dat,16,16);}
以漢字方式顯示標(biāo)題的函數(shù)如下:
void ShowTitleHZ(uint32 x, uint32 y)
{x=x+10;MyGUI_PutHZ(x, y, (uint8 *)hzye);//hzye為" 液" 的點(diǎn)陣數(shù)組
MyGUI_PutHZ (x+HZ_FONT_SIZE, y, (uint8 *)hzjing);//hzjing 為" 晶" 的點(diǎn)陣數(shù)組
MyGUI_PutHZ(x+2*HZ_FONT_SIZE, y, (uint8 *)hzxian); //hzxian 為" 顯" 的點(diǎn)陣數(shù)組
MyGUI_PutHZ(x+3*HZ_FONT_SIZE, y, (uint8 *)hzshi); //hzshi 為" 示" 的點(diǎn)陣數(shù)組}
以漢字方式顯示菜單、狀態(tài)欄等與上述方法類似。
5 結(jié)束語(yǔ)
本文對(duì)基于ARM 和TFT6758 的液晶顯示模塊實(shí)現(xiàn)方法進(jìn)行了探討, 對(duì)液晶模塊TFT6758 進(jìn)行了有效的控制, 可提供豐富靈活的漢字、字符、圖形, 實(shí)現(xiàn)菜單和現(xiàn)場(chǎng)數(shù)據(jù)的動(dòng)態(tài)顯示, 性能穩(wěn)定。該顯示模塊能夠應(yīng)用于工業(yè)控制中。