请选择 进入手机版 | 继续访问电脑版
凡是官网购买产品,均可以获得积分,(积分可以用来下载技术资料)还可以获得精致技术支持。零知实验室可提供全套电子方案定制服务,了解详情请咨询客服。           
查看: 5318|回复: 21

零知开源模块使用- OLED模块使用 SSD1306

[复制链接]

348

主题

2077

帖子

931

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
931
发表于 2018-7-4 09:19:41 | 显示全部楼层 |阅读模式
当前在很多的电子制作中都使用OLED作为屏幕输出,因此它也是很常用的一个模块,我们在这一篇中就简单介绍下它的使用。1、硬件连接
对于OLED,即使使用同一个型号的芯片不同的厂商生产出来的模块接口也是有区别的,但是大体上差异不大,主要分I2C接口的和SPI接口的OLED模块,我们这次使用的是类似I2C接口的模块,如果我们使用具体的模块时候就需要按照对应的规格书进行连接硬件。
我使用的模块连接如下:
23.png
注:这里有几个引脚为了简单直接连接到了电源和地上,没有用IO去控制。
2、程序代码
主要代码如下:(这里为了方便,已经把一些基础的功能封装到了库中,可以直接下载附录中的完整的工程文件-OLED_DEMO.zip,复制到软件库的project目录中,然后在软件中打开这个工程文件夹即可)
[C++] 纯文本查看 复制代码
/**
*    文件: OLED-TEST.ino      by 零知实验室([url=http://www.lingzhilab.com]www.lingzhilab.com[/url])
*    -- 零知开源,让电子制作变得更简单! --
*    时间: 2018/07/03 11:14
*    说明: 
**/

#include "oled_demo.h"

unsigned char  str1[] =                    
{           
0x00,0x00,0x80,0x80,0x80,0x80,0xC0,0xFC,0xF8,0xC0,0x80,0x80,0x80,0x80,0x00,0x00,
0x00,0x00,0x00,0x41,0x39,0x1F,0x1F,0x0F,0x0F,0x1F,0x1F,0x71,0x01,0x00,0x00,0x00,/*"★"*/ 
0x00,0x00,0x80,0x80,0x80,0x80,0x60,0x1C,0x38,0x40,0x80,0x80,0x80,0x80,0x00,0x00,
0x00,0x00,0x00,0x41,0x3E,0x22,0x10,0x08,0x08,0x10,0x2E,0x72,0x01,0x00,0x00,0x00,/*"☆"*/

0x00,0x00,0xC0,0x30,0x90,0xF0,0x54,0xFC,0x92,0x7A,0x08,0x08,0x28,0x10,0x00,0x00,
0x00,0x00,0x10,0x08,0x04,0x1A,0x09,0x36,0x6A,0x19,0x02,0x04,0x08,0x08,0x00,0x00,/*"零",0*/

0x00,0x00,0x00,0x00,0x3C,0xA0,0x50,0x30,0x00,0x80,0x00,0x80,0x80,0x40,0x80,0x00,
0x00,0x00,0x04,0x22,0x13,0x0E,0x09,0x09,0x01,0x03,0x0D,0x08,0x08,0x07,0x00,0x00,/*"知",1*/

0x00,0x00,0x00,0x00,0x80,0xE8,0x48,0x28,0x18,0x1C,0xE4,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0x03,0x22,0x1E,0x01,0x01,0x01,0x01,0x7F,0x01,0x01,0x00,0x00,0x00,/*"开",2*/

0x00,0x00,0x40,0x84,0x18,0x08,0xC0,0xB8,0x48,0x34,0xC4,0xA4,0xE0,0x00,0x00,0x00,
0x00,0x00,0x1F,0x7E,0x1A,0x06,0x31,0x13,0x25,0x43,0x3F,0x0B,0x10,0x30,0x00,0x00,/*"源",3*/

0x00,0x00,0x80,0x80,0x80,0x80,0x60,0x1C,0x38,0x40,0x80,0x80,0x80,0x80,0x00,0x00,
0x00,0x00,0x00,0x41,0x3E,0x22,0x10,0x08,0x08,0x10,0x2E,0x72,0x01,0x00,0x00,0x00,/*"☆"*/        
0x00,0x00,0x80,0x80,0x80,0x80,0xC0,0xFC,0xF8,0xC0,0x80,0x80,0x80,0x80,0x00,0x00,
0x00,0x00,0x00,0x41,0x39,0x1F,0x1F,0x0F,0x0F,0x1F,0x1F,0x71,0x01,0x00,0x00,0x00,/*"★"*/ 

};

