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