ARM處理器憑借其強(qiáng)大的功能、極低的功耗、較小的封裝廣泛應(yīng)用于門禁、無線抄表、智能溫控等小型系統(tǒng)中,在這些系統(tǒng)中人機(jī)交互界面一般由LCD完成,但是通常LCD在顯示亮度、環(huán)境適應(yīng)等方面存在缺陷,所以越來越多新技術(shù)新產(chǎn)品逐漸出現(xiàn),OLED就是一種。本文介紹了一種基于OLED的顯示器VGS12864E的結(jié)構(gòu)原理,給出了其在ARM7微處理器LPC2138系統(tǒng)應(yīng)用中的硬件連接和具體程序設(shè)計(jì)。 系統(tǒng)簡述 LPC2138簡介 LPC2138是基于支持實(shí)時仿真和嵌入式跟蹤的32/16 位ARM7TDMI-S CPU 的微控制器,帶有512 KB高速Flash和32KB的SRAM。128位寬度的存儲器接口和獨(dú)特的加速結(jié)構(gòu)使32 位代碼能夠在最大時鐘速率下運(yùn)行。對代碼規(guī)模有嚴(yán)格控制的應(yīng)用可使用16 位Thumb模式將代碼規(guī)模降低超過30%,而性能的損失卻很小。 LPC2138內(nèi)含2個32位定時器、2個10位8路ADC、10位DAC、PWM通道和47個GPIO以及多達(dá)9個邊沿或電平觸發(fā)的外部中斷,它還具有多個串口,包括2個16C550工業(yè)標(biāo)準(zhǔn)UART、2個高速I 2 C接口(400kbit/s)、SPITM和SSP(具有緩沖功能,數(shù)據(jù)長度可變)。 較小的封裝和極低的功耗使LPC2138可理想地用于工業(yè)控制和醫(yī)療等小型系統(tǒng)中,如訪問控制和POS機(jī)、通信網(wǎng)關(guān)、協(xié)議轉(zhuǎn)換器、軟modem、聲音辨別和低端成像等等。 VGS12864E結(jié)構(gòu)原理 VGS12864E是128列×64行點(diǎn)陣單色OLED圖形字符顯示模塊,由于其采用有機(jī)發(fā)光技術(shù),無需背光源,所以與傳統(tǒng)LCD相比在陽光照射下更能呈現(xiàn)清晰的圖像和數(shù)據(jù),另外它還具有高亮度、高對比度、寬視角、低驅(qū)動電壓和高發(fā)光效率等優(yōu)越的特性,較寬的溫度范圍(存儲溫度:?30℃"80℃,工作溫度:?20℃"70℃)也能適應(yīng)更惡劣的環(huán)境。 VGS12864E使用兩片列驅(qū)動控制器,分別驅(qū)動1-64列和65-128列和一片有64行輸出的行驅(qū)動器,內(nèi)藏64×64顯示數(shù)據(jù)RAM,RAM中每位數(shù)據(jù)對應(yīng)屏上一個點(diǎn)的亮、暗,其結(jié)構(gòu)如圖1所示:它把一個半屏分成了按行的八頁,因?yàn)槊總字節(jié)的數(shù)據(jù)按低位(LSB)在上,高 位(MSB)在下的結(jié)構(gòu)排列,所以在提取字庫的時候,需要設(shè)置取字模的方式為:縱向取模,字節(jié)倒序。 系統(tǒng)硬件結(jié)構(gòu) VGS12864E共有20個引腳,功能定義如表2,它與LPC2138的連接如圖2所示。盡管LPC2138的I/O口可以承受5V的輸入電壓,但是其輸出的高電平電壓不能驅(qū)動VGS12864,所以在它們中間需要加一個電平轉(zhuǎn)換芯片。本系統(tǒng)電平轉(zhuǎn)換采用IDT74FCT164245T芯片,它是基于高速CMOS技術(shù)的16位3.3V到5V的雙向轉(zhuǎn)換口(其中P1.28口負(fù)責(zé)數(shù)據(jù)方向的控制)。 程序設(shè)計(jì) 對VGS12864E的各種操作都是通過其指令系統(tǒng)完成的,通過控制腳的高低電平和數(shù)據(jù)口的數(shù)據(jù)來完成各種操作。顯示時一般需要設(shè)置列地址和頁地址,然后進(jìn)行相應(yīng)的讀寫操作(在寫操作前都要讀“忙”狀態(tài)),最后根據(jù)需要進(jìn)行相應(yīng)的循環(huán)。在同頁內(nèi),列地址在執(zhí)行完讀寫操作后自動加一。 本文程序有如下宏定義: #define uint32 unsigned int #define uint16 unsigned short #define uchar unsigned char #define DIS_DIR 1讀“忙”狀子程序 在對VGS12864E的各種寫操作執(zhí)行之前都需要進(jìn)行讀“忙”操作,防止在“忙”狀態(tài)下“寫”操作的不正確執(zhí)行,程序代碼如下: void read_status() { uchar busy; uchar temp; IOCLR0 = DIS_DI; //選擇"指令"寄存器 IOSET0 = DIS_RW; //選擇"讀"操作 IOCLR1 = DIS_DIR; //控制電平轉(zhuǎn)換方向 do { IOPIN0 = (IOPIN0 & 0xFFFFFF00) | 0xff; IOSET0 = DIS_E; busy=(IOPIN0 & 0xff); IOCLR0 = DIS_E; //使能操作 temp=busy & 0x80; }while(temp!=0); //忙則繼續(xù)循環(huán) IOSET1 = DIS_DIR; //控制電平轉(zhuǎn)換方向 } 寫指令子程序 // 對左半屏寫指令操作,右半屏操作只需要改變片選電平(DIS_CS1、DIS_CS2) void wr_command1() { IOCLR1 = DIS_CS1; //選擇左半屏 IOSET0 = DIS_CS2; read_status(); //讀"忙"狀態(tài) IOSET0 = DIS_DI; //選擇"寫"操作 IOCLR0 = DIS_RW; //選擇"指令"寄存器 IOPIN0 = (IOPIN0 & 0xFFFFFF00) | com; //送指令 IOSET0 = DIS_E; //使能操作 IOCLR0 = DIS_E; } 寫數(shù)據(jù)子程序 //對左半屏寫數(shù)據(jù)操作,右半屏操作只需要改變片選電平(DIS_CS1、DIS_CS2) void wr_data1() { IOCLR1 = DIS_CS1; //選擇左半屏 IOSET0 = DIS_CS2; read_status(); //讀"忙"狀態(tài) IOSET0 = DIS_DI; //選擇"寫"操作 IOCLR0 = DIS_RW; //選擇"數(shù)據(jù)"寄存器 IOPIN0 = (IOPIN0 & 0xFFFFFF00) | dat;//送數(shù)據(jù) IOSET0 = DIS_E; //使能操作 IOCLR0 = DIS_E; } 其他子程序 //OLED初始化子程序 void init_OLED() { com =0xc0; //第"0"行開始顯示 wr_command1(); wr_command2(); com =0x3f; //打開OLED顯示 wr_command1(); wr_command2(); } //清屏程序 void clear_prog(void) { for(i=0;idat=0x00; wr_data1();//寫RAM都為0,這樣完成清屏 } } } //漢字顯示標(biāo)準(zhǔn)函數(shù):把屏幕分成0,1,2,3四行和64列進(jìn)行漢字的顯示,每個漢字占兩//行,字庫數(shù)據(jù)通過指針進(jìn)行傳遞 void display(uchar hang,uchar lie,uchar *p_dis_data) { for(page=hang;page} 結(jié)束語 VGS12864E使用簡單,而且相對LCD可以適應(yīng)惡劣的環(huán)境,所以在工業(yè)控制、軍事等方面都有廣泛應(yīng)用。由于需要通過字模軟件設(shè)計(jì)界面,增強(qiáng)設(shè)計(jì)靈活性的同時也提高了設(shè)計(jì)復(fù)雜界面的難度,而且生成字庫需要占用大量存儲空間。而LPC2138是基于ARM7核心的微控制器,配合VGS12864E可以組成非常通用的小型顯示控制系統(tǒng)。 |