U8g2庫的使用

xutongxue66發表於2022-03-17

一.硬體介紹:

由於筆者這裡只有0.96寸的OLED螢幕,那就講講最常用的0.96寸OLED螢幕吧。

OLED介紹:

OLED,即有機發光二極體( Organic Light Emitting Diode)。 OLED 由於同時具備自發光,不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用於撓曲性皮膚、使用溫度範圍廣、構造及製程較簡單等優異之特性,被認為是下一代的平面顯示器新興應用技術。LCD 都需要背光,而 OLED 不需要,因為它是自發光的。這樣同樣的顯示 OLED 效果要來得好一些。以目前的技術,OLED 的尺寸還難以大型化,但是解析度確可以做到很高。在此我們使用的是0.96寸OLED螢幕,該屏有以下特點:

  • 0.96寸OLED 有黃藍,白,藍三種顏色可選;其中黃藍是屏上 1/4 部分為黃光,下 3/4 為藍;而且是固定區域顯示固定顏色,顏色和顯示區域均不能修改;白光則為純白,也就是黑底白字;藍色則為純藍,也就是黑底藍字。
  • 解析度為 128*64
  • 多種介面方式;OLED 裸屏總共種介面包括:6800、8080 兩種並行介面方式、3 線或 4 線的序列 SPI 介面方式、 IIC 介面方式(只需要 2 根線就可以控制OLED了!),這五種介面是通過屏上的BS0~BS2來配置的。
  • 開發了兩種介面的 Demo 板,介面分別為七針的 SPI/IIC 相容模組,四針的IIC 模組。兩種模組都很方便使用;希望大家根據實際需求來選擇不同的模組。

圖為筆者用OLED螢幕做的一個溫溼度和光照強度顯示後面為LCD1602螢幕

0.96寸OLED螢幕介紹:

  • 工作電壓:3V~5.5V
  • I2C介面 (位址:0x30)
  • 驅動IC:SSD1306
  • OLED螢幕分為單色和雙色兩種
  • GND 電源地
  • VCC 電源正(3~5.5V)
  • SCL OLED 的 D0 腳,在 IIC 通訊中為時鐘管腳
  • SDA OLED 的 D1 腳,在 IIC 通訊中為資料管

    和電腦顯示器一樣,OLED螢幕左上角是座標原點(0.0),水平軸座標向右增大,垂直向下增大。

二.程式介紹:

1.U8g2庫的下載:


2.U8g2庫函式:

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0 ,U8X8_PIN_NONE);
U8G2//程式庫_SSD1306//控制晶片_128X64_NONAME//解析度和型號_F//暫存區大小可以改為1,2,F  _HW_I2C//控制介面 u8g2(U8G2_R0// 代表不旋轉,U8X8_PIN_NONE//代表沒有重置引腳);
begin()//初始化
clear()//清除暫存記憶體
sendBuffer()//傳送暫存記憶體內容給顯示器,和上個指令搭配使用
enableUTF8Print()//啟用enableUTF8Print(如:中文)的字串
setFont()//設定字型
drawStr(x,y,"字串")//在座標(x,y)顯示英文字型     注意:該函式不支援顯示自制中文字
drawUTF8(x,y,"字串")//使用前必須先設定顯示字型
setCursor(x,y)//把遊標設定在座標(x,y)
print("字串")//在遊標位置顯示字型(可以用該方法顯示中文字型)

小補充:

  • 關於字型傳送門
  • 在顯示文字或者圖片時,並不會立即呈現在螢幕上,因為這些操作都是先在記憶體中組合畫面,從主記憶體中劃分出給顯示器暫存影像資料用的區域,統稱為frame buffer (影像暫存區)或簡稱暫存區(buffer)。
  • 連線介面可改用SW_I2C,代表用"software"(軟體)模凝IIC介面,除非有特殊需要,否則請採用硬體PC介面;自定義如下:
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0,19,20,U8X8_PIN_NONE);//19 SCL引腳   20  SDA引腳

3.U8g2庫使用模板:

#include <Arduino.h>
#include <U8g2lib.h>

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0 ,U8X8_PIN_NONE);

void setup() {
  u8g2.begin();//初始化
  u8g2.setFont(u8g2_font_ncenB08_tr);//設定字型
}

void loop() {


  u8g2.firstPage();
  do {
    
    u8g2.drawStr(0, 10, "Temperature");//在指定位置顯示字串
    

    
  } while ( u8g2.nextPage() );
 

4.小應用:使用螢幕顯示"hangzhou"

#include <Arduino.h>
#include <U8g2lib.h>

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0 ,U8X8_PIN_NONE);//例項化

void setup() {
  u8g2.begin();//初始化
  u8g2.setFont(u8g2_font_ncenB08_tr);//設定字型
}

void loop() {


  u8g2.firstPage();
  do {
    
    u8g2.drawStr(0, 10, "hangzhou");//在指定位置顯示字串
    

    
  } while ( u8g2.nextPage() );
}

5.效果顯示:


注意筆者這裡用的沒有重置引腳因此UNO板直接SCL,SCL相連,SDA和SDA相連
另外筆者這裡就不介紹怎麼用U8g2庫顯示中文了網上有太多案例了傳送門

相關文章