基于LPC2138的VGS12864E程序設計

發(fā)布時(shí)間:2010-8-5 10:04    發(fā)布者:lavida
關(guān)鍵詞: LPC2138 , VGS12864E , 程序設計
ARM處理器憑借其強大的功能、極低的功耗、較小的封裝廣泛應用于門(mén)禁、無(wú)線(xiàn)抄表、智能溫控等小型系統中,在這些系統中人機交互界面一般由LCD完成,但是通常LCD在顯示亮度、環(huán)境適應等方面存在缺陷,所以越來(lái)越多新技術(shù)新產(chǎn)品逐漸出現,OLED就是一種。本文介紹了一種基于OLED顯示器VGS12864E的結構原理,給出了其在A(yíng)RM7微處理器LPC2138系統應用中的硬件連接和具體程序設計。   

系統簡(jiǎn)述   

LPC2138簡(jiǎn)介   

LPC2138是基于支持實(shí)時(shí)仿真嵌入式跟蹤的32/16 位ARM7TDMI-S CPU 的微控制器,帶有512 KB高速Flash和32KB的SRAM。128位寬度的存儲器接口和獨特的加速結構使32 位代碼能夠在最大時(shí)鐘速率下運行。對代碼規模有嚴格控制的應用可使用16 位Thumb模式將代碼規模降低超過(guò)30%,而性能的損失卻很小。

LPC2138內含2個(gè)32位定時(shí)器、2個(gè)10位8路ADC、10位DAC、PWM通道和47個(gè)GPIO以及多達9個(gè)邊沿或電平觸發(fā)的外部中斷,它還具有多個(gè)串口,包括2個(gè)16C550工業(yè)標準UART、2個(gè)高速I(mǎi) 2 C接口(400kbit/s)、SPITM和SSP(具有緩沖功能,數據長(cháng)度可變)。

較小的封裝和極低的功耗使LPC2138可理想地用于工業(yè)控制和醫療等小型系統中,如訪(fǎng)問(wèn)控制和POS機、通信網(wǎng)關(guān)、協(xié)議轉換器、軟modem、聲音辨別和低端成像等等。   

VGS12864E結構原理   

VGS12864E是128列×64行點(diǎn)陣單色OLED圖形字符顯示模塊,由于其采用有機發(fā)光技術(shù),無(wú)需背光源,所以與傳統LCD相比在陽(yáng)光照射下更能呈現清晰的圖像和數據,另外它還具有高亮度、高對比度、寬視角、低驅動(dòng)電壓和高發(fā)光效率等優(yōu)越的特性,較寬的溫度范圍(存儲溫度:?30℃"80℃,工作溫度:?20℃"70℃)也能適應更惡劣的環(huán)境。

VGS12864E使用兩片列驅動(dòng)控制器,分別驅動(dòng)1-64列和65-128列和一片有64行輸出的行驅動(dòng)器,內藏64×64顯示數據RAM,RAM中每位數據對應屏上一個(gè)點(diǎn)的亮、暗,其結構如圖1所示:它把一個(gè)半屏分成了按行的八頁(yè),因為每個(gè)字節的數據按低位(LSB)在上,高 位(MSB)在下的結構排列,所以在提取字庫的時(shí)候,需要設置取字模的方式為:縱向取模,字節倒序。

系統硬件結構   

VGS12864E共有20個(gè)引腳,功能定義如表2,它與LPC2138的連接如圖2所示。盡管LPC2138的I/O口可以承受5V的輸入電壓,但是其輸出的高電平電壓不能驅動(dòng)VGS12864,所以在它們中間需要加一個(gè)電平轉換芯片。本系統電平轉換采用IDT74FCT164245T芯片,它是基于高速CMOS技術(shù)的16位3.3V到5V的雙向轉換口(其中P1.28口負責數據方向的控制)。

程序設計  

