• U8g2库的使用


    一.硬件介绍:

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

  • 相关阅读:
    Angular 怎么封装基础组件?
    C#的MessagePack(unity)--01
    亚马逊FBA头程物流选择注意事项有哪些?
    【剪映专业版】17高质量视频如何导出
    基于Docker_Nginx+LVS+Flask+MySQL的高可用Web集群
    openpnp - src - 配置文件载入过程的初步分析
    [Qt桌面开发]一个Qt简单界面的开发
    Day08 SSM第八次笔记---SpringBoot基础部分学习
    iOS Error Domain=PHPhotosErrorDomain Code=3300
    <git>如何快速上手并高效协同
  • 原文地址:https://www.cnblogs.com/xutongxue/p/16010430.html