AB32VG1開發(fā)板外設(shè)資源豐富,此次來分享一下AB32VG1開發(fā)板驅(qū)動(dòng)OLED屏的具體步驟。板上預(yù)留了IIC接口,可通過杜邦線連接IIC接口的OLED模塊,連接好OLED模塊后進(jìn)行軟件上的設(shè)置。
![pYYBAGHRtZmAYu-CAAL2_npQrkM546.png](http://file.elecfans.com/web2/M00/2B/64/pYYBAGHRtZmAYu-CAAL2_npQrkM546.png)
打開“RT Thread setting”點(diǎn)擊添加按鈕,搜索框輸入“SSD1306”
![poYBAGHRusWAZY9yAAHtUVvdrXI506.png](http://file.elecfans.com/web2/M00/2B/5F/poYBAGHRusWAZY9yAAHtUVvdrXI506.png)
組件成功添加,,如下圖所示:
![poYBAGHRvF2ABo48AACNMglSjZ4927.png](http://file.elecfans.com/web2/M00/2B/5F/poYBAGHRvF2ABo48AACNMglSjZ4927.png)
點(diǎn)擊右鍵,選擇詳細(xì)配置,軟件包選項(xiàng)卡配置如下:
![poYBAGHRvTqAJ0aZAADa0jFn4vw934.png](http://file.elecfans.com/web2/M00/2B/5F/poYBAGHRvTqAJ0aZAADa0jFn4vw934.png)
硬件選項(xiàng)使能IIC接口
![pYYBAGHRvXGAb3RRAABwcJSOiC0539.png](http://file.elecfans.com/web2/M00/2B/64/pYYBAGHRvXGAb3RRAABwcJSOiC0539.png)
然后保存所勾選的配置,這樣成功得將SSD1306模塊所封裝的庫(kù)函數(shù)添加進(jìn)工程中,所在目錄“RT-ThreadStudio\workspace\open_OLED\packages\ssd1306-latest”
![poYBAGHRwG-AVHktAABznv21lxM576.png](http://file.elecfans.com/web2/M00/2B/5F/poYBAGHRwG-AVHktAABznv21lxM576.png)
加載完成后,可以查看驅(qū)動(dòng)SSD1306的源代碼
#include
#include
#include
#include
#include
#include "ssd1306.h"
#include "ssd1306_tests.h"
void ssd1306_TestBorder()
{
ssd1306_Fill(Black);
uint32_t start = rt_tick_get();
uint32_t end = start;
uint8_t x = 0;
uint8_t y = 0;
do {
ssd1306_DrawPixel(x, y, Black);
if((y == 0) && (x < 127))
x++;
else if((x == 127) && (y < 63))
y++;
else if((y == 63) && (x > 0))
x--;
else
y--;
ssd1306_DrawPixel(x, y, White);
ssd1306_UpdateScreen();
rt_thread_mdelay(5);
end = rt_tick_get();
} while((end - start) < 8000);
rt_thread_mdelay(1000);
}
void ssd1306_TestFonts()
{
ssd1306_Fill(Black);
ssd1306_SetCursor(2, 0);
ssd1306_WriteString("Font 16x26", Font_16x26, White);
ssd1306_SetCursor(2, 26);
ssd1306_WriteString("Font 11x18", Font_11x18, White);
ssd1306_SetCursor(2, 26+18);
ssd1306_WriteString("Font 7x10", Font_7x10, White);
ssd1306_SetCursor(2, 26+18+10);
ssd1306_WriteString("Font 6x8", Font_6x8, White);
ssd1306_UpdateScreen();
}
void ssd1306_TestFPS()
{
ssd1306_Fill(White);
uint32_t start = rt_tick_get();
uint32_t end = start;
int fps = 0;
char message[] = "ABCDEFGHIJK";
ssd1306_SetCursor(2,0);
ssd1306_WriteString("Testing...", Font_11x18, Black);
do {
ssd1306_SetCursor(2, 18);
ssd1306_WriteString(message, Font_11x18, Black);
ssd1306_UpdateScreen();
char ch = message[0];
memmove(message, message+1, sizeof(message)-2);
message[sizeof(message)-2] = ch;
fps++;
end = rt_tick_get();
} while((end - start) < 5000);
rt_thread_mdelay(1000);
char buff[64];
fps = (float)fps / ((end - start) / 1000.0);
snprintf(buff, sizeof(buff), "~%d FPS", fps);
ssd1306_Fill(White);
ssd1306_SetCursor(2, 18);
ssd1306_WriteString(buff, Font_11x18, Black);
ssd1306_UpdateScreen();
}
void ssd1306_TestLine()
{
ssd1306_Line(1,1,SSD1306_WIDTH - 1,SSD1306_HEIGHT - 1,White);
ssd1306_Line(SSD1306_WIDTH - 1,1,1,SSD1306_HEIGHT - 1,White);
ssd1306_UpdateScreen();
return;
}
void ssd1306_TestRectangle()
{
uint32_t delta;
for(delta = 0; delta < 5; delta ++)
{
ssd1306_DrawRectangle(1 + (5*delta),1 + (5*delta) ,SSD1306_WIDTH-1 - (5*delta),SSD1306_HEIGHT-1 - (5*delta),White);
}
ssd1306_UpdateScreen();
return;
}
void ssd1306_TestCircle()
{
uint32_t delta;
for(delta = 0; delta < 5; delta ++)
{
ssd1306_DrawCircle(20* delta+30, 30, 10, White);
}
ssd1306_UpdateScreen();
return;
}
void ssd1306_TestArc()
{
ssd1306_DrawArc(30, 30, 30, 20, 270, White);
ssd1306_UpdateScreen();
return;
}
void ssd1306_TestPolyline()
{
SSD1306_VERTEX loc_vertex[] =
{
{35,40},
{40,20},
{45,28},
{50,10},
{45,16},
{50,10},
{53,16}
};
ssd1306_Polyline(loc_vertex,sizeof(loc_vertex)/sizeof(loc_vertex[0]),White);
ssd1306_UpdateScreen();
return;
}
void ssd1306_TestAll()
{
ssd1306_Init();
ssd1306_TestFPS();
rt_thread_mdelay(1000);
ssd1306_TestBorder();
ssd1306_TestFonts();
rt_thread_mdelay(1000);
ssd1306_Fill(Black);
ssd1306_TestRectangle();
ssd1306_TestLine();
rt_thread_mdelay(1000);
ssd1306_Fill(Black);
ssd1306_TestPolyline();
rt_thread_mdelay(1000);
ssd1306_Fill(Black);
ssd1306_TestArc();
rt_thread_mdelay(1000);
ssd1306_Fill(Black);
ssd1306_TestCircle();
rt_thread_mdelay(1000);
}
#ifdef FINSH_USING_MSH
MSH_CMD_EXPORT(ssd1306_TestAll, test ssd1306 oled driver);
#endif
編譯完成后,使用“Downloader.exe”下載器按照如下圖所示的步驟,將生成的.dcf文件下載進(jìn)開發(fā)板中
![pYYBAGHRxQaAMhgxAAL_7xedxhQ833.png](http://file.elecfans.com/web2/M00/2B/64/pYYBAGHRxQaAMhgxAAL_7xedxhQ833.png)
終端中輸入“ssd1306_TestAll”,即可啟動(dòng)檢測(cè)OLED模塊的線程,檢測(cè)的效果如下:
![pYYBAGHRydiAeU5sAH72Co5DlmM826.png](http://file.elecfans.com/web2/M00/2B/64/pYYBAGHRydiAeU5sAH72Co5DlmM826.png)
此次體驗(yàn)了RT- Thread Studio的強(qiáng)大便捷之處,支持的軟件包組件更方便了IDE的外設(shè)驅(qū)動(dòng),的確不錯(cuò)。
-
OLED
+關(guān)注
關(guān)注
119文章
6221瀏覽量
224946 -
接口
+關(guān)注
關(guān)注
33文章
8718瀏覽量
152032 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5137瀏覽量
98344 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1306瀏覽量
40437 -
中科藍(lán)訊
+關(guān)注
關(guān)注
9文章
57瀏覽量
9939
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
RISC-V架構(gòu)開發(fā)板AB32VG1測(cè)評(píng)之GPIO點(diǎn)燈
![RISC-V架構(gòu)<b class='flag-5'>開發(fā)板</b><b class='flag-5'>AB32VG1</b>測(cè)評(píng)<b class='flag-5'>之</b>GPIO點(diǎn)燈](https://file.elecfans.com//web2/M00/1A/36/pYYBAGF6CWOAGB2VAAplT4lxPAM885.png)
RTT大賽作品:AB32VG1開發(fā)板OLED顯示實(shí)驗(yàn)
![<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b>:<b class='flag-5'>AB32VG1</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>OLED</b>顯示實(shí)驗(yàn)](https://file.elecfans.com/web2/M00/1B/88/pYYBAGGE5W6ANiFfAADG95L24Nc028.png)
【RTT大賽作品連載】中科藍(lán)訊AB32VG1開發(fā)板開箱篇
![【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】中科藍(lán)訊<b class='flag-5'>AB32VG1</b><b class='flag-5'>開發(fā)板</b>開箱篇](https://file.elecfans.com//web2/M00/1C/FD/pYYBAGGOg5-AaQa2AA-J9MBxhQg611.png)
【文章連載】RT-Thread創(chuàng)新應(yīng)用大賽文章匯總
【RTT大賽作品連載】AB32VG1開發(fā)板OLED顯示實(shí)驗(yàn)
如何在AB32VG1開發(fā)板OLED顯示使開發(fā)板上電
![如何在<b class='flag-5'>AB32VG1</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>OLED</b>顯示使<b class='flag-5'>開發(fā)板</b>上電](https://file.elecfans.com/web2/M00/1B/C3/poYBAGGIhYeAEHu7AAAtezY1WBA572.png)
評(píng)論