回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【雕爷学编程】Arduino动手做(93)--- 0.96寸OLED液晶屏模块5 中等

头像 驴友花雕 2023.07.27 37 0

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

 

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验九十三:0.96寸I2C IIC通信128*64显示器 OLED液晶屏模块
 

33.jpg

知识点:OLED(OrganicLight-Emitting Diode)
又称为有机电激光显示、有机发光半导体(OrganicElectroluminesence Display,OLED)。OLED属于一种电流型的有机发光器件,是通过载流子的注入和复合而致发光的现象,发光强度与注入的电流成正比。OLED在电场的作用下,阳极产生的空穴和阴极产生的电子就会发生移动,分别向空穴传输层和电子传输层注入,迁移到发光层。当二者在发光层相遇时,产生能量激子,从而激发发光分子最终产生可见光。一般而言,OLED可按发光材料分为两种:小分子OLED和高分子OLED(也可称为PLED)。OLED是一种利用多层有机薄膜结构产生电致发光的器件,它很容易制作,而且只需要低的驱动电压,这些主要的特征使得OLED在满足平面显示器的应用上显得非常突出。OLED显示屏比LCD更轻薄、亮度高、功耗低、响应快、清晰度高、柔性好、发光效率高,能满足消费者对显示技术的新需求。全球越来越多的显示器厂家纷纷投入研发,大大的推动了OLED的产业化进程。
 

01.jpeg

OLED特点
(1)功耗低——与LCD相比,OLED不需要背光源,而背光源在LCD中是比较耗能的一部分,所以OLED是比较节能的。例如,24in的AMOLED模块功耗仅仅为440mw,而24in的多晶硅LCD模块达到了605mw。
(2)响应速度快——OLED技术与其他技术相比,其响应速度快,响应时间可以达到微秒级别。较高的响应速度更好的实现了运动的图像。根据有关的数据分析,其响应速度达到了液晶显示器响应速度的1000倍左右。
(3)较宽的视角——与其他显示相比,由于OLED是主动发光的,所以在很大视角范围内画面是不会显示失真的。其上下,左右的视角宽度超过170度。
(4)能实现高分辨率显示——大多高分辨率的OLED显示采用的是有源矩阵也就是AMOLED,它的发光层可以是吸纳26万真彩色的高分辨率,并且随着科学技术的发展,其分辨率在以后会得到更高的提升。
(5)宽温度特性——与LCD相比,OLED可以在很大的温度范围内进行工作,根据有关的技术分析,温度在-40摄氏度到80摄氏度都是可以正常运行的。这样就可以降低地域限制,在极寒地带也可以正常使用。
(6)OLED能够实现软屏——OLED可以在塑料、树脂等不同的柔性衬底材料上进行生产,将有机层蒸镀或涂布在塑料基衬上,就可以实现软屏。
(7)OLED成品的质量比较轻——与其他产品相比,OLED的质量比较小,厚度与LCD相比是比较小的,其抗震系数较高,能够适应较大的加速度,振动等比较恶劣的环境。
 

07.jpeg

Arduino实验接线示意图

 

16.jpg
16-.jpg

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验九十三: 0.96寸I2C IIC通信128*64显示器 OLED液晶屏模块

 项目十九:OLED液晶屏显示二行数字

 实验接脚: 0.96寸OLED液晶屏SDA接A4, SCL接A5

Arduino实验开源代码


 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验九十七: 0.96寸I2C IIC通信128*64显示器 OLED液晶屏模块
  项目十九:OLED液晶屏显示二行数字
  实验接脚: 0.96寸OLED液晶屏SDA接A4, SCL接A5
*/

#include "ssd1306.h"

const uint8_t g_customFont_5x8[] PROGMEM = {
  0x00,  // 0x00 means fixed font type - the only supported by the library
  0x05,  // 0x05 = 5 - font width in pixels
  0x08,  // 0x08 = 8 - font height in pixels
  0x30,  // 0x30 = 48 - first ascii character number in the font ('0' = ascii code 48)
  // '0'
  0b00000000,
  0b00111110,
  0b01000001,
  0b01000001,
  0b00111110,
  // '1'
  0b00000000,
  0b01000010,
  0b01111111,
  0b01000000,
  0b00000000,
  0x00, // End of font
};

