eagler8 发表于 2019-8-21 18:42:08





eagler8 发表于 2019-8-21 19:08:15



0.96寸OLED模块
电压:3V~5V DC
工作温度:-30℃~70℃
驾驶义务:1/64职责
高分辨率:128 * 64
面板尺寸:26.70 * 19.26 * 1.85mm / 1.03 * 0.76 * 0.07英寸(约)
有效面积:21.74 * 11.2mm /0.86*0.44英寸(约)
驱动IC:SSD1306
128 * 64 LED显示模块,支持多种控制芯片。
完全兼容51系列,MSP430系列,STM32 / 2,CSR IC等
超低功耗:全屏点亮0.08W
超高亮度和对比度可调
带嵌入式驱动/控制器
接口类型为IIC

eagler8 发表于 2019-8-21 19:16:07



eagler8 发表于 2019-8-21 19:18:21

eagler8 发表于 2019-8-22 10:43:25

模块电原理图

eagler8 发表于 2019-8-22 10:53:03



eagler8 发表于 2019-8-22 10:54:52



eagler8 发表于 2019-8-22 10:56:59

eagler8 发表于 2019-8-22 11:43:14

/*
【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
实验九十七: 0.96寸I2C IIC通信128*64显示器 OLED液晶屏模块
安装驱动库:工具—管理库—搜索“U8glib”-下载-安装
实验接线:A4---SDA, A5---SCL
项目一:第一次点亮OLED屏
*/

#include "U8glib.h"
String i="Time:";
int s=0;//变量秒用来显示
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);      // 小E开发板上面就是用的这个

void draw() {
u8g.setFont(u8g_font_unifont); //设置字体 这句必要
u8g.drawStr( 1, 10, "Hello Eagler8!");//第一个是x第二个是y坐标
u8g.setFont(u8g_font_ncenB14);//还是先设置一个字体
u8g.setPrintPos(0,44);//然后设置一个位置
u8g.print(i);//然后就是数据
u8g.print(s);
}

void setup(void) {
}

void loop(void) {
if(s!=millis()/10)
s=millis()/10;
//上面这一句是取系统运行秒数单位ms除以1000就是秒
u8g.firstPage();
do {
    draw();
}
while( u8g.nextPage() ); //延迟一段时间后重新生成图片
delay(10);
}

eagler8 发表于 2019-8-22 12:20:20

eagler8 发表于 2019-8-22 13:26:03

/*
【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
实验九十七: 0.96寸I2C IIC通信128*64显示器 OLED液晶屏模块
安装驱动库:工具—管理库—搜索“U8glib”-下载-安装
实验接线:A4---SDA, A5---SCL
项目二:测试之1-100循环显示数字
*/

#include "U8glib.h"//加载显示库文件
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);
// I2C / TWI 实例化

void setup() {
}

void loop() {
for(int i=1;i<101;i++){
   u8g.firstPage();//一下是显示实现部分
do {
u8g.setFont(u8g_font_fub30);
//设置字体和自号,目前测试字号有fub14,17,20,30
u8g.setPrintPos(0, 50); //显示的位置
u8g.print(i);//显示变量i的值
u8g.setFont(u8g_font_fub14);//设置字体和自号
u8g.setPrintPos(95, 50); //显示的位置
u8g.print("cm");//显示cm字样
}
while( u8g.nextPage() );
delay(100);//显示的时间间隔。
}
}

eagler8 发表于 2019-8-22 16:06:45



有关OLED的两个非常重要的知识点:
其一 像素点点阵
点阵图也叫栅格图像,像素图,简单的说,就是最小单位由像素构成的图,缩放会失真。构成位图的最小单位是像素,位图就是由像素阵列的排列来实现其显示效果的,每个像素有自己的颜色信息,在对位图图像进行编辑操作的时候,可操作的对象是每个像素,我们可以改变图像的色相、饱和度、明度,从而改变图像的显示效果。举个例子来说,位图图像就好比在巨大的沙盘上画好的画,当你从远处看的时候,画面细腻多彩,但是当你靠的非常近的时候,你就能看到组成画面的每粒沙子以及每个沙粒单纯的不可变化颜色。

OLED其实就是一个M x n 的像素点阵,想显示什么就得把具体位置的像素点亮起来。对于每一个像素点,有可能是1点亮,也有可能是0点亮。

