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);

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.");
}

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);
}

參考程式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);
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *