1.0 OLED
此圖轉載優信電子
有機發光二極管(OrganicLight-Emitting Diode,OLED),又稱為有機電激光顯示、有機發光半導體(OrganicElectroluminesence Display,OLED),是指有機半導體材料和發光材料在電場驅動下,通過載流子注入和復合導致發光的現象。本篇通過0.96寸OLED包采用I2C軟串口示例程序演示。
1.1產品特性:
OLED(Organic Light-Emitting Diode):有機發光二極管又稱為有機電激光顯示,OLED顯示技術具有自發光的特性,采用非常薄的有機材料涂層和玻璃基板,當有電流通過時,這些有機材料就會發光,而且OLED顯示屏幕可視角度大,功耗低。OLED由于同時具備自發光、不需背光源(只上電是不會亮的,驅動程序和接線正確才會點亮)、對比度高、厚度薄、視角廣、反應速度快、可用于撓曲面板、使用溫度范圍廣、結構及制程簡單等優異之特性。最先接觸的12864屏都是LCD的,需要背光,功耗較高,而OLED的功耗低,更加適合小系統;由于兩者發光材料的不同,在不同的環境中,OLED的顯示效果更佳。模塊供電可以是3.3V也可以是5V,不需要修改模塊電路,OLED屏具有多個控制指令,可以控制OLED的亮度、對比度、開關升壓電路等指令。操作方便,功能豐富。可顯示漢字、ASClI、圖案等。同時為了方便應用在產品上,預留4個M3固定孔,方便用戶固定在機殼上。
1.2產品參數:
1、高分辨率:128*64(和12864LCD相同分辨率,但該OLED屏的單位面積像素點多)
2、超廣可視角度:大于160°
3、超低功耗:正常顯示時0.06W
4、寬供電范圍:直流3.3V-5V
5、工業級:工作溫度范圍-30℃~70℃
6、體積小:27mm27mm2mm
7、通信方式:l2C
8:、亮度、對比度可以通過程序指令控制
9:、使用壽命不少于16000小時
2. RT-theard配置
2.1 硬件需求
1、需要0.96寸I2C驅動的OLED屏幕進行動態顯示, SDA---p511(p50b);SCL---p512(p50c) ,公式首先將p去掉還有三位,以p511為例,最后轉換的數字為 “(5x16x16)+(1x10)+1”算出來為 1291 轉換為16進制為0x50b。注:在程序里的話需要將字符轉為數字。
實現功能:
OLED屏幕;畫直線、矩形框、畫圓、畫光標、字體。
板載按鍵中斷交互,LED3 1Hz頻閃。
ssd1306屏幕地址看電阻接線情況為:0x3c(后面需要用到)
2、RA6M4開發板
3、USB下載線,ch340串口和附帶6根母母線,rx---p613;tx---p614
2.2 軟件配置
Renesas RA6M4開發板環境配置參照:【基于 RT-Thread Studio的CPK-RA6M4 開發板環境搭建】
1、新建項目RA6M4-IIC工程
2、點擊RT-theard Setting,在軟件包下添加軟件包,然后搜索ssd相關軟件支持包,點擊添加即可,然后出現對應包。
3、配置ssd306,右鍵選擇配置項
4、在軟件包中配置上述地址0x3c,開啟示例
5、在硬件中,啟動I2C,設置端口
6、全部保存剛剛的配置,更新當前配置文件
保存完是灰色,沒有保存是藍色。
3. 代碼分析
1、剛剛加載軟件包在packages文件夾下,示例代碼為
ssd1306_tests.c
/*
* Copyright (c) 2020, RudyLo
#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(3000);
ssd1306_TestBorder();
ssd1306_TestFonts();
rt_thread_mdelay(3000);
ssd1306_Fill(Black);
ssd1306_TestRectangle();
ssd1306_TestLine();
rt_thread_mdelay(3000);
ssd1306_Fill(Black);
ssd1306_TestPolyline();
rt_thread_mdelay(3000);
ssd1306_Fill(Black);
ssd1306_TestArc();
rt_thread_mdelay(3000);
ssd1306_Fill(Black);
ssd1306_TestCircle();
rt_thread_mdelay(3000);
}
#ifdef FINSH_USING_MSH
MSH_CMD_EXPORT(ssd1306_TestAll, test ssd1306 oled driver);
#endif
2、此庫包含畫直線(ssd1306_TestPolyline();)、矩形框(ssd1306_TestRectangle();)、畫圓(ssd1306_TestCircle();)、畫光標(ssd1306_TestArc();)、字體(ssd1306_TestFonts();)。調用時直接在串口CMD命令輸入“ssd1306_TestAll”,即可查看對應切換。
3、main.c文件在re_gen文件夾下,主程序圍繞“hal_entry();”函數(在src文件夾)
main.c
/* generated main source file - do not edit */
#include "hal_data.h"
int main(void) {
hal_entry();
return 0;
}
hal_entry.c
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-10-10 Sherman first version
* 2021-11-03 Sherman Add icu_sample
*/
#include
#include "hal_data.h"
#include
#define LED3_PIN BSP_IO_PORT_01_PIN_06
#define USER_INPUT "P105"
void hal_entry(void)
{
rt_kprintf("
Hello RT-Thread!
");
while (1)
{
rt_pin_write(LED3_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED3_PIN, PIN_LOW);
rt_thread_mdelay(500);
}
}
void irq_callback_test(void *args)
{
rt_kprintf("
IRQ00 triggered
");
}
void icu_sample(void)
{
/* init */
rt_uint32_t pin = rt_pin_get(USER_INPUT);
rt_kprintf("
pin number : 0x%04X
", pin);
rt_err_t err = rt_pin_attach_irq(pin, PIN_IRQ_MODE_RISING, irq_callback_test, RT_NULL);
if(RT_EOK != err)
{
rt_kprintf("
attach irq failed.
");
}
err = rt_pin_irq_enable(pin, PIN_IRQ_ENABLE);
if(RT_EOK != err)
{
rt_kprintf("
enable irq failed.
");
}
}
MSH_CMD_EXPORT(icu_sample, icu sample);
4. 下載驗證
1、編譯重構
編譯成功
2、下載程序
下載成功
3、CMD串口調試
然后板載復位
輸入:ssd1306_TestAll,開始顯示!
審核編輯:湯梓紅
-
OLED
+關注
關注
119文章
6213瀏覽量
224478 -
I2C
+關注
關注
28文章
1494瀏覽量
124099 -
Renesas
+關注
關注
0文章
1757瀏覽量
22833 -
開發板
+關注
關注
25文章
5093瀏覽量
97802 -
RA6M4
+關注
關注
0文章
51瀏覽量
469
發布評論請先 登錄
相關推薦
評論