OLED顯示模塊(原理講解、STM32實(shí)例操作)_第1頁(yè)
OLED顯示模塊(原理講解、STM32實(shí)例操作)_第2頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 OLED顯模塊(原理講解、STM32實(shí)例操作)OLED的基礎(chǔ)介紹OLED的定義和優(yōu)勢(shì)OLED,即有機(jī)發(fā)光極管(Organic Light-Emitting Diode),稱(chēng)為有機(jī)電激光顯(Organic Electroluminesence Display,OELD)。OLED由于同時(shí)具備發(fā)光,不需背光源、對(duì)度、厚度薄、視、反應(yīng)速度快、可于撓曲性板、使溫度范圍、構(gòu)造及制程較簡(jiǎn)單等優(yōu)異之特性,被認(rèn)為是下代的平顯器新興應(yīng)技術(shù)。OLED顯技術(shù)具有發(fā)光的特性,采常薄的有機(jī)材料涂層和玻璃基板,當(dāng)有電流通過(guò)時(shí),這些有機(jī)材料就會(huì)發(fā)光,且OLED顯屏幕可視度,并且能夠節(jié)省電能,從2003年開(kāi)始這種顯設(shè)備在M

2、P3播放器上得到了應(yīng)。LCD都需要背光,OLED不需要,因?yàn)樗前l(fā)光的。這樣同樣的顯,OLED效果要來(lái)得好些。以前的技術(shù),OLED的尺還難以型化,但是分辨率確可以做到很。ALINETEK的0.96OLED模塊模塊有單和雙兩種可選,單為純藍(lán),雙則為黃藍(lán)雙。單模塊每個(gè)像素點(diǎn)只有亮與不亮兩種情況,沒(méi)有顏區(qū)分;尺,顯尺為0.96,模塊的尺僅為27mm*26mm;分辨率,該模塊的分辨率為128*64;多種接式,該模塊提供了總共4種接包括:6800、8080兩種并接式、 4線的穿SPI接式、IIC接式;不需要壓,直接接3.3V就可以作了。OLED模塊作模式選擇4種模式通過(guò)模塊的BS1/BS2設(shè)置(通過(guò)硬件

3、來(lái)設(shè)置),BS1/BS2的設(shè)置與模塊接模式的關(guān)系如表所:OLED四種作模式4線SPIIIC18位68008位8080000111BS20下是OLED模塊的具體實(shí)物圖:ALIENTEK OLED模塊默認(rèn)設(shè)置是BS0接GND,BS1和BS2接VCC(8080模式),即使8080并式,如果想要設(shè)置成其他的模式,則需要在OLED的背,烙鐵修改BS0-BS2的設(shè)置。從模塊的原理圖上,我們可以看到的更加清晰: 該模塊采8*2的2.52排針與外部連接,總共16個(gè)管腳,在16條線中,我們只了15條,有條是懸空的。15條線中,電源和地線占了2條,還剩下13條信號(hào)線。在不同的模式下,需要的信號(hào)線的數(shù)是不同的,在8

4、080模式下,需要全部的13條。OLED控制器為SSD1306,也就是說(shuō):裸屏由SSD1306驅(qū)動(dòng),這也是種較為泛使的led驅(qū)動(dòng)芯。OLED的顯原理OLED8080并接信號(hào)線說(shuō)明在上,提到了本中OLED采8080的接式,其對(duì)應(yīng)的并接圖如下所:接下來(lái),就對(duì)這個(gè)并接的各個(gè)信號(hào)線的含義進(jìn)解釋說(shuō)明:CS:OLED選信號(hào);WR:向OLED寫(xiě)數(shù)據(jù);RD:從OLED讀取數(shù)據(jù);D7:0:8位雙向數(shù)據(jù)線;RST(RES):硬復(fù)位OLED;DC(RS):命令/數(shù)據(jù)標(biāo)志(0,讀寫(xiě)命令;1,讀寫(xiě)數(shù)據(jù))。OLED8080并讀寫(xiě)過(guò)程模塊的8080并讀/寫(xiě)的過(guò)程為: 將數(shù)據(jù)放到數(shù)據(jù);根據(jù)要寫(xiě)/讀取的數(shù)據(jù)的類(lèi)型,設(shè)置DC(R

5、S)為(數(shù)據(jù))/低(命令);拉低選,選中SSD1306;接著我們根據(jù)是讀數(shù)據(jù),還是要寫(xiě)數(shù)據(jù)置RD/WR為低;讀數(shù)據(jù)過(guò)程:在RD的上升沿, 使數(shù)據(jù)鎖存到數(shù)據(jù)線(D7:0)上;寫(xiě)數(shù)據(jù)過(guò)程:在WR的上升沿,使數(shù)據(jù)寫(xiě)到SSD1306;拉CS和DC(RS)。并寫(xiě)時(shí)序圖并讀時(shí)序圖OLED 模塊顯存OLED本是沒(méi)有顯存的,它的顯存是依賴(lài)于SSD1306提供的(之后講解的TFTLCD是本帶顯存,利FSMC來(lái)進(jìn)控制)。SSD1306提供塊顯存,芯具體的講解見(jiàn)下。SSD1306的顯存總共為128*64bit,SSD1306將這些顯存分為了8頁(yè)。每頁(yè)包含了128個(gè)字節(jié),總共8頁(yè),這樣剛好是128*64的點(diǎn)陣。 程序

