陳海峰,陳盛闖
(華南農(nóng)業(yè)大學珠江學院,廣東廣州510900)
基于單片機的OLED顯示系統(tǒng)設(shè)計與實現(xiàn)
陳海峰,陳盛闖
(華南農(nóng)業(yè)大學珠江學院,廣東廣州510900)
為了提高圖形信息的顯示速度,并得到更多的顯示效果,文章基于FG_V1.2單片機開發(fā)板,依據(jù)OLED12864顯示屏的操作時序要求,用51單片機實現(xiàn)了基于0.96英寸OLED屏的顯示系統(tǒng)設(shè)計。經(jīng)實際測試表明,其具有比12864LCD模塊更快的刷新速度和更好的顯示效果。
單片機;OLED;顯示屏;12864LCD
OLED(Organic Light Emitting Display)顯示技術(shù)是比液晶顯示技術(shù)更為先進的新一代平板顯示技術(shù),其被業(yè)界公認為是繼LCD、PDP之后最理想和最具發(fā)展前景的第三代顯示技術(shù)。相比于液晶顯示技術(shù),其具有超輕薄、高亮度、廣視角、自發(fā)光、響應(yīng)快、抗震強、功耗低、適應(yīng)溫度范圍寬,可實現(xiàn)柔性顯示等優(yōu)越性能,有“夢幻顯示器”的美譽[1],可廣泛應(yīng)用于通信、計算機、消費電子、工業(yè)應(yīng)用、商業(yè)、交通等領(lǐng)域[2]。在顯示輸出方面,目前主要采用3種方式,即:圖形、數(shù)字或?qū)S梅枺谇度胧筋I(lǐng)域,顯示常采用LED、數(shù)碼管及液晶顯示器[3]。前兩種實現(xiàn)簡單,但顯示內(nèi)容不夠豐富。LCD顯示器雖能顯示較為豐富的內(nèi)容,但其響應(yīng)慢(出現(xiàn)殘像),且亮度相對較低。OLED則響應(yīng)較快,其響應(yīng)速度可達液晶的1000倍以上[4],且OLED無需背光,亮度高,在功耗、視角等方面也均優(yōu)于LCD顯示器,鑒于此,OLED顯示屏越來越廣泛地應(yīng)用在日常生活當中。
該文以宏晶公司的STC89C52單片機為控制核心,信意電子科技提供的0.96寸OLED模塊為顯示輸出設(shè)備,在Keil環(huán)境下編寫OLED顯示模塊驅(qū)動程序,并下載Hex文件至單片機,從而實現(xiàn)OLED顯示系統(tǒng)設(shè)計。
文中所采用的OLED模塊具有和12864LCD相同的分辨率,但其在單位面積上具有更多的像素點。該模塊的驅(qū)動芯片是SSD1306Z,它是一款專門用于驅(qū)動OLED點陣屏的COMS芯片,其包含128個段和64個公共端。為了能夠通過外部控制器向其寫入用于顯示的數(shù)字信息,其對外提供了8個數(shù)據(jù)引腳和5個控制腳,并向用戶提供了4種總線接口。文中所采用的OLED模塊可實現(xiàn)SPI和IIC兩種總線接口模式,默認為SPI模式。在SPI模式下,僅有數(shù)據(jù)引腳的低2位和控制引腳的CS#,D/C#和RES#與單片機進行接口。為了能讓OLED具有豐富的顯示效果和靈活簡便的操作方式,SSD1306Z向用戶提供了豐富的操作指令集,另外還向用戶提供了128×64位的GDDRAM(Graphic Display Data RAM)。由于所采用的OLED不帶字庫,因此無論是顯示圖形還是顯示漢字,均需通過取模軟件進行編碼,然后按SPI協(xié)議,將對應(yīng)的編碼按照所確定的地址模式寫入對應(yīng)的GDDRAM中。編碼原理如圖1所示。圖1給出了16*8編碼格式的字符‘A',由于8行為一頁,因此其占據(jù)2頁的高度,而寬度則占據(jù)8列。圖1中的每一個方格代表一位,若要顯示則置1,反之置0。向GDDRAM當中送數(shù)據(jù)時,先通過指令確定操作所需的地址模式及存儲器的地址,然后先寫‘A'的第2頁的編碼,再寫其第3頁的編碼,即可完成編碼的寫入操作。圖1所對應(yīng)的編碼為0x00,0x00,0xe0,0x9c,0xf0,0x80,0x00,0x00,0x08,0x0f,0x08,0x00,0x00,0x0b,0x0e,0x08,編碼時高位在下,低位在上。同理,可得對任意漢字的編碼。
操作時序為IC芯片的可靠工作提供了正確的節(jié)拍,因此操作時序正確與否將直接影響芯片的工作狀態(tài),文中OLED模塊默認工作方式為4線SPI,其操作時序如圖2所示。圖2上部分為操作一位對應(yīng)的時序,下部分為操作一個字節(jié)所對應(yīng)的時序,由圖2可知當發(fā)送一個字節(jié)時,先發(fā)該字節(jié)的最高位,最后發(fā)最低位。
圖1 OLED字符編碼Fig.1OLED character code
圖2 4線SPI操作時序圖Fig.2Timimg of 4-SPI
圖2中,CS#為OLED片選信號線,低電平有效,在芯片有效后,可通過拉低或拉高D/C#來決定是進行命令寫入操作還是進行數(shù)據(jù)寫入操作,在時鐘SCLK拉高之前建立D/C#信號,其建立時間為tAS,SDIN在SCLK低電平有效,并在SCLK上升沿時進行數(shù)據(jù)的讀取,數(shù)據(jù)保持時間為tDHW,之后可發(fā)生數(shù)據(jù)交換,為下次數(shù)據(jù)讀取作準備。圖2中具體的時序特性如表1所示。
表1 4線SPI時序特性Tab.1 Timing character of 4-SPI
表1給出了正確實現(xiàn)OLED操作的時序要求,由表1可知時間參數(shù)的最小值均小于1 μs。文中控制器選用的是STC89C52,采用12 M晶振時機器周期為1 μs,因此,只需讓STC89C52按上圖時序順序執(zhí)行程序,則其操作過程便可完全滿足4線SPI操作的時序要求。
要使OLED正確顯示出所需的信息,除了在其運行過程中嚴格按時序進行操作外,在起動時還要滿足一定的上電順序,之后還要對其進行相應(yīng)的初始化。OLED的上電順序如圖3所示。
圖3 OLED上電時序圖Fig.3Power on timing of OLED
圖3中,在VDD得電并穩(wěn)定后,RES#引腳被拉低并維持低電平至少3 μs(t1),然后再接其拉高,從而實現(xiàn)芯片復(fù)位。在芯片完成復(fù)位后,VCC上電。在VCC穩(wěn)定之后,可發(fā)送0XAF命令開顯示,而OLED的段和公共端(SEG/COM)則需再延遲100 ms,方可得電。按此可得對應(yīng)的軟件實現(xiàn)為:
void PowerOn(void)
{
unsigned char i;
LED_SCL=1;
LED_RST=0;//復(fù)位引腳電平拉低
for(i=0;i<100;i++)
{
_nop_();//從上電到開始初始化要有足夠的時間,等待RC復(fù)位完畢
}
LED_RST=1;//一段時間后復(fù)位引腳電平拉高,完成芯片復(fù)位
}
OLED按圖3完成正確的上電之后,需對SSD1306Z進行相應(yīng)的初始化方可使其正常運行。OLED軟件初始化過程為[5]:void Init_OLED()
{
Write_Command(0xAE);//關(guān)顯示
Write_Command(0xD5);//設(shè)置顯示時鐘分頻率和振蕩器頻率
Write_Command(0x80);
Write_Command(0xA8);//倍頻率為63
Write_Command(0x3F);
Write_Command(0xD3);//設(shè)置顯示偏移量
Write_Command(0x00);//不發(fā)生偏移,即在坐標原點
Write_Command(0x40);//設(shè)置為第0行
Write_Command(0x8D);//電荷泵設(shè)置
Write_Command(0x14);//使能電荷泵
Write_Command(0xA1);//OLED列重映射
Write_Command(0xC8);//重映射模式,從COM[N-1]掃描到COM0
Write_Command(0xDA);//COM引腳硬件配置
Write_Command(0x12);//替換COM端引腳配置,禁止COM端左/右間重映射
Write_Command(0x81);//進行對比度設(shè)置
Write_Command(0xCF);//設(shè)置對比度等級
Write_Command(0xD9);//設(shè)置預(yù)充電周期
Write_Command(0xF1);
Write_Command(0xDB);//取消Vvcomh電平等級的選擇
Write_Command(0x40);//設(shè)置顯示起始行為第0行
Write_Command(0xA4);//恢復(fù)RAM內(nèi)容顯示
Write_Command(0xA6);//設(shè)置為正常顯示模式
Write_Command(0xAF);//開顯示
}
按照圖2時序圖要求,發(fā)送一個字節(jié)命令的函數(shù)實現(xiàn)如下:
void Write_Command(unsigned char cmd)
{
unsigned char i=8;
LED_DC=0;//D/C#拉低,進行命令寫操作
LED_SCL=0;//SCLK信號拉低,為數(shù)據(jù)交換做準備
while(i--)
{
if(cmd&0x80)//將數(shù)據(jù)按從高位到低位的順序依次發(fā)送
OLED_SDA=1;
else
OLED_SDA=0;
OLED_SCL=1;//上升沿讀取SDA
OLED_SCL=0;//SCLK引腳電平拉低,高電平維持1μs,滿足時序要求
cmd<<=1;
}
}
同理可知,若將D/C#引腳電平拉高,則可得到發(fā)送一個字節(jié)數(shù)據(jù)的函數(shù)實現(xiàn)。
硬件基于自主開發(fā)的FG_V1.2開發(fā)板,核心控制芯片為宏晶公司LQFP-44封裝的貼片STC89C52單片機,OLED的時鐘引腳SCLK(D0)與單片機的P16引腳進行接口,數(shù)據(jù)引腳SDA(D1)與單片機的P17引腳進行接口,控制腳RST#與單片機的P36引腳進行接口,D/C#引腳與單片機的P37引腳進行接口,片選信號CS#已接至地。具體的硬件接口電路如圖4所示。
圖4 OLED與單片機接口電路Fig.4Interface between OLED and MCU
SSD1306Z驅(qū)動芯片為OLED提供了豐富的指令集,可以使OLED在實現(xiàn)數(shù)據(jù)顯示的同時,還能具有多種顯示效果(如反白、漸變、閃爍等)和動態(tài)效果(如左移、右移、斜角斜屏、動態(tài)區(qū)域設(shè)置等)[6]。具體顯示效果如圖5所示。
圖5 OLED實物顯示效果Fig.5Display effect of OLED
圖5為OLED模塊在STC89C52單片機控制下的幾種顯示效果。(a)為靜態(tài)顯示效果,(b)為反白顯示效果,反白后通過相機可見屏幕當中有動態(tài)黑色條紋,這是因為反白顯示時出現(xiàn)了串擾(Crosstalk)現(xiàn)象,而這種現(xiàn)象被相機捕獲到了,人眼觀察是不存在動態(tài)黑色條紋的。(c)為區(qū)域動態(tài)效果,屏幕漢字部分設(shè)置為靜態(tài),而網(wǎng)址部分設(shè)置為連續(xù)右移的動態(tài)效果。由此可見,OLED相對比LCD顯示,其具有更豐富的顯示效果。
文中通過STC89C52單片機對OLED顯示模塊進行了驅(qū)動,實驗表明,其不僅硬件接口簡單,而且在軟件實現(xiàn)上極具靈活性,模塊驅(qū)動芯片SSD1306Z包含豐富指令集,不僅簡化了軟件實現(xiàn),而且豐富了顯示效果。相比于同分辨率的12864LCD模塊,OLED顯示模塊小巧精致,刷新速度快,顯示效果豐富,成本相對也較低,是12864LCD模塊的理想替代產(chǎn)品。隨著OLED技術(shù)的發(fā)展,相信顯示技術(shù)必將發(fā)展到一個新的階段。
[1]田朝勇.OLED技術(shù)及其在中國的產(chǎn)業(yè)化之中[C]//成都:第三屆國際化工新材料(成都)峰會,2010:29.
[2]梁燕,胡浩,盧益民.OLED顯示模塊與C8051F單片機的接口設(shè)計[J].單片機與嵌入式應(yīng)用,2006(1):48-54. LIANG Yan,HU hao,LU Yi-min.The interface design of OLED display module and C8051F MCU[J].Application of MCU and Embedded System,2006(1):48-54.
[3]黃杰勇.基于CPLD實現(xiàn)LCD1602顯示設(shè)計[J].科技創(chuàng)新導(dǎo)報,2013(4):83-85. HUANG Jie-yong.Design of LCD1602 display system based CPLD[J].Science and Technology Iinnovation Herald,2013(4):83-85.
[4]劉輝.OLED驅(qū)動控制電路的研究[D].北京:中國科學院大學,2004.
[5]樂得瑞.產(chǎn)品說明書(OLED顯示模塊)[EB/OL].(2012-6). http://www.legenclary.nel.cn/ntml/product/OLED/.
[6]晶奧科技.SSD1306預(yù)知信息[EB/OL].(2010,8).http:// lcdsoc.com/.
Design and implementation of OLED display system based on MCS-51 MCU
CHEN Hai-feng,CHEN Sheng-chuang
(Zhujiang College of South China Agricultural University,Guangzhou 510900,China)
In order to improve the display speed of image,and get more display effect,a 0.96 inch OLED display system was designed according to timing diagram of OLED12864 display module based on FG_V1.2 development kits.The actual test shows that OLED has faster refresh rate and better display effect than 12864LCD module.
MCU;OLED;display;12864LCD
TN409
A
1674-6236(2015)20-0137-04
2015-01-12稿件編號:201501081
陳海峰(1985—),男,河南洛陽人,碩士研究生。研究方向:工業(yè)控制及嵌入式系統(tǒng)。