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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

9、塊引腳連接:之前的并接圖是相對于顯屏上的引腳,上圖的并接圖是相對于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控制程序 設置STM32與OLED模塊相連接的IO(設置與OLED相連的IO設置為輸出);初始化OLED模塊(硬復位SSD1306、驅動IC初始化程序、開啟顯、清零顯存、開始顯);通過函數(shù)將字符和數(shù)字顯到OLED模塊上。/OLED模式設置#define OLED_CMD 0 /寫命令#define OLED_DATA 1 /寫數(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、; / 設置頁地址(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ū)域的對坐標/確保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();/ 更新顯/在指定位置顯個字符,包括部分字符/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; / 調1206字體else if(size=16)temp=asc2_1608chrt; /

13、調1608字體else if(size=24)temp=asc2_2412chrt; / 調2412字體else return;/ 沒有的字庫 if(y-y0)=size)while(n-)result*=m;/x,y :起點坐標/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:起點坐標/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端時鐘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); /關閉顯OLED_WR_Byte(0 x40,OLED_CMD); / 設置顯開始 5:0,數(shù).OLED_WR_Byte(0 x12,OLED_CMD); /5:4 配置OLED_WR_Byte(0 x81,OLED_CMD); / 對度設置OLED_WR_Byte(0 xf1,OLED_CMD); /3:0,PHASE 1;7:4,PHASE 2;OLED_WR_Byte(0 xDB,OLED_CMD); /設置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); /全局顯開啟;bit0:1,開啟;0,關閉;(屏/屏)OLED_WR_Byte(0 xA6,OLED_CMD); /設置顯式;bit0:1,反相顯;0,正常顯OLED_WR_Byte(0 xAF,OLED_CMD); /開啟顯OLED_Clear(); int main(void) u8 t;t+;STM32 控制程序分析OLED_Refresh_Gram()函數(shù):更新顯存

18、到OLED。在STM32內部定義了個塊GRAM:u8 OLED_GRAM1288;此部分GRAM對應OLED模塊上的GRAM。在操作的時候,我們只需要修改STM32內部的GRAM,然后通過OLED_Refresh_Gram()函數(shù)將GRAM次性刷新到OLED的GRAM中。for(i=0;i8;i+)OLED_WR_Byte (0 xb0+i,OLED_CMD); / 設置頁地址(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ù)的具體內容先設置頁地址,然后寫列地址,然后從0開始寫128個字節(jié),這樣就將頁的內容刷新過去。重復8次,將8頁的內容全部刷新過去。OLED_WR_Byte()函數(shù):向SSD1306寫數(shù)據(jù)或命令(參數(shù)cmd為1時表數(shù)據(jù),為0時表命令)。這的步驟是和上中8080并寫時序圖的步驟基本類似。具體為: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; 先通過DATAOUT()函數(shù)將數(shù)據(jù)放到數(shù)據(jù),其中DATAOUT()是個宏定義

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

21、y/8=1(7-y%8);其中,x的取值范圍為0-127;y的取值范圍為0-63。OLED_ShowChar()函數(shù):顯字符。這的字符采16*8的顯式,也就是說在OLED上16*8數(shù)的點陣表個字符,即128個點。下截取了部分16*8的字符庫的內容,個字符16個u8類型的數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論