uint8_t str2[] = "www.lingzhilab.com";

unsigned char str3[] = 
{
0x00,0x00,0x00,0x20,0x20,0xD8,0x56,0x48,0xF8,0x48,0x48,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0x02,0x02,0x03,0x02,0x02,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x00,/*"年",0*/

0x00,0x00,0x00,0x00,0x00,0x88,0x78,0x48,0x48,0x04,0xFC,0x0C,0x00,0x00,0x00,0x00,
0x00,0x00,0x40,0x20,0x18,0x07,0x02,0x02,0x01,0x20,0x7F,0x00,0x00,0x00,0x00,0x00,/*"月",1*/

0x00,0x00,0x00,0x00,0x30,0xD0,0x10,0x90,0x88,0x08,0xF8,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0E,0x11,0x11,0x08,0x08,0x10,0x3F,0x00,0x00,0x00,0x00,0x00,/*"日",2*/
};

#define OLED_DC 1
#define OLED_RST 0
#define OLED_SCL A5
#define OLED_SDA A4

OLED_DEMO myoled(OLED_SDA, OLED_SCL, OLED_DC, OLED_RST);

// the setup routine runs once when you press reset:
void setup() {
    // put your setup code here, to run once:
        myoled.begin();

        //显示自定义中文
        for(int i=0; i<8; i++){
                myoled.print_p16x16(i, 0, str1);//显示在第0行的第0-8列,这里一共可以显示4行
        }

        uint8_t str4[] = "2018";
        uint8_t str5[] = "7";
        uint8_t str6[] = "3";

        myoled.print_p8x16(0, 4, str4);

        myoled.print_p16x16(2, 2, str3, 0);//年

        myoled.print_p8x16(56, 4, str5);

        myoled.print_p16x16(4, 2, str3, 1);//月

        myoled.print_p8x16(86, 4, str6);

        myoled.print_p16x16(6, 2, str3, 2);//日
  
        myoled.print_p6x8(16,7,str2);//显示英文字符

          delay(2000);
}

// the loop routine runs over and over again forever:
void loop() {
    // put your main code here, to run repeatedly:


}


3、结果演示
把上面的工程进行编译后上传到零知开发板中,然后就可以看到如下OLED的界面:
12.jpg
4、自己创作
在这里我们可以直接修改上面的str1,str2...等内容,修改为自己需要的内容即可,这里说明下汉字的取模方法,先下载附件中的取模软件:PC-LCD.ZIP文件,打开后设置如下:
取字.png
然后填写你需要的汉字再取模,复制到上面的str1的数组里面,这样你就可以显示出你自己的内容了。

PC-lcd.zip

883.18 KB, 下载次数: 43, 下载积分: 积分 -5

OLED_DEMO.zip

5.74 KB, 下载次数: 67, 下载积分: 积分 -5

零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

62

主题

162

帖子

769

活跃值

高级会员

Rank: 4

活跃值
769
发表于 2018-7-18 06:15:47 | 显示全部楼层
请问这个OLED可以接5V供电吗?会烧毁吗?
共享资源,共同进步。
回复

使用道具 举报

348

主题

2077

帖子

931

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
931
 楼主| 发表于 2018-7-18 08:09:27 | 显示全部楼层
