一.硬件介绍:
由于笔者这里只有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库显示中文了网上有太多案例了传送门
发表评论