有機(jī)發(fā)光顯示器(OLED)是以有機(jī)電致發(fā)光材料為基礎(chǔ)的新一代平板顯示技術(shù),,與傳統(tǒng)的顯示技術(shù)相比,,Oled具有更薄更輕,、主動(dòng)發(fā)光(不需要背光源),、廣視角、高清晰,、快速響應(yīng),、低能耗、耐低溫和抗震性能優(yōu)異,、潛在的低制造成本及柔性與環(huán)保設(shè)計(jì)等顯示器件制造所要求的幾乎所有優(yōu)異性能,,因而被廣泛應(yīng)用在消費(fèi)電子、醫(yī)療,、汽車,、電力、能源,、工控等領(lǐng)域的人機(jī)界面中,。
維信諾公司專業(yè)從事OLED顯示器的研發(fā)和制造,于2003年將OLED產(chǎn)品推向市場(chǎng),,是中國(guó)大陸第一家批量生產(chǎn)和銷售OLED屏體及模塊產(chǎn)品的公司,。維信諾公司根據(jù)市場(chǎng)需求的變化,不斷進(jìn)行技術(shù)創(chuàng)新和產(chǎn)品升級(jí),,推出了一系列的OLED顯示模塊,,并針對(duì)各種領(lǐng)域客戶提供多種解決方案。維信諾公司自主研發(fā)的 OLED產(chǎn)品具有一定的行業(yè)代表性,,備受業(yè)界客戶的關(guān)注,。本文將主要介紹維信諾公司的VGG12864G系列產(chǎn)品,并給出51單片機(jī)控制OLED的應(yīng)用實(shí)例,。
VGG12864G是顯示容量為128列×64行的單色,、字符、圖形OLED顯示模塊,,接口電路簡(jiǎn)單,,使用方便。該模塊具有如下特點(diǎn)128×64像素點(diǎn)陣,,綠光,;內(nèi)置128×64位顯示RAM,每一位對(duì)應(yīng)一個(gè)像素狀態(tài),;IntEL 8080或Motorola 6800 8bit數(shù)據(jù)總線接口或串行接口,;Solomon SSD1305 OLED驅(qū)動(dòng)器,推薦邏輯電壓為+3V±10%,;驅(qū)動(dòng)電壓+9V~+12V,;工作溫度-40度~+80度,;低功耗:≦80mW。
圖1:OLED模塊邏輯電路和應(yīng)用接口框圖,。
圖1為模塊邏輯電路和應(yīng)用接口框圖。用戶只需要給接口提供電源,、理解SSD1305的顯示緩存RAM特性及其指令系統(tǒng),,并利用MCU模擬產(chǎn)生匹配的驅(qū)動(dòng)指令和顯示DATA信號(hào),就能點(diǎn)亮OLED屏,。從圖中可以看出,,OLED模塊的外部應(yīng)用接口就是SSD1305 IC,其定義如下:
由于SSD1305 IC支持6800與8080總線接口,,并提供自定義的串行接口模式,,因此,VGG12864G OLED模塊很容易嵌入到多種單片機(jī)系統(tǒng)中,,如8051 AVR DSP ARM MSP等。
圖2:采用80C51單片機(jī)驅(qū)動(dòng)VGG12864G模塊的參考電路原理圖,。
0C51在國(guó)內(nèi)有廣泛的客戶群體,隨著半導(dǎo)體技術(shù)的日新月異,,眾多知名廠商紛紛推出速度更快,,集成度更高,性能強(qiáng)大的增強(qiáng)型單片機(jī),。下面以美國(guó)STC公司的STC89LE516RD+ MCU為例,,介紹80C51單片機(jī)驅(qū)動(dòng)VGG12864G模塊方案。圖2為其參考電路原理圖,,圖3為VGG12864G應(yīng)用接口時(shí)序,。

圖3:SSD1305 8080總線模式,。

初始化:
//程序流程圖
底層驅(qū)動(dòng)代碼:
寫指令:
void write_command(uchar command)
{
DC = 0;
_nop_ ();
P1 = command;
_nop_ ();
CS = 0;
_nop_ ();
OLED_WR = 0;
_nop_ ();
OLED_WR = 1;
_nop_ ();
CS = 1;
_nop_ ();
}
寫顯示數(shù)據(jù):
void write_data(uchar data_bak)
{
DC = 1;
_nop_ ();
P1 = data_bak;
_nop_ ();
CS = 0;
_nop_ ();
OLED_WR = 0;
_nop_ ();
OLED_WR = 1;
_nop_ ();
CS = 1;
_nop_ ();
}
顯示一幅圖畫:
void oled_display(uchar picture[]) //picture[]是一幅圖片的數(shù)據(jù)
{
uchar j;
for(page=0;page<8;page++)
{
write_command(0xB0+page); //set page address
write_command(0x00); //set low address
write_command(0x10); //set higher address
for(j=0;j<128;j++)
{
write_data(picture[j+page*128]); //送數(shù)據(jù)到顯存
}
}
}