一.硬件介绍:
由于笔者这里只有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.效果显示:
另外笔者这里就不介绍怎么用U8g2库显示中文了网上有太多案例了传送门