一.硬體介紹:
由於筆者這裡只有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庫顯示中文了網上有太多案例了傳送門