關(guān)鍵詞:液晶顯示器;DSP;接口;SED1335;MSP-G320240
1 引言
各種儀器儀表無論是測量型的儀器儀表,還是信號源型的儀器儀表,或大或小都有一個顯示子系統(tǒng),這使得液晶顯示器(LCD)的應(yīng)用尤為廣泛。由于液晶顯示器具有體積小、外形薄、功耗低、重量輕、工作驅(qū)動電壓低、無輻射,特別是視域?qū)?、顯示信息量大等優(yōu)點,因此,隨著現(xiàn)代測控技術(shù)的日益發(fā)展,液晶顯示器已經(jīng)成為測量顯示結(jié)果和人機對話的重要工具。本文介紹了內(nèi)嵌SED1335控制器的液晶顯示器MSP-G320240的工作原理,給出了它與DSP的接口方法及相應(yīng)的C語言程序應(yīng)用設(shè)計。
SED1335是日本SEIKO EPSON公司出品的液晶顯示控制器,它具有I/O緩沖器、指令功能豐富、能混合顯示圖形和文本、4位數(shù)據(jù)可并行發(fā)送、并可最大驅(qū)動640×256點陣等特點。
2?。停樱校牵常玻埃玻矗昂喗?/B>
MSP-G320240是TRULY SEMICONDUCTORS公司生產(chǎn)的圖形點陣式液晶顯示器,圖1為其具體的電路結(jié)構(gòu)。
從圖1可知,MSP-G320240的最大點陣為320×240?且?guī)в斜彻夤δ埽軌蛟诤軐挼臏囟确秶鷥?nèi)工作(0~50℃)?內(nèi)部有SED1335液晶顯示控制器。SED1335的硬件結(jié)構(gòu)可分成MPU接口部分、內(nèi)部控制部分和LCD驅(qū)動部分。
SED1335的接口部分由指令輸入緩沖器、數(shù)據(jù)輸入緩沖器、數(shù)據(jù)輸出緩沖器和標志寄存器組成。通過引腳的電平設(shè)置可選擇適配8080系列和M6800系列MPU的等兩種操作時序電路。
SED1335的控制部分由振蕩器、功能邏輯電路、顯示RAM管理電路、字符庫及其管理電路以及產(chǎn)生驅(qū)動時序的時序發(fā)生器等組成。振蕩器工作頻率可在1~10MHz內(nèi)選擇,而SED1335也可在很高的工作頻率下迅速解譯由MPU發(fā)來的各類代碼。
SED1335可以管理64kB顯示RAM,同時可以管理內(nèi)藏的字符發(fā)生器、外擴字符發(fā)生器CGRAM或外部CGRAM。64kB顯示RAM可分為文本顯示區(qū)、圖形顯示區(qū)和字符顯示區(qū)等三種顯示特性區(qū)。其中文本顯示區(qū)專用于文本方式顯示,區(qū)中每個字節(jié)的數(shù)據(jù)都認為是字符代碼。SED1335使用該字符代碼確定字符首地址,然后將相應(yīng)的字模數(shù)據(jù)傳送出去,以在液晶屏上顯示該字符的8×8點陣塊;圖形顯示區(qū)用于圖形方式顯示,區(qū)中每個字節(jié)的數(shù)據(jù)直接被送出,每個位的電平狀態(tài)決定顯示屏上一個點的顯示狀態(tài),“1”為顯示,“0”為不顯示;SED1335內(nèi)的字符發(fā)生器CGROM固化了160種5×7點陣字符的字模;此外,SED1335還能外擴字符發(fā)生器,其代碼范圍是80H~9FH和E0H~FFH共64種。
SED1335的驅(qū)動部分具有各顯示區(qū)的合成顯示能力、傳輸數(shù)據(jù)的組織功能及產(chǎn)生液晶顯示模塊所需時序的功能。SED1335用4位并行方式向液晶顯示器傳輸數(shù)據(jù)。
一般來講,使用內(nèi)置SED1335控制器的液晶顯示器時,設(shè)計者無需了解SED1335對液晶屏的顯示驅(qū)動、點陣掃描、顯示存儲器管理等操作,這一切都會由SED1335自動進行?因此只需清楚SED1335的各種數(shù)據(jù)指令格式、顯示存儲器的區(qū)間劃分和接口引腳的功能定義即可。
該液晶顯示器同微處理器的接口也很簡單,只要按液晶顯示器的引腳功能定義將其分別連接于微處理器的相應(yīng)管腳即可。微處理器對液晶顯示器的操作有四類、共13條指令:第一類是系統(tǒng)控制指令(2條),用于設(shè)置SED1335的軟件初始化和顯示驅(qū)動電源狀態(tài);第二類是顯示操作指令(7條),該類指令用于設(shè)置顯示的數(shù)據(jù)起始地址、區(qū)域、方式以及光標的顯示方式、形狀和光標地址指針的移動方向等;第三類是繪制操作指令(2條),該指令專用于對液晶屏上的像素(點)進行操作;第四類是存儲操作指令(2條),該指令用于將顯示數(shù)據(jù)寫入顯示區(qū)并把光標地址確定的數(shù)據(jù)送到緩沖區(qū)。SED1335的多數(shù)指令都帶有參數(shù),這些參數(shù)值可根據(jù)所控制的液晶顯示器的具體特征和顯示的需要來進行設(shè)置,其指令集如表1所列。
表1 SED1335的指令集
功 能 | 指 令 | 操作碼 |
說 明 |
參數(shù)量 |
系統(tǒng)控制 | SYSTEM SET | 40H | 初始化,顯示窗口設(shè)置 | 8 |
SLEEP IN | 53H | 空閑操作 | - | |
顯示操作 | DISP ON/OFF | 59H/58H | 設(shè)置顯示方式 | 1 |
SCROLL | 44H | 設(shè)置顯示區(qū)域,卷動 | 10 | |
CSRFORM | 5DH | 設(shè)置光標形狀 | 2 | |
CGRAM ADR | 500H | 設(shè)置CGRAM起始地址 | 2 | |
CSRDIR | 4CH~4FH | 設(shè)置光標移動方向 | - | |
HDOT SCR | 5AH | 設(shè)置點單元卷動位置 | 1 | |
OVLAY | 5BH | 設(shè)置合成顯示方式 | 1 | |
繪制操作 | CSRW | 46H | 設(shè)置光標地址 | 2 |
CSRR | 47H | 讀出光標地址 | 2 | |
存儲操作 | MWRITE | 42H | 數(shù)據(jù)寫入顯示緩沖區(qū) | 若干 |
MREAD | 43H | 從顯示緩沖區(qū)讀數(shù)據(jù) | 若干 |
3?。停樱校牵常玻埃玻矗巴模樱械慕涌?/B>
TI公司的16-bit定點DSP TMS320F206是一種低功耗的DSP器件,它采用改進的哈佛結(jié)構(gòu),有1條程序總線和3條數(shù)據(jù)總線。該DSP采用流水線操作,同時具有高度并行32-bit算術(shù)邏輯單元、16×16bit并行硬件乘法器、片內(nèi)存儲器、片內(nèi)外設(shè)和高度專業(yè)化的指令集,特別適合于信號處理,可用于工業(yè)控制領(lǐng)域和各類儀器儀表的開發(fā)設(shè)計。液晶顯示器MSP-G320240有8位數(shù)據(jù)線、3個電源線和5個控制線,當TMS320F206外接16MHz晶振,且工作時鐘控制模式選為×1時,可以把液晶顯示器MSP-G320240的讀寫信號線同TMS320F206的讀寫信號線直接相連。圖2所示是液晶顯示器與TMS320F206的典型接口電路。
4?。谜Z言程序設(shè)計
TMS320F206的用戶可以用匯編語言或C語言進行源程序的編寫,因為用C語言開發(fā)出的系統(tǒng)易于維護,可靠性高,可移植性好。下面是用C語言編寫的液晶顯示器MSP-G320240的初始化及清屏程序:
ioport unsigned int port1ff1; /*定義片選地址*/
ioport unsigned int port1ff0;
#define Lcd_wc port1ff1 /*LCD寫指令*/
#define Lcd_wd port1ff0 /*LCD寫參數(shù)*/
#define Lcd_rs port1ff0
#define Lcd_rd port1ff1
#define SYSTEM_SET 0x40 /*初始化設(shè)置*/
#define SCROLL 0x44 /*顯示域設(shè)置*/
#define SLEEP_IN 0x53 /*休閑模式設(shè)置*/
#define DISP_ON 0x59 /*顯示狀態(tài)設(shè)置顯示開*/
#define DISP_OFF 0x58 /*顯示關(guān)*/
#define OVLAY 0x5b /*顯示合成設(shè)置*/
#define HDOT_SCR 0x5a /*點位移設(shè)置*/
#define CSRFORM 0x5d /*光標形狀設(shè)置*/
#define CGRAM_ADR 0x5c /*CGRAM首址設(shè)置*/
#define CSRDIR_RG 0x4c /*光標移動方式設(shè)置光標右移*/
#define CSRDIR_LF 0x4d /*光標左移*/
#define CSRDIR_UP 0x4e /*光標上移*/
#define CSRDIR_DW 0x4f /*光標下移*/
#define CSRW 0x46 /*光標指針設(shè)置*/
#define CSRR 0x47 /*讀取光標指針*/
#define MWRITE 0x42 /*數(shù)據(jù)寫入設(shè)置*/
#define MREAD 0x43 /*數(shù)據(jù)讀取設(shè)置*/
#define Lcd AP 0x28 /*顯示屏一行所占字節(jié)數(shù)*/
#define wait() while((Lcd_rs&0x0040)==0x0040)/*等待*/
void Clear(unsigned int Add1,unsigned int Add2,unsigned int Data)
{unsigned int Counter;
Lcd_wc=CSRDIR_RG;wait();?/*Add1: 顯示區(qū)首址*/
Lcd_wc=CSRW; wait();/*Add2: 顯示區(qū)末址 */
Lcd_wd=0x00; wait(); /*Data: 顯示數(shù)據(jù)*/
Lcd_wd=0x00;wait();?
Lcd wc=MWRITE; wait();
{for_Counter=Add1;Counter<Add2;Counter++)
{Lcd_wd=Data;wait();}?
Lcd_wc=CSRDIR_DW; wait();}
void Lcd_Init( void) /*初始化液晶子程序*/
{unsigned int i; Lcd_wc=SYSTEM_SET; wait();
for(i=0;i<8;i++)/* Systab[]=0x30,0x87,
0x07,0x27,0x42,0xf0,0x28,0*/
{ Lcd_wd=Systab[i];wait();}Lcd_wc=
SCROLL; wait();
for(i=0;i<10;i++) /*Scrtab[]=0,0,
0xf0,0,0x40,0xf0,0,0x80,0,0x00*/
{Lcd_wd=Scrtab[i];wait(); Lcd_wc=
HDOT_SCR; wait(0;
Lcd_wd=0x00; wait();Lcd_wc=OVLAY;
wait();Lcd_ wd=0x08;wait();
Lcd_Clear(0,0x8000,0x00); /* 清顯示區(qū)子程序*/
Lcd_wc=DISP_ON; wait();Lcd_wd=
0x54;wait(); /*0x54*/
Lcd_wc=CSRFORM;wait();Lcd_wd=0x07;
wait();
Lcd_wd=0x87;wait();
Lcd_wc=CSRDIR_DW;wait();