ql1983 发表于 2018-7-18 06:15
请问这个OLED可以接5V供电吗?会烧毁吗?

这个你要看你买的对应的OLED的规格书,有的是5v的标准,有的是3.3v的。
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

16

主题

56

帖子

92

活跃值

注册会员

Rank: 2

活跃值
92
发表于 2018-7-23 16:28:25 | 显示全部楼层
我手上的屏有VCC、GND、SCL和SDA四个插针,VCC接5V,GND接GND,SDA接A4,SCL接A5,没有反应。不知要改动什么地方才能驱动起来。
回复

使用道具 举报

348

主题

2077

帖子

931

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
931
 楼主| 发表于 2018-7-23 18:41:11 | 显示全部楼层
Wong 发表于 2018-7-23 16:28
我手上的屏有VCC、GND、SCL和SDA四个插针,VCC接5V,GND接GND,SDA接A4,SCL接A5,没有反应。不知要改动什 ...

请把你的屏型号告知下,还有它的接口?
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

16

主题

56

帖子

92

活跃值

注册会员

Rank: 2

活跃值
92
发表于 2018-7-23 18:53:21 | 显示全部楼层
roc 发表于 2018-7-23 18:41
请把你的屏型号告知下,还有它的接口?

屏是以前在这家店购买的https://item.taobao.com/item.htm ... &_u=n18s4jqf873
回复

使用道具 举报

16

主题

56

帖子

92

活跃值

注册会员

Rank: 2

活跃值
92
发表于 2018-7-23 19:13:47 | 显示全部楼层
roc 发表于 2018-7-23 18:41
请把你的屏型号告知下,还有它的接口?

卖家提供的arduino例程,在Arduino UNO上测试通过。 OLED显示屏_arduino_IIC_例程.rar (849.23 KB, 下载次数: 23)
回复

使用道具 举报

348

主题

2077

帖子

931

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
931
 楼主| 发表于 2018-7-23 19:37:38 | 显示全部楼层
Wong 发表于 2018-7-23 19:13
卖家提供的arduino例程,在Arduino UNO上测试通过。

我看了你这个是基于u8glib库的,但是我们目前使用的是Adafruit_SSD1306的库修改的,可能和你的屏有些不匹配,我需要看看你这个型号的资料再修改下我们当前的库,尽快发给你可以适应你这个型号的程序。
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

16

主题

56

帖子

92

活跃值

注册会员

Rank: 2

活跃值
92
发表于 2018-7-23 19:42:13 | 显示全部楼层
roc 发表于 2018-7-23 19:37
我看了你这个是基于u8glib库的,但是我们目前使用的是Adafruit_SSD1306的库修改的,可能和你的屏有些不匹 ...

好的,谢谢!
回复

使用道具 举报

348

主题

2077

帖子

931

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
931
 楼主| 发表于 2018-7-30 16:10:34 | 显示全部楼层

使用i2c接口时候,使用我们的库测试没问题,注意下i2c的地址就可以了
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

16

主题

56

帖子

92

活跃值

注册会员

Rank: 2

活跃值
92
发表于 2018-7-31 09:24:22 | 显示全部楼层
roc 发表于 2018-7-30 16:10
使用i2c接口时候,使用我们的库测试没问题,注意下i2c的地址就可以了

你好,楼主位的示例中,i2c地址要在什么地方修改?
回复

使用道具 举报

348

主题

2077

帖子

931

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
931
 楼主| 发表于 2018-7-31 09:41:23 | 显示全部楼层
Wong 发表于 2018-7-31 09:24
你好,楼主位的示例中,i2c地址要在什么地方修改?
我上面的代码不一样的,你使用i2c的时候,使用示例中的:
13.png

然后在 display.begin();这句代码里面的第二个参数更改i2c地址
12.png


零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

348

主题

2077

帖子