對VGS12864E的各種操作都是通過(guò)其指令系統完成的,通過(guò)控制腳的高低電平和數據口的數據來(lái)完成各種操作。顯示時(shí)一般需要設置列地址和頁(yè)地址,然后進(jìn)行相應的讀寫(xiě)操作(在寫(xiě)操作前都要讀“忙”狀態(tài)),最后根據需要進(jìn)行相應的循環(huán)。在同頁(yè)內,列地址在執行完讀寫(xiě)操作后自動(dòng)加一。   

本文程序有如下宏定義:

#define uint32 unsigned int
#define uint16 unsigned short
#define uchar unsigned char
#define DIS_DIR 1讀“忙”狀子程序   

在對VGS12864E的各種寫(xiě)操作執行之前都需要進(jìn)行讀“忙”操作,防止在“忙”狀態(tài)下“寫(xiě)”操作的不正確執行,程序代碼如下:   

void read_status()   
{ uchar busy;   
uchar temp;
IOCLR0 = DIS_DI; //選擇"指令"寄存器
IOSET0 = DIS_RW; //選擇"讀"操作
IOCLR1 = DIS_DIR; //控制電平轉換方向
do
{ IOPIN0 = (IOPIN0 & 0xFFFFFF00) | 0xff;
IOSET0 = DIS_E;
busy=(IOPIN0 & 0xff);
IOCLR0 = DIS_E; //使能操作
temp=busy & 0x80;
}while(temp!=0); //忙則繼續循環(huán)
IOSET1 = DIS_DIR; //控制電平轉換方向   
}   

寫(xiě)指令子程序   
// 對左半屏寫(xiě)指令操作,右半屏操作只需要改變片選電平(DIS_CS1、DIS_CS2)   
void wr_command1()   
{   
IOCLR1 = DIS_CS1; //選擇左半屏
IOSET0 = DIS_CS2;
read_status(); //讀"忙"狀態(tài)
IOSET0 = DIS_DI; //選擇"寫(xiě)"操作
IOCLR0 = DIS_RW; //選擇"指令"寄存器
IOPIN0 = (IOPIN0 & 0xFFFFFF00) | com; //送指令
IOSET0 = DIS_E; //使能操作
IOCLR0 = DIS_E;   
}   

寫(xiě)數據子程序   
//對左半屏寫(xiě)數據操作,右半屏操作只需要改變片選電平(DIS_CS1、DIS_CS2)   
void wr_data1()
{   
IOCLR1 = DIS_CS1; //選擇左半屏
IOSET0 = DIS_CS2;
read_status(); //讀"忙"狀態(tài)
IOSET0 = DIS_DI; //選擇"寫(xiě)"操作
IOCLR0 = DIS_RW; //選擇"數據"寄存器
IOPIN0 = (IOPIN0 & 0xFFFFFF00) | dat;//送數據
IOSET0 = DIS_E; //使能操作
IOCLR0 = DIS_E;   
}   

其他子程序   
//OLED初始化子程序
void init_OLED()
{   
com =0xc0; //第"0"行開(kāi)始顯示
wr_command1();
wr_command2();
com =0x3f; //打開(kāi)OLED顯示
wr_command1();
wr_command2();   
}   

//清屏程序
void clear_prog(void)
{   
for(i=0;idat=0x00;
wr_data1();//寫(xiě)RAM都為0,這樣完成清屏
}
}   
}   

//漢字顯示標準函數:把屏幕分成0,1,2,3四行和64列進(jìn)行漢字的顯示,每個(gè)漢字占兩//行,字庫數據通過(guò)指針進(jìn)行傳遞   
void display(uchar hang,uchar lie,uchar *p_dis_data)
{   
for(page=hang;page}   

結束語(yǔ)   

VGS12864E使用簡(jiǎn)單,而且相對LCD可以適應惡劣的環(huán)境,所以在工業(yè)控制、軍事等方面都有廣泛應用。由于需要通過(guò)字模軟件設計界面,增強設計靈活性的同時(shí)也提高了設計復雜界面的難度,而且生成字庫需要占用大量存儲空間。而LPC2138是基于A(yíng)RM7核心的微控制器,配合VGS12864E可以組成非常通用的小型顯示控制系統。
本文地址:http://selenalain.com/thread-19322-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页