基于T6963C的LCD與ARM7的接口設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
0 引言
液晶模塊作為普遍采用的顯示器件,具有功耗低、顯示內(nèi)容多、控制靈活等特點(diǎn)。在中規(guī)模圖形液晶顯示模塊中,內(nèi)置T6963C控制器的LCD模塊是目前較為常用的內(nèi)置控制器型圖形液晶顯示模塊。該模塊可由硬件電路完成初始化設(shè)置,故可節(jié)省軟件開銷。軟件上,T6963C控制器也提供了豐富的指令集,且控制方式靈活多樣。而以ARM為內(nèi)核的32位微處理器,則具備高性能和低功耗的特點(diǎn),在工業(yè)控制領(lǐng)域應(yīng)用廣泛。因此,對(duì)于不帶液晶接口的中低端ARM7芯片,可由其通用輸入輸出(GPIO,general purpose input andoutput)引腳來實(shí)現(xiàn)與LCD的連接,并控制LCD實(shí)現(xiàn)其顯示功能。
1 LCD硬件接口設(shè)計(jì)
T6963C控制器可與液晶模塊的行、列驅(qū)動(dòng)器及顯示緩沖區(qū)RAM連接,并可通過這種硬件連接方式設(shè)置好液晶屏結(jié)構(gòu)(單、雙屏)、顯示窗口長度、寬度、字體等。內(nèi)置T6963C的單屏結(jié)構(gòu)點(diǎn)陣圖形液晶顯示模塊的原理框圖如圖1所示。
圖1中,數(shù)據(jù)總線和控制總線都直接與CPU的IO口線相連。液晶可采用SMG240128A點(diǎn)陣圖形液晶顯示模塊;而CPU則可選用基于ARM7TD-MI-S核的32位微處理器芯片LPC2134。該芯片是基于RISC的原理設(shè)計(jì),指令和譯碼簡單方便。它采用三級(jí)流水線技術(shù),CPU操作頻率最大可達(dá)60MHz,并具備47個(gè)通用I/O口,同時(shí)含有豐富的外設(shè)資源,十分適合于工業(yè)測量及控制領(lǐng)域使用。該液晶模塊與LPC2134的接口電路如圖2所示。
圖2中的液晶模塊采用數(shù)據(jù)并行傳輸模式,通過兩個(gè)驅(qū)動(dòng)芯片74L3245和74HC14與LPC2134相連。其中74LS245是八位雙向總線收發(fā)器,它可將液晶模塊的數(shù)據(jù)總線與CPU的P0口的8條口線相連,負(fù)責(zé)控制數(shù)據(jù)的傳輸,并具備數(shù)據(jù)鎖存和緩沖功能:74HC14為六輸入反相驅(qū)動(dòng)器,可驅(qū)動(dòng)液晶模塊的四條控制線。液晶模塊的21腳為背光接地端,它由p0.23控制背光的開與關(guān),通過電位器W2可調(diào)節(jié)背光亮度,用電位器W1則可控制調(diào)節(jié)液晶顯示的對(duì)比度。FG引腳為邊框地,須接地以防止靜電和雷擊。FS引腳接地,可將字體控制為8x8點(diǎn)陣。
2 顯示功能的實(shí)現(xiàn)
液晶顯示功能可通過LPC2134對(duì)液晶控制器T6963C的控制來實(shí)現(xiàn),T6963C控制器內(nèi)置豐富的指令集,可通過指令來設(shè)置顯示功能。指令可帶一個(gè)或兩個(gè)參數(shù),也可無參數(shù)。每條指令的執(zhí)行都是先送入?yún)?shù),再送入指令代碼。每次操作之前,還需要先進(jìn)行狀態(tài)字的檢測。
2.1 底層子函數(shù)設(shè)計(jì)
在程序?qū)用妫还苁菭顟B(tài)字的檢測,還是參數(shù)和指令代碼的傳送,都涉及到對(duì)液晶控制器的讀寫操作。根據(jù)T6963C說明書中提供的讀寫時(shí)序,并結(jié)合本系統(tǒng)的硬件設(shè)計(jì)方案,可得到如圖3所示的讀寫時(shí)序圖。
在設(shè)計(jì)程序時(shí)??筛鶕?jù)LPC2134的GPIO引腳模擬控制讀寫時(shí)序圖來實(shí)現(xiàn)數(shù)據(jù)的傳輸。針對(duì)數(shù)據(jù)和讀寫類型,可設(shè)計(jì)四個(gè)底層子函數(shù),以完成傳輸功能,其功能說明如表1所列。
其中寫命令字子函數(shù)及讀數(shù)據(jù)子函數(shù)的源代碼如下:
事先在頭文件中定義如下常量:
#define WR 1<<25//p0.25寫控制位
#define CD 1<<17//p1.17數(shù)據(jù)指令選擇控制位
#define RD 1<<26//p0.26讀控制位
#define CE 1<<27 //p0.27 LCD片選
#define DIR 1<<22 //p1.22 74LS245數(shù)據(jù)傳送方向控制位
#define DPT0xOff<<16//數(shù)據(jù)口
//寫命令字子函數(shù)完整源代碼
void LCD_WriteCommand(uint8 command)
{
uint32 com=0;//定義臨時(shí)存儲(chǔ)單元
com=command;
IOODIR=IOODIR | DPT;//設(shè)置輸出數(shù)據(jù)
IOOSET=IOOSET | CD;//命令屬性
IOOSET=IOOSET | WR:
IOOSET=IOOSET | RD;
IO1CLR=I01CLR | DIR;
//數(shù)據(jù)傳輸方向設(shè)定
IOOSET=(IOOSET&(~DPT))|(com<<16);
//數(shù)據(jù)寫入口線
IOOCLR=(IOOCLR&(-DPT)|(((-com)&(0xOff)<<16);
IOOCLR=IOOCLR | CE;//選中LCD
IOOCLR=IOOCLR | WR;//寫有效
IOOSET=IOOSET | WR;//寫入完畢,寫置低
IOOSET=IOOSET | CE;
}
//讀數(shù)據(jù)子函數(shù)完整源代碼
uint8 LCD_ReadData 0
{
uint8 data;
IO0DIR=IOODIR&(~DPT);//輸入數(shù)據(jù)
I01CLR=I01CLR | CD;//數(shù)據(jù)屬性
IO0SET=IO0SET | WR;
IO0SET=IO0SET | RD;
IO1SET=IO1SET | DIR;
//數(shù)據(jù)傳輸方向設(shè)定
IO0CLR=IO0CLR | CE;
IO0CLR=IO0CLR | RD;//讀有效
data=(IO0PIN&DPT)>>16;
//由引腳狀態(tài)寄存器讀出數(shù)據(jù)
IOOSET=IOOSET | RD;//讀無效
IO0SET=IO0SET | CE;
return (data);//返回值為讀取的數(shù)據(jù)
}
至于讀狀態(tài)和寫數(shù)據(jù)子函數(shù)的編寫,設(shè)計(jì)時(shí)可參照該子函數(shù)來完成。
2.2 驅(qū)動(dòng)層實(shí)現(xiàn)
接下來需要利用T6963C的指令來完成驅(qū)動(dòng)層顯示功能的設(shè)置。其中部分基本指令的定義如表2所列。事實(shí)上,驅(qū)動(dòng)層子函數(shù)的編寫都可通過調(diào)用寫命令、寫數(shù)據(jù)、讀狀態(tài)子函數(shù)來實(shí)現(xiàn)。
其液晶的初始化設(shè)置函數(shù)源代碼如下:
void LCD_Initialize(void)
{
LCD_WriteTCommand3(LCD_TXT_STP,0x00,0x00);//文本模式RAM起始地址
LCD_WriteTCommand3(LCD_TXT_WID, 30,0x00);//設(shè)置文本模式的寬度,寬度為N/6或N/8,N為寬度點(diǎn)數(shù),如240
LCD_WriteTCommand3(LCD_GRH_STP,0x00,0x00);//圖形方式RAM起始地址
LCD_WriteTCommand3(LCD_GRH_WID,30,0x00);//設(shè)置圖形模式的寬度,寬度為N/6或N/8,N為寬度點(diǎn)數(shù),如240
LCD_WriteTCommand 1(LCD_MOD_OR);//設(shè)置顯示方式為”或”
LCD_WriteTCommandl(LCD_DIS_SW |0x08);//設(shè)置純圖形顯示模式
}
2.3 漢字讀寫程序設(shè)計(jì)
初始化液晶后,就可設(shè)置顯示區(qū)域、顯示方式和顯示狀態(tài)。接下來應(yīng)將待顯示字符的字模數(shù)據(jù)寫入顯示緩沖區(qū),以便實(shí)現(xiàn)顯示功能。對(duì)于文本方式,可先將字模數(shù)據(jù)寫入顯示緩沖區(qū)并建立CGRAM,再由數(shù)據(jù)存儲(chǔ)位置確定字符代碼,然后通過寫人對(duì)應(yīng)代碼即可顯示字符;對(duì)于圖形顯示方式,則需將字模數(shù)據(jù)逐個(gè)字節(jié)的寫入圖形顯示緩沖區(qū)來實(shí)現(xiàn)顯示功能。二者相比各有特點(diǎn),其中文本模式顯示速度快。且內(nèi)置CGROM中含128個(gè)ASCII字符,可直接調(diào)用,但需先建立CGRAM,而且容量有限,只能管理2K字節(jié)的數(shù)據(jù),比較適合于顯示字符不多的場合;而圖形模式顯示速度相對(duì)較慢,但無需建立CGRAM,用戶只需將字模數(shù)據(jù)以字節(jié)為單位寫入圖形顯示區(qū)即可,適用于所需顯示內(nèi)容較多的場合。在一般的工程應(yīng)用中,漢字的顯示是比較重要的內(nèi)容,因此,本文主要介紹漢字顯示的程序設(shè)計(jì)。
由液晶初始化程序,本系統(tǒng)采用圖形模式作為顯示方式。漢字的字體一般為16x16點(diǎn)陣,占32個(gè)字節(jié),也可采用32x32點(diǎn)陣的字體,西文字符為16x8。由此編寫的子函數(shù)程序如下:
本液晶屏上的橫坐標(biāo)x范圍為0~29,縱坐標(biāo)y范圍為0~127。字模數(shù)據(jù)由造字模軟件提供,寫入字模數(shù)據(jù)的順序應(yīng)與其所代表的字符的結(jié)構(gòu)位置相對(duì)應(yīng)。讀寫顯示數(shù)據(jù)時(shí),要注意地址指針每讀寫一次會(huì)自動(dòng)增一。修改其值時(shí),必須先結(jié)束當(dāng)前讀寫操作,然后再修改地址,這樣才有效。其它子函數(shù)的編寫與漢字顯示子函數(shù)相同,不同字體的字符只是字模數(shù)據(jù)量不同,連續(xù)寫可多次調(diào)用單獨(dú)寫函數(shù)實(shí)現(xiàn),也可每行寫入所有字符的對(duì)應(yīng)字節(jié)數(shù)據(jù)。至于反白功能的實(shí)現(xiàn),可先讀出對(duì)應(yīng)字符的數(shù)據(jù)字節(jié),取反后再重新寫入。
3 結(jié)束語
本文通過ARM7微處理器芯片LPC2134的GPIO實(shí)現(xiàn)了與內(nèi)藏T6963C的液晶顯示模塊的接口設(shè)計(jì),并在軟件上實(shí)現(xiàn)了其基本顯示功能,從而在滿足了工程設(shè)計(jì)的要求。本文比較系統(tǒng)的闡述了液晶顯示程序的設(shè)計(jì)過程,并對(duì)設(shè)計(jì)中的難點(diǎn)給出了源程序代碼,以供參考。該程序的可移植性好,可適用LPC213x系列芯片、其它ARM7芯片以及內(nèi)置T6963C的不同型號(hào)液晶顯示模塊。