6、顯原理在STM32的內(nèi)部建個(gè)緩存(共128*8個(gè)字節(jié)),在每次修改的時(shí)候,只是修改STM32上的緩存(實(shí)際上就是SRAM),在修改完了之后,次性把STM32上的緩存數(shù)據(jù)寫(xiě)到OLED的GRAM。當(dāng)然這個(gè)法也有壞處,就是對(duì)于那些SRAM很的單機(jī)(如51系列)就較煩了。SSD1306芯SSD1306芯簡(jiǎn)介SSD1306是個(gè)單CMOS、OLED/PLED驅(qū)動(dòng)芯可以驅(qū)動(dòng)有機(jī)/聚合發(fā)光極管點(diǎn)陣圖形顯系統(tǒng)。由128 segments 和64Commons組成。該芯專(zhuān)為共陰極OLED板設(shè)計(jì)。SSD1306中嵌了對(duì)度控制器、顯RAM和晶振,并因此減少了外部器件和功耗。有256級(jí)亮度控制。數(shù)據(jù)/命令的發(fā)送有三種接

7、可選擇:6800/8000串,I2C接或SPI接。適于多數(shù)簡(jiǎn)介的應(yīng),注移動(dòng)電話的屏顯,MP3播放器和計(jì)算器等。SSD1306芯特性分辨率:128 * 64 點(diǎn)陣板;電源:1. VDD = 1.65V to 3.3V,于IC邏輯;2. VCC = 7V to 15V,于板驅(qū)動(dòng);點(diǎn)陣顯:1. OLED驅(qū)動(dòng)輸出電壓,最15V;2. Segment最電流:100uA;3. 常見(jiàn)最反向電流:15mA;4. 256級(jí)對(duì)亮度電流控制;嵌式128 * 64位SRAM顯緩存;引腳選擇MCU接:1. 8位6800/8000串;2. 3/4線SPI接;3. I2C接。SSD1306芯命令 命令0X81:設(shè)置對(duì)度。包

8、含兩個(gè)字節(jié),第個(gè)0X81為命令,隨后發(fā)送的個(gè)字節(jié)為要設(shè)置的對(duì)度的值。這個(gè)值設(shè)置得越屏幕就越亮。命令0XAE/0XAF:0XAE為關(guān)閉顯命令;0XAF為開(kāi)啟顯命令。命令0X8D:包含2個(gè)字節(jié),第個(gè)為命令字,第個(gè)為設(shè)置值,第個(gè)字節(jié)的BIT2表電荷泵的開(kāi)關(guān)狀態(tài),該位為1,則開(kāi)啟電荷泵,為0則關(guān)閉。在模塊初始化的時(shí)候,這個(gè)必須要開(kāi)啟,否則是看不到屏幕顯的。命令0XB0B7:于設(shè)置頁(yè)地址,其低三位的值對(duì)應(yīng)著GRAM的頁(yè)地址。命令0X000X0F:于設(shè)置顯時(shí)的起始列地址低四位。命令0X100X1F:于設(shè)置顯時(shí)的起始列地址四位。STM32控制OLED硬件連接單機(jī):STM32F103ZET6模塊:OLED顯模

