OLED是單片機開發中一個比較常用的外設,其像素位128X64。
OLED一般有兩種驅動方式,IIC驅動或者SPI驅動,本文采用IIC驅動的方式。
一、硬件連接
![poYBAGGrAE2AB-nXAABwDOEQodo187.png](http://file.elecfans.com/web2/M00/23/3A/poYBAGGrAE2AB-nXAABwDOEQodo187.png)
SCL — PE3
SDA — PE2
二、創建工程
1. 工程創建可以直接參考官方的文檔,工程創建好了之后打開RT-ThreadSettings,添加軟件包ssd1306。
![pYYBAGGq_rCADzkNAAF8Dau8ryc462.png](http://file.elecfans.com/web2/M00/23/41/pYYBAGGq_rCADzkNAAF8Dau8ryc462.png)
2. 右鍵單擊ssd1306,點擊詳細配置,勾選ssd1306所有選項
![poYBAGGq_wCAfj0cAAB7ilY3mgM571.png](http://file.elecfans.com/web2/M00/23/3A/poYBAGGq_wCAfj0cAAB7ilY3mgM571.png)
![poYBAGGq_8iAVFigAABdVfSUVcc845.png](http://file.elecfans.com/web2/M00/23/3A/poYBAGGq_8iAVFigAABdVfSUVcc845.png)
4.然后編譯,下載在msh命令中斷數據ssd1306_TestAll就可以打開測試程序看到OLED測試效果。
三、修改代碼
上面的代碼可以操作OLED顯示英文字母以及數字,但是顯示不了圖片以及文字,這部分功能需要我們自行添加。下面將詳細介紹如何添加我們自己的中文字符顯示程序以及16X16,24X24,48X48,64X64像素(其他像素的圖片可以根據需要自行修改)的圖片顯示程序。
在applications目錄下創建五個文件分別為:
![pYYBAGGrBRCALg1vAABYre8ks54601.png](http://file.elecfans.com/web2/M00/23/42/pYYBAGGrBRCALg1vAABYre8ks54601.png)
1. 創建OLED線程
static void OLED_ThreadManage(void)
{
rt_thread_t oled_thread;
oled_thread = rt_thread_create("OLED Thread Manage", /*線程名字*/
OLED_ManageEntry, /*線程入口函數*/
RT_NULL, /*線程入口函數參數*/
4096, /*線程棧大小*/
8, /*線程優先級*/
10); /*線程時間片*/
rt_thread_startup (oled_thread);
}
2. 初始化線程,將OLED_AppInit()放在main函數的while循環之前進行初始化。
void OLED_AppInit(void)
{
OLED_ThreadManage();
}
3. 編寫漢字顯示函數。
1)顯示原理
漢字顯示需要先使用專門的取模工具進行取模,然后調用ssd1306的畫點函數ssd1306_DrawPixel()來在OLED的指定位置畫上點來實現顯示漢字的效果,取模軟件使用PCtoLCD2002 OLED取模工具,可以自行在網上下載。
2)取模方式選擇,選擇陰碼,逐列式,順向,我們的漢字顯示函數也將根據這個方式來編寫程序。
![pYYBAGGrBF2AGF1pAAK5lsW8eR8440.png](http://file.elecfans.com/web2/M00/23/42/pYYBAGGrBF2AGF1pAAK5lsW8eR8440.png)
3)輸入漢字,點擊生成字幕,復制生成的字幕到工程中codetab.h中
![poYBAGGrBMeAG6j9AAKXX6IA8GY953.png](http://file.elecfans.com/web2/M00/23/3B/poYBAGGrBMeAG6j9AAKXX6IA8GY953.png)
代碼如下:
const unsigned char Hz[][16] ={
{0x00,0x80,0x01,0x00,0x06,0x00,0x1F,0xFF,0xE0,0x00,0x02,0x08,0x04,0x30,0x18,0xC0},
{0xF0,0x02,0x10,0x01,0x13,0xFE,0x10,0x00,0x10,0x80,0x14,0x60,0x18,0x18,0x00,0x00},/*"你",0*/
{0x08,0x02,0x08,0x44,0x0F,0xA8,0xF8,0x10,0x08,0x68,0x0F,0x86,0x00,0x00,0x01,0x00},
{0x41,0x02,0x41,0x01,0x47,0xFE,0x49,0x00,0x51,0x00,0x61,0x00,0x01,0x00,0x00,0x00},/*"好",1*/
{0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",2*/
{0x04,0x00,0x04,0x00,0x04,0x00,0x7F,0xFE,0x04,0x02,0x04,0x02,0xFF,0xE2,0x04,0x22},
{0x04,0x22,0x04,0x22,0xFF,0xE2,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x00,0x00,0x00},/*"世",3*/
{0x00,0x10,0x00,0x10,0x00,0x20,0x7F,0x21,0x49,0x46,0x49,0x78,0x49,0x80,0x7F,0x00},
{0x49,0x80,0x49,0x7F,0x49,0x40,0x7F,0x20,0x00,0x20,0x00,0x10,0x00,0x10,0x00,0x00},/*"界",4*/
};
4)函數顯示函數如下,使用ssd1306_DrawPixel(x, y, White)來畫點:
static void OLED_DrawHz(uint8_t x,
uint8_t y,
uint8_t chr,
SSD1306_COLOR color)
{
uint8_t temp,t,t1;
uint8_t y0=y;
uint8_t csize=32u;
chr <<= 1u;
for(t=0; t {
if(t == 16u)
chr += 1;
temp=(White == color) ? (Hz[chr][t%16]):(~Hz[chr][t%16]);
// temp=Hz[chr][t];
for(t1=0;t1<8;t1++)
{
if(temp&0x80)
ssd1306_DrawPixel(x, y, White);
temp<<=1;
y++;
if((y-y0) == 16)
{
y=y0;
x++;
break;
}
}
}
}
6)編寫漢字顯示函數,在OLED顯示線程的Entry函數中編寫漢字顯示函數
static void OLED_ManageEntry(void *parameter)
{
ssd1306_Init(); /*IIC and OLED initial*/
OLED_DrawHz(0, 24, 0, White); /*0 - 你*/
OLED_DrawHz(16, 24, 1, White); /*1 - 好*/
OLED_DrawHz(32, 24, 2, White); /*2 - ,*/
OLED_DrawHz(48, 24, 3, White); /*3 - 世*/
OLED_DrawHz(64, 24, 4, White); /*4 - 界*/
ssd1306_UpdateScreen();
while(1)
{
rt_thread_mdelay(100);
}
}
四、實踐效果
完整代碼在下一篇帖子中,有需要請移步。
![pYYBAGGrCPSAdDmuAAn3aDhIPm8473.png](http://file.elecfans.com/web2/M00/23/42/pYYBAGGrCPSAdDmuAAn3aDhIPm8473.png)
五、代碼
詳細代碼請移步gitee:https://gitee.com/hehung/ab32-vg1_-rt-thread
-
單片機
+關注
關注
6043文章
44621瀏覽量
638619 -
OLED技術
+關注
關注
1文章
66瀏覽量
13352 -
OLED
+關注
關注
119文章
6220瀏覽量
224836 -
SPI
+關注
關注
17文章
1722瀏覽量
92139 -
RT-Thread
+關注
關注
31文章
1305瀏覽量
40389
發布評論請先 登錄
相關推薦
RTT大賽作品:AB32VG1開發板OLED顯示實驗
![<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b>:AB32VG1開發板<b class='flag-5'>OLED</b><b class='flag-5'>顯示</b>實驗](https://file.elecfans.com/web2/M00/1B/88/pYYBAGGE5W6ANiFfAADG95L24Nc028.png)
【RTT大賽作品連載】AB32VG1評估板到貨控制彩燈測試
![【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】AB32VG1評估板到貨控制彩燈測試](https://file.elecfans.com//web2/M00/1B/B6/poYBAGGHqjGAZgd_AAQ5JxBMxnU803.jpg)
【RTT大賽作品連載】CH32V103開發板資料及上電首測
![【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】CH32V103開發板資料及上電首測](https://file.elecfans.com//web2/M00/1D/1C/pYYBAGGRJM-AZ2EhABT6b9TfTC4677.jpg)
【RTT大賽作品連載】中科藍訊AB32VG1開發板開箱篇
![【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】中科藍訊AB32VG1開發板開箱篇](https://file.elecfans.com//web2/M00/1C/FD/pYYBAGGOg5-AaQa2AA-J9MBxhQg611.png)
評論