基于80C51微處理器的OLED模塊設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
有機(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),是中國大陸第一家批量生產(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模塊的參考電路原理圖。
80C51在國內(nèi)有廣泛的客戶群體,隨著半導(dǎo)體技術(shù)的日新月異,眾多知名廠商紛紛推出速度更快,集成度更高,性能強(qiáng)大的增強(qiáng)型單片機(jī)。下面以美國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ù)到顯存
}
}
}