Arduino OLED顯示實習

學習如何學習!

OLED

設備與材料

個人電腦 × 1
arduino Uno × 1
OLED 128*64 × 1
連接線 若干

實體接線圖

驅動程式

使用 U8Glib 函式庫 本站下載 (1.19.1) GitHub下載

OLED 螢幕座標

使用的oled螢幕解析度為128×64,水平128點,垂直64點,oled螢幕座標(x,y),左上(0,0),右上(127,0),左下(0,63),右下(127,63)

參考程式1

//使用 U8glib
#include "U8glib.h" 

//OLED 初使化設定
//目前OLED常用驅動晶片有 SSD1306 或 SH1106 

//SSD1306
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0);

//SH1106
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0);

float i=20.5;

void setup(void)
{
    //設定字型
    u8g.setFont(u8g_font_unifont);
}
void loop(void)
{
    //顯示
    u8g.firstPage(); //開始更新顯示內容
    do {
        draw();
    } while (u8g.nextPage());//完成更新顯示內容
    
    delay(50);
}
void draw(void)
{

    //輸出字串(x座標,y座標,文字)
    u8g.drawStr(20, 40, "Hello World.");
    //設定 print()指令  在 x=5 y=20 開始往上往右顯示
    u8g.setPrintPos(5,20);
    //在顯示位置 顯示變數 i 的內容(1位小數)      
    u8g.print(i,1);
}

U8G 指令介紹

setFont(const u8g_fntpgm_uint8_t *font)

例: u8g.setFont(u8g_font_unifont); //設定顯示字型為 u8g_font_unifont

其它可用字型如下
u8g_font_courR10 (9 pixel)
u8g_font_unifont (10 pixel)
u8g_font_timR10 (11 pixel)
u8g_font_helvR12 (12 pixel)
u8g_font_timR14 (13 pixel)
u8g_font_helvR14 (14 pixel)
u8g_font_timR18 (17 pixel)
u8g_font_ncenR18 (18 pixel)
u8g_font_osr21 (21 pixel)


drawStr(u8g_uint_t x, u8g_uint_t y, const char *s)

例: u8g.drawStr(5,20,”ABC”) //在 x=5 y=20的地方顯示 ABC


setPrintPos(u8g_uint_t x, u8g_uint_t y)

例: u8g.setPrintPos(5,20); //設定 print()指令 在 x=5 y=20 開始往上往右顯示


print()

例: u8g.print(2) //在顯示位置 顯示整數2
例: u8g.print(i) //在顯示位置 顯示變數 i 的內容
例: u8g.print(i,1) //在顯示位置 顯示變數 i 的內容(1位小數)
例: u8g.print(“i”) //在顯示位置 顯示文字 i


drawBitmapP(u8g_uint_t x, u8g_uint_t y, u8g_uint_t cnt, u8g_uint_t h, const uint8_t *bitmap)

bitmap陣列x,y 開始往下往右顯示 cnt 個8位元 寬和 h

參數

x:x座標
y:y座標
cnt:寬(以8位元為單位)
h:高
*bitmap:要顯示圖片的陣列

const uint8_t rook_bitmap[] U8G_PROGMEM = {
  B00000000, // 0 不顯示 1 顯示 
  B01010101,
  B01111111,
  B00111110,
  B00111110, 
  B00111110,
  B00111110, 
  B01111111
};

void draw(void) { 
  u8g.drawBitmapP( 0, 0, 1, 8, rook_bitmap);
}

drawXBMP(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, const uint8_t *bitmap)

XBM 格式的 bitmap 陣列x,y 開始往下往右顯示 wh

參數

x:x座標
y:y座標
w:寬
h:高
*bitmap:要顯示圖片的陣列 XBM 格式
註:
XBM 格式和 一般 bitmap格式不同
u8g.drawBitmapP 指令的 bitmap 是從高位元往低位元顯示
u8g.drawXBMP 指令的 bitmap 是從低位元往高位元顯示

const uint8_t rook_bitmap[] U8G_PROGMEM = {
  B00000000, // 0 不顯示 1 顯示 
  B01010101,
  B01111111,
  B00111110,
  B00111110, 
  B00111110,
  B00111110, 
  B01111111
};

void draw(void) { 
  u8g.drawXBMP( 0, 0, 8, 8, rook_bitmap);
}

參考程式2

//
//  圖片顯示
//

//使用 U8glib
#include "U8glib.h" 

//OLED 初使化設定
//目前OLED常用驅動晶片有 SSD1306 或 SH1106 

//SSD1306
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0);

//SH1106
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0);

const uint8_t rook_bitmap[] U8G_PROGMEM = {
  B00000000, 
  B01010101,
  B01111111,
  B00111110,
  B00111110, 
  B00111110,
  B00111110, 
  B01111111
};

void setup(void)
{
    //設定字型
    u8g.setFont(u8g_font_unifont);
}
void loop(void)
{
    //顯示
    u8g.firstPage(); //開始更新顯示內容
    do {
        draw();
    } while (u8g.nextPage());//完成更新顯示內容
    
    delay(100);
}
void draw(void)
{
    //輸出圖片(x座標,y座標,寬度,高度,圖片陣例)  從 x,y座標往下往右顯示
    u8g.drawBitmapP( 0, 0, 1, 8, rook_bitmap);
    
    //輸出圖片(x座標,y座標,寬度,高度,圖片陣例)  從 x,y座標往下往右顯示
    u8g.drawXBMP( 0, 20, 8, 8, rook_bitmap);
}

中文顯示

無法直接顯示中文,請將中文字轉成圖片的方式顯示。下列連結,可以線上將中文轉成圖檔陣列。

TTL 字型轉換

入門
知識
語法
流程
函式
實習

發佈留言