void setup() {
  /* Replace the line below with ssd1306_128x32_i2c_init() if you need to use 128x32 display */
  ssd1306_128x64_i2c_init();
  //    ssd1306_128x64_spi_init(3, 4, 5);
  ssd1306_fillScreen(0x00);
  ssd1306_setFixedFont( g_customFont_5x8 );
  ssd1306_printFixed (50, 12, "01100011", STYLE_NORMAL );
  ssd1306_printFixedN (50, 36, "1001", STYLE_ITALIC, FONT_SIZE_2X);
}

void loop() {
}

  项目十九:OLED液晶屏显示二行数字
 实验接脚: 0.96寸OLED液晶屏SDA接A4, SCL接A5

 实验场景图
 

48.jpg

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验九十三: 0.96寸I2C IIC通信128*64显示器 OLED液晶屏模块

 项目二十:OLED液晶满屏显示字符

 实验接脚: 0.96寸OLED液晶屏SDA接A4, SCL接A5

Arduino实验开源代码


 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验九十七: 0.96寸I2C IIC通信128*64显示器 OLED液晶屏模块
  项目二十:OLED液晶满屏显示字符
  实验接脚: 0.96寸OLED液晶屏SDA接A4, SCL接A5
*/

#include "ssd1306.h"

void setup(){
    /* Replace the line below with ssd1306_128x32_i2c_init() if you need to use 128x32 display */
    ssd1306_128x64_i2c_init();
    ssd1306_fillScreen(0x00);
    ssd1306_setFixedFont(ssd1306xled_font6x8);
    ssd1306_printFixed (0,  8, "Line 1. Normal text", STYLE_NORMAL);
    ssd1306_printFixed (0, 16, "Line 2. Bold text", STYLE_BOLD);
    ssd1306_printFixed (0, 24, "Line 3. Italic text", STYLE_ITALIC);
    ssd1306_printFixedN (0, 32, "Line 4. Double size", STYLE_BOLD, FONT_SIZE_2X);
}

void loop(){
}

  项目二十:OLED液晶满屏显示字符
  实验接脚: 0.96寸OLED液晶屏SDA接A4, SCL接A5

  实验场景图

 

49.jpg

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验九十三: 0.96寸I2C IIC通信128*64显示器 OLED液晶屏模块

项目二十一:OLED屏显示时钟

 实验接脚: 0.96寸OLED液晶屏SDA接A4, SCL接A5

Arduino实验开源代码


 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验九十七: 0.96寸I2C IIC通信128*64显示器 OLED液晶屏模块
  项目二十一:OLED屏显示时钟
  实验接脚: 0.96寸OLED液晶屏SDA接A4, SCL接A5
*/

#include "ssd1306.h"

uint32_t lastMillis;
uint8_t  hours = 19;
uint8_t  minutes = 22;
uint8_t  seconds = 0;

void printSeconds() {
  if (seconds & 1) {
    ssd1306_printFixed(54,  8, ":", STYLE_NORMAL);
  }
  else {
    ssd1306_printFixed(54,  8, " ", STYLE_NORMAL);
  }
}

void printMinutes() {
  char minutesStr[3] = "00";
  minutesStr[0] = '0' + minutes / 10;
  minutesStr[1] = '0' + minutes % 10;
  ssd1306_printFixed(78,  8, minutesStr, STYLE_NORMAL);
}

void printHours() {
  char hoursStr[3] = "00";
  hoursStr[0] = '0' + hours / 10;
  hoursStr[1] = '0' + hours % 10;
  ssd1306_printFixed(6,  8, hoursStr, STYLE_NORMAL);
}

void setup() {
  //如果您需要使用 128x32 显示,请将下面的行替换为 ssd1306_128x32_i2c_init()
  ssd1306_128x64_i2c_init();
  ssd1306_fillScreen(0x00);
  ssd1306_setFixedFont(comic_sans_font24x32_123);
  lastMillis = millis();
  printHours();
  printMinutes();
}

void loop() {
  if ((uint32_t)(millis() - lastMillis) >= 1000) {
    lastMillis += 1000;
    if (++seconds > 59)
    {
      seconds = 0;
      if (++minutes > 59)
      {
        minutes = 0;
        if (++hours > 23)
        {
          hours = 0;
        }
        printHours();
      }
      printMinutes();
    }
    printSeconds();
  }
}

  项目二十一:OLED屏显示时钟
  实验接脚: 0.96寸OLED液晶屏SDA接A4, SCL接A5

  实验场景图

 

50.jpg

评论

user-avatar
icon 他的勋章
    展开更多