eagler8 发表于 2019-8-22 16:17:43

其二 坐标系
坐标系,是理科常用辅助方法。常见有直线坐标系,平面直角坐标系。为了说明质点的位置、运动的快慢、方向等,必须选取其坐标系。在参照系中,为确定空间一点的位置,按规定方法选取的有次序的一组数据,这就叫做“坐标”。在某一问题中规定坐标的方法,就是该问题所用的坐标系。坐标系的种类很多,常用的坐标系有:笛卡尔直角坐标系、平面极坐标系、柱面坐标系(或称柱坐标系)和球面坐标系(或称球坐标系)等。中学物理学中常用的坐标系,为直角坐标系,或称为正交坐标系。从广义上讲:事物的一切抽象概念都是参照于其所属的坐标系存在的,同一个事物在不同的作标系中就会有不同抽象概念来表示,坐标系表达的事物有联系的抽象概念的数量【既坐标轴的数量】就是该事物所处空间的维度。两件能相互改变的事物必须在同坐标系中。

在OLED坐标系中,左上角是原点,向右是X轴,向下是Y轴。

eagler8 发表于 2019-8-22 16:31:55

/*
【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
实验九十七: 0.96寸I2C IIC通信128*64显示器 OLED液晶屏模块
安装驱动库:工具—管理库—搜索“U8glib”-下载-安装
实验接线:A4---SDA, A5---SCL
项目三:将U8Glib标志放在显示屏上(Put the U8GLIB logo on the display.)
显示“Copyright (c) 2019, [email protected]
*/

#include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0);

void drawColorBox(void)
{
u8g_uint_t w, h;
u8g_uint_t r, g, b;

w = u8g.getWidth() / 32;
h = u8g.getHeight() / 8;
for ( b = 0; b < 4; b++ )
    for ( g = 0; g < 8; g++ )
      for ( r = 0; r < 8; r++ )
      {
      u8g.setColorIndex((r << 5) |(g << 2) | b );
      u8g.drawBox(g * w + b * w * 8, r * h, w, h);
      }
}

void drawLogo(uint8_t d)
{
#ifdef MINI_LOGO
u8g.setFont(u8g_font_gdr17r);
u8g.drawStr(0 + d, 22 + d, "U");
u8g.setFont(u8g_font_gdr20n);
u8g.drawStr90(17 + d, 8 + d, "8");
u8g.setFont(u8g_font_gdr17r);
u8g.drawStr(39 + d, 22 + d, "g");

u8g.drawHLine(2 + d, 25 + d, 34);
u8g.drawVLine(32 + d, 22 + d, 12);
#else
u8g.setFont(u8g_font_gdr25r);
u8g.drawStr(0 + d, 30 + d, "U");
u8g.setFont(u8g_font_gdr30n);
u8g.drawStr90(23 + d, 10 + d, "8");
u8g.setFont(u8g_font_gdr25r);
u8g.drawStr(53 + d, 30 + d, "g");

u8g.drawHLine(2 + d, 35 + d, 47);
u8g.drawVLine(45 + d, 32 + d, 12);
#endif
}

void drawURL(void)
{
#ifndef MINI_LOGO
u8g.setFont(u8g_font_4x6);
if ( u8g.getHeight() < 59 )
{
    u8g.drawStr(53, 9, "Copyright (c) 2019,");
    u8g.drawStr(77, 18, "[email protected]");
}
else
{
    u8g.drawStr(1, 54, " Copyright (c) 2019, [email protected]");
}
#endif
}


void draw(void) {
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    drawColorBox();
}
u8g.setColorIndex(1);
if ( U8G_MODE_GET_BITS_PER_PIXEL(u8g.getMode()) > 1 ) {
    drawLogo(2);
    u8g.setColorIndex(2);
    drawLogo(1);
    u8g.setColorIndex(3);
}
drawLogo(0);
drawURL();

}

void setup(void) {
}

void loop(void) {

u8g.firstPage();
do {
    draw();
    u8g.setColorIndex(1);
} while ( u8g.nextPage() );

delay(200);
}

eagler8 发表于 2019-8-22 16:37:05

页: 113 114 115 116 117 118 119 120 121 122 [123] 124 125 126 127 128 129 130 131 132
查看完整版本: 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)