931

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
931
 楼主| 发表于 2018-7-31 09:46:09 | 显示全部楼层
Wong 发表于 2018-7-31 09:24
你好,楼主位的示例中,i2c地址要在什么地方修改?

如果你不确定I2C地址,可以查看你买的模块文档,或者使用i2c scan的方式去获取正确的i2c地址,同时你调试的时候可以用逻辑分析仪去查看下i2c线的信号,看看是不是有ACK。
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

16

主题

56

帖子

92

活跃值

注册会员

Rank: 2

活跃值
92
发表于 2018-7-31 11:56:29 | 显示全部楼层
roc 发表于 2018-7-31 09:41
我上面的代码不一样的,你使用i2c的时候,使用示例中的:

将地址改为0X3C有反应了,不过只有眉头部份有显示
IMG_20180731_115200.jpg


回复

使用道具 举报

348

主题

2077

帖子

931

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
931
 楼主| 发表于 2018-7-31 12:40:11 | 显示全部楼层
Wong 发表于 2018-7-31 11:56
将地址改为0X3C有反应了,不过只有眉头部份有显示

这个应该是你的尺寸不是128*64的像素
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

16

主题

56

帖子

92

活跃值

注册会员

Rank: 2

活跃值
92
发表于 2018-7-31 14:03:40 | 显示全部楼层
roc 发表于 2018-7-31 12:40
这个应该是你的尺寸不是128*64的像素

好的,看资料写的是128X64的,暂时不折腾了,谢谢你!
回复

使用道具 举报

0

主题

2

帖子

12

活跃值

新手上路

Rank: 1

活跃值
12
发表于 2018-9-9 01:03:04 | 显示全部楼层
本帖最后由 irong 于 2018-9-9 01:06 编辑
Wong 发表于 2018-7-31 14:03
好的,看资料写的是128X64的,暂时不折腾了,谢谢你!

我的屏跟你一样的 可以驱动 (用ssd1306_128*64   地址是0x3C)
回复

使用道具 举报

348

主题

2077

帖子

931

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
931
 楼主| 发表于 2018-9-9 13:50:19 | 显示全部楼层
irong 发表于 2018-9-9 01:03
我的屏跟你一样的 可以驱动 (用ssd1306_128*64   地址是0x3C)

这两个屏是兼容的
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

0

主题

2

帖子

8

活跃值

新手上路

Rank: 1

活跃值
8
发表于 2018-12-10 19:22:36 | 显示全部楼层
你们底层是直接操作寄存器还是用标准库或者HAL库
回复

使用道具 举报

348

主题

2077

帖子

931

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
931
 楼主| 发表于 2018-12-10 19:56:01 | 显示全部楼层
ruiyaoNi 发表于 2018-12-10 19:22
你们底层是直接操作寄存器还是用标准库或者HAL库

对底层感兴趣需要自己去看那个库的实现了,都是开放的源码
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

0

主题

4

帖子

1

活跃值

新手上路

Rank: 1

活跃值
1
发表于 2019-2-20 21:55:21 | 显示全部楼层
Wong 发表于 2018-7-23 16:28
我手上的屏有VCC、GND、SCL和SDA四个插针,VCC接5V,GND接GND,SDA接A4,SCL接A5,没有反应。不知要改动什 ...

驱动起来了吗。我好像也不行
回复

使用道具 举报

348

主题

2077

帖子

931

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
931
 楼主| 发表于 2019-2-20 22:20:04 | 显示全部楼层
zhaozhong 发表于 2019-2-20 21:55
驱动起来了吗。我好像也不行

型号是跟我一样吗?还有地址看看是不是需要改,最好用逻辑分析仪看下I2C的信号看总线有没有ACK
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver| 手机版| 小黑屋| 零知实验室 ( 粤ICP备17040594号-3 )

GMT+8, 2019-10-21 08:23 , Processed in 0.113040 second(s), 23 queries .

快速回复 返回顶部 返回列表