9、塊引腳連接:之前的并接圖是相對(duì)于顯屏上的引腳,上圖的并接圖是相對(duì)于STM32的IO的圖。OLED_DC(RS):OV SCL(PD3)、OLED_CS:FIFO WRST(PD6)、OLED_ED:OV SDA(PG13)、OLED_WR:FIFORRST(PG14)、OLED_RST:FIFO OE(PG15)、OLED_D0:OV D0(PC0)、OLED_D1:OV D1(PC1)、OLED_D2:OVD2(PC2)、OLED_D3:OV D3(PC3)、OLED_D4:OV D4(PC4)、OLED_D5:OV D5(PC5)、OLED_D6:OVD6(PC6)、OLED_D7:OV

10、D7(PC7)硬件資源:指燈DS0、OLED模塊STM32控制程序 設(shè)置STM32與OLED模塊相連接的IO(設(shè)置與OLED相連的IO設(shè)置為輸出);初始化OLED模塊(硬復(fù)位SSD1306、驅(qū)動(dòng)IC初始化程序、開(kāi)啟顯、清零顯存、開(kāi)始顯);通過(guò)函數(shù)將字符和數(shù)字顯到OLED模塊上。/OLED模式設(shè)置#define OLED_CMD 0 /寫(xiě)命令#define OLED_DATA 1 /寫(xiě)數(shù)據(jù)/OLED的顯存/存放格式如下./更新顯存到LCDvoid OLED_Refresh_Gram(void)u8 i,n;for(i=0;i8;i+)OLED_WR_Byte (0 xb0+i,OLED_CMD)

11、; / 設(shè)置頁(yè)地址(07)OLED_WR_Byte (0 x00,OLED_CMD);OLED_WR_Byte (0 x10,OLED_CMD);for(n=0;n127|y63)return;/ 超出范圍了.pos=7-y/8;bx=y%8;temp=1(7-bx);if(t)OLED_GRAMxpos|=temp;else OLED_GRAMxpos&=temp;/x1,y1,x2,y2 填充區(qū)域的對(duì)坐標(biāo)/確保x1=x2;y1=y2 0=x1=127 0=y1=63/dot:0,清空;1,填充void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot)u8

12、x,y;for(x=x1;x=x2;x+)for(y=y1;y=y2;y+)OLED_DrawPoint(x,y,dot);OLED_Refresh_Gram();/ 更新顯/在指定位置顯個(gè)字符,包括部分字符/x:0127/y:063/mode:0,反顯;1,正常顯/size:選擇字體 12/16/24void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)for(t=0;tcsize;t+)if(size=12)temp=asc2_1206chrt; / 調(diào)1206字體else if(size=16)temp=asc2_1608chrt; /

