U8g2库的使用
阅读原文时间:2022年03月18日阅读:1

由于笔者这里只有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库显示中文了网上有太多案例了传送门