22.1實驗內(nèi)容
通過本實驗主要學(xué)習(xí)以下內(nèi)容:
22.2實驗原理
OLED模塊的驅(qū)動芯片為SSD1306,其顯存大小總共為128*64bit大小,SSD1306將這些顯存分為了8頁,其對應(yīng)關(guān)系如下所示:
SSD1306 的命令比較多,這里我們僅介紹幾個比較常用的命令,這些命令如下所示:
我們再來介紹一下 OLED 模塊的初始化過程,SSD1306的典型初始化框圖如下圖:
22.3硬件設(shè)計
OLED電路如下所示,該OLED驅(qū)動使用PB10和PB11引腳,本例程采用IIC的驅(qū)動方式。
22.4代碼解析
22.4.1主函數(shù)
主函數(shù)代碼如下所示,調(diào)用bsp_oled_init進(jìn)行OLED初始化,之后循環(huán)顯示圖片/字符串以及數(shù)字。
C int main(void) { delay_init(); /* 延遲函數(shù)初始化 */ BOARD_UART.uart_mode_tx=MODE_DMA; /* 配置串口為DMA模式 */ bsp_uart_init(&BOARD_UART); /* 初始化串口 */ printf("Start OLED display demo! \r\n"); /* 顯示啟動OLED顯示實驗 */ bsp_oled_init(); /* OLED初始化 */ while (1) { bsp_oled_clear(0); /* 清除顯示 */ bsp_oled_logo(0,0,128,32,gImage_juwo2); /* 顯示聚沃logo*/ delay_ms(1000); /* 延遲1000ms間隔 */ bsp_oled_clear(0); /* 清除顯示 */ bsp_oled_logo(20,0,86,64,gImage_gd_logo); /* 顯示GD logo*/ delay_ms(1000); /* 延遲1000ms間隔 */ bsp_oled_clear(0); /* 清除顯示 */ bsp_oled_showstring(20,0,(uint8_t *)"ju wo ke ji",FONT_8_16); /* 顯示聚沃科技字符串 */ bsp_oled_shownum(30,3, 1234,4,FONT_8_16); /* 顯示數(shù)字 */ delay_ms(1000); /* 延遲1000ms間隔 */ bsp_oled_clear(0); /* 清除顯示 */ } } |
22.4.2OLED初始化函數(shù)
OLED初始化函數(shù)如下,通過該函數(shù)可完成對外部OLED模塊初始化。
C void bsp_oled_init(void) { bsp_i2c_config(); /* IIC接口初始化 */ bsp_oled_write_byte(0xAE,OLED_CMD); /* 關(guān)閉oled 顯示 */ bsp_oled_write_byte(0x81,OLED_CMD); /* 設(shè)置對比度控制寄存器 */ bsp_oled_write_byte(BRIGHTNESS,OLED_CMD); /* 設(shè)置對比度, 0x00-0xff */ bsp_oled_write_byte(0xA0,OLED_CMD); /* 設(shè)置seg/row映射,row地址127映射到seg0 */ bsp_oled_write_byte(0xC0,OLED_CMD); /* 設(shè)置com/row掃描方向,從com[n-1]掃描到com0 */ bsp_oled_write_byte(0xD5,OLED_CMD); /* 設(shè)置顯示時鐘分頻比/振蕩器頻率 */ bsp_oled_write_byte(0x80,OLED_CMD); /* 分頻比為1,使用默認(rèn)的內(nèi)部時鐘*/ bsp_oled_write_byte(0xA8,OLED_CMD); /* 設(shè)置多路復(fù)用比率, 0x0f-0x3f */ bsp_oled_write_byte(0x3F,OLED_CMD); /* 1/64 占空比 */ bsp_oled_write_byte(0xD3,OLED_CMD); /* 通過com設(shè)置0d~63d的垂直偏移 */ bsp_oled_write_byte(0x00,OLED_CMD); /* 不偏移 */ bsp_oled_write_byte(0xD9,OLED_CMD); /* 設(shè)置預(yù)充電時間 */ bsp_oled_write_byte(0xF1,OLED_CMD); /* 將預(yù)充電設(shè)置為15個時鐘,將放電設(shè)置為1個時鐘 */ bsp_oled_write_byte(0xDA,OLED_CMD); /* 設(shè)置com引腳硬件配置 */ bsp_oled_write_byte(0x12,OLED_CMD); /* 順序com引腳配置和禁用com左/右重映射 */ bsp_oled_write_byte(0xDB,OLED_CMD); /* 調(diào)整Vcom調(diào)節(jié)器輸出 */ bsp_oled_write_byte(0x30,OLED_CMD); /* 設(shè)置 Vcom 為 0.83Vcc */ bsp_oled_write_byte(0x20,OLED_CMD); /* 設(shè)置存儲器尋址模式, 0x00-0x02 */ bsp_oled_write_byte(0x02,OLED_CMD); /* 頁面尋址模式 */ bsp_oled_write_byte(0x8D,OLED_CMD); /* 電荷泵設(shè)置 */ bsp_oled_write_byte(0x14,OLED_CMD); /* 使能電荷泵*/ bsp_oled_write_byte(0xA4,OLED_CMD); /* 禁用整個顯示, 0xA4 or 0xA5 */ bsp_oled_write_byte(0xA6,OLED_CMD); /* 設(shè)置正常顯示,0為OFF顯示,1為ON顯示*/ bsp_oled_write_byte(0xAF,OLED_CMD); /* 正常模式或睡眠模式, 0xAF or 0xAE */ bsp_oled_clear(0); } |
22.4.3OLED顯示圖片函數(shù)
OLED顯示圖片函數(shù)如下,其中形參說明如下:x為圖片起始地址的x坐標(biāo),y為圖片起始位置的y坐標(biāo),x_res為圖片分辨率的x軸分辨率,y_res為分辨率的y軸分辨率,比如圖片為128*32顯示,則x_res為128,y_res為32,pbuff為圖片數(shù)組的指針。
C void bsp_oled_logo(uint8_t x, uint8_t y, uint8_t x_res, uint8_t y_res, uint8_t *pbuff) { uint8_t i,n; uint8_t y_num; uint16_t pixel; pixel = x_res*y_res; if(y_res%8>0) { y_num = y_res/8 +1; }else{ y_num = y_res/8; } /* 顯示log */ for(i=0;i /* 設(shè)置頁面尋址模式的頁面起始地址(B0h~B7h) */ bsp_oled_write_byte (0xB0+i,OLED_CMD); /* 為頁面尋址模式設(shè)置低四位列起始地址(00h~0Fh) */ bsp_oled_write_byte (0x00,OLED_CMD); /* 為頁面尋址模式設(shè)置高四位列起始地址(10h~1Fh) */ bsp_oled_write_byte (0x10,OLED_CMD); /* 設(shè)置坐標(biāo) */ bsp_oled_set_pos(x,y+i); /* l傳輸圖片數(shù)據(jù) */ for(n=0;n if(i*x_res+n { bsp_oled_write_byte(pbuff[i*x_res+n],OLED_DATA); }else{ break; } } } } |
在圖片顯示的應(yīng)用中需要對圖片進(jìn)行取模,開發(fā)板配套資料中有取模軟件以及使用說明,本文檔中簡要介紹取模方法:
- 調(diào)整圖片為合適分辨率和格式
將圖片調(diào)整到合適分辨率,如果分辨率比較大的話,可以使用PS等工具,調(diào)整到128*64分辨率以內(nèi),格式的話建議調(diào)整為bmp格式文件。
- 使用取模工具進(jìn)行取模
取模可使用資料中帶的以下工具。
選擇圖片模式。
點擊文件,打開要取模的圖片,點擊選項,進(jìn)行設(shè)置。
最后點擊生成字模。
將生成的字模復(fù)制到代碼的數(shù)組中。
另外也可以對漢字和英文進(jìn)行取模,使用方法類似,可以參考資料中的說明。
22.4.4字符串顯示函數(shù)
字符串顯示函數(shù)如下所示,通過該函數(shù)可在任意起始地址顯示字符串。
C void bsp_oled_showstring(uint8_t x, uint8_t y, uint8_t *ch, oled_font size) { uint8_t j=0; while(ch[j]!='\0'){ bsp_oled_showchar(x,y,ch[j],size); x += 8; if(x>120){ x = 0; y += 2; } j++; } } |
22.5實驗結(jié)果
將本例程下載到紅楓派開發(fā)板中,并將H10跳線帽加上,上電運行后將會看到OLED屏上循環(huán)顯示聚沃科技logo、GD Logo、字符串以及數(shù)字。
本教程由GD32 MCU方案商聚沃科技原創(chuàng)發(fā)布,了解更多GD32 MCU教程,關(guān)注聚沃科技官網(wǎng)
-
OLED
+關(guān)注
關(guān)注
119文章
6111瀏覽量
222738 -
顯示
+關(guān)注
關(guān)注
0文章
424瀏覽量
45017 -
IIC
+關(guān)注
關(guān)注
11文章
291瀏覽量
38052 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
4704瀏覽量
95745 -
GD32
+關(guān)注
關(guān)注
7文章
386瀏覽量
23924
發(fā)布評論請先 登錄
相關(guān)推薦
評論