13、調(diào)1608字體else if(size=24)temp=asc2_2412chrt; / 調(diào)2412字體else return;/ 沒(méi)有的字庫(kù) if(y-y0)=size)while(n-)result*=m;/x,y :起點(diǎn)坐標(biāo)/size:字體/mode:模式 0,填充模式;1,疊加模式/num:數(shù)值(04294967295);void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size)u8 t,temp;u8 enshow=0;for(t=0;tlen;t+)temp=(num/mypow(10,len-t-1)%10;if(enshow=0&t(

14、len-1)if(temp=0)else enshow=1;OLED_ShowChar(x+(size/2)*t,y,temp+0,size,1);/顯字符串/x,y:起點(diǎn)坐標(biāo)/size:字體/*p:字符串起始地址void OLED_ShowString(u8 x,u8 y,const u8 *p,u8 size)while(*p= )/ 判斷是不是法字符!if(y(64-size)y=x=0;OLED_Clear();/初始化SSD1306void OLED_Init(void) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Peri

15、ph_GPIOD|RCC_APB2Periph_GPIOG, ENABLE); /使能PC,D,G端時(shí)鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_6; /PD3,PD6 推挽輸出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; / 推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/ 速度50MHzGPIO_Init(GPIOD, &GPIO_InitStructure); / 初始化GPIOD3,6GPIO_Init(GPIOG,

16、&GPIO_InitStructure);/PG13,14,15 OUT 輸出OLED_CS=1;OLED_RS=1;OLED_WR_Byte(0 xAE,OLED_CMD); /關(guān)閉顯OLED_WR_Byte(0 x40,OLED_CMD); / 設(shè)置顯開(kāi)始 5:0,數(shù).OLED_WR_Byte(0 x12,OLED_CMD); /5:4 配置OLED_WR_Byte(0 x81,OLED_CMD); / 對(duì)度設(shè)置OLED_WR_Byte(0 xf1,OLED_CMD); /3:0,PHASE 1;7:4,PHASE 2;OLED_WR_Byte(0 xDB,OLED_CMD); /設(shè)置VC

17、OMH 電壓倍率OLED_WR_Byte(0 x30,OLED_CMD); /6:4 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;OLED_WR_Byte(0 xA4,OLED_CMD); /全局顯開(kāi)啟;bit0:1,開(kāi)啟;0,關(guān)閉;(屏/屏)OLED_WR_Byte(0 xA6,OLED_CMD); /設(shè)置顯式;bit0:1,反相顯;0,正常顯OLED_WR_Byte(0 xAF,OLED_CMD); /開(kāi)啟顯OLED_Clear(); int main(void) u8 t;t+;STM32 控制程序分析OLED_Refresh_Gram()函數(shù):更新顯存

18、到OLED。在STM32內(nèi)部定義了個(gè)塊GRAM:u8 OLED_GRAM1288;此部分GRAM對(duì)應(yīng)OLED模塊上的GRAM。在操作的時(shí)候,我們只需要修改STM32內(nèi)部的GRAM,然后通過(guò)OLED_Refresh_Gram()函數(shù)將GRAM次性刷新到OLED的GRAM中。for(i=0;i8;i+)OLED_WR_Byte (0 xb0+i,OLED_CMD); / 設(shè)置頁(yè)地址(07)OLED_WR_Byte (0 x00,OLED_CMD);OLED_WR_Byte (0 x10,OLED_CMD);for(n=0;n128;n+) OLED_WR_Byte(OLED_GRAMni,OLED

19、_DATA);函數(shù)的具體內(nèi)容先設(shè)置頁(yè)地址,然后寫(xiě)列地址,然后從0開(kāi)始寫(xiě)128個(gè)字節(jié),這樣就將頁(yè)的內(nèi)容刷新過(guò)去。重復(fù)8次,將8頁(yè)的內(nèi)容全部刷新過(guò)去。OLED_WR_Byte()函數(shù):向SSD1306寫(xiě)數(shù)據(jù)或命令(參數(shù)cmd為1時(shí)表數(shù)據(jù),為0時(shí)表命令)。這的步驟是和上中8080并寫(xiě)時(shí)序圖的步驟基本類(lèi)似。具體為:void OLED_WR_Byte(u8 dat,u8 cmd)DATAOUT(dat);OLED_RS=cmd;OLED_CS=0;OLED_WR=0;OLED_WR=1;OLED_CS=1;OLED_RS=1; 先通過(guò)DATAOUT()函數(shù)將數(shù)據(jù)放到數(shù)據(jù),其中DATAOUT()是個(gè)宏定義

20、:#define DATAOUT(x) GPIO_Write(GPIOC,x); /輸出其次,在判斷cmd參數(shù)是命令還是數(shù)據(jù),如果是命令,DC置;如果是數(shù)據(jù),DC置低。接下來(lái),拉低選,將WR拉低再拉產(chǎn)個(gè)上升沿。這樣數(shù)據(jù)就寫(xiě)到了控制器。最后,拉選、DC。OLED_DrawPoint()函數(shù):畫(huà)點(diǎn)函數(shù),這有個(gè)對(duì)應(yīng)關(guān)系需要理解。OLED_GRAM1288中的128代表列數(shù)(x坐標(biāo)),8代表的是頁(yè),每頁(yè)包含8,總共是64(y坐標(biāo))。從到低對(duì)應(yīng)數(shù)從到。如,我們要在x=100,y=29這個(gè)點(diǎn)寫(xiě)1,則可以這個(gè)句實(shí)現(xiàn):OLED_GRAM1004=12;個(gè)通的點(diǎn)(x,y)置1的表達(dá)式為:OLED_GRAMx7-

21、y/8=1(7-y%8);其中,x的取值范圍為0-127;y的取值范圍為0-63。OLED_ShowChar()函數(shù):顯字符。這的字符采16*8的顯式,也就是說(shuō)在OLED上16*8數(shù)的點(diǎn)陣表個(gè)字符,即128個(gè)點(diǎn)。下截取了部分16*8的字符庫(kù)的內(nèi)容,個(gè)字符16個(gè)u8類(lèi)型的數(shù)字表:0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,/* ,0*/0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x1F,0 xCC,0 x00,0 x0C,0 x00,0 x00,0 x00,0 x00,0 x00

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論