中景园0.96寸 OLED 显示屏 学习笔记

中景园0.96寸 OLED 显示屏 学习笔记

一、OLED简介

OLED,即有机发光二极管( Organic Light Emitting Diode )。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
LCD都需要背光,而OLED不需要,因为它是自发光的。这样同样的显示OLED效果要来得好一些。以目前的技术,OLED的尺寸还难以大型化,但是分辨率确可以做到很高。在此我们使用的是中景园电子的0.96寸OLED显示屏,该屏有以下特点:

1、0.96 寸OLED有黄蓝,白,蓝三种颜色可选;其中黄蓝是屏上1/4部分为黄光,下3/4为蓝;而且是固定区域显示固定颜色,颜色和显示区域均不能修改
2、分辨率为128*64
3、多种接口方式; OLED裸屏总共种接口包括: 6800、8080 两种并行接口方式、3线或4线的串行SPI接口方式、IIC 接口方式(只需要2根线就可以控制OLED了!),这五种接口是通过屏上的BSO~BS2来配置的。
4、中景园电子的本屏开发了两种接口的Demo板,接口分别为七针的SPI/IIC 兼容模块四针的IIC模块

二、产品特点

2.1、0.96寸 OLED 裸屏外观

裸屏为 30pin,从屏正面看左下角为 1,右下角为 30;在设计的时候一定要注意不要搞反了。
具体的接口定义请大家查看 0.96 寸 OLED 官方数据手册
在这里插入图片描述

2.2、0.96寸 OLED 模块

2.2.1 SPI/IIC接口模块

模块接口定义:

  1. GND 电源地

  2. VCC 电源正(3~5.5V)

  3. D0 OLED 的 D0 脚,在 SPI 和 IIC 通信中为时钟管脚

  4. D1 OLED 的 D1 脚,在 SPI 和 IIC 通信中为数据管脚

  5. RES OLED 的 RES#脚,用来复位(低电平复位)

  6. DC OLED 的 D/C#E 脚,数据和命令控制管脚

  7. CS OLED 的 CS#脚,也就是片选管脚

实物图:
在这里插入图片描述

2.2.2 IIC 接口模块

模块接口定义:

  1. GND 电源地
  2. VCC 电源正(3~5.5V)
  3. SCL OLED 的 D0 脚,在 IIC 通信中为时钟管脚
  4. SDA OLED 的 D1 脚,在 IIC 通信中为数据管脚

实物图:

在这里插入图片描述

2.3、0.96寸 OLED 驱动IC

本屏所用的驱动 IC 为 SSD1306;其具有内部升压功能;所以在设计的时候不需要再专一设计升压电路;当然了本屏也可以选用外部升压,具体的请详查数据手册。SSD1306 的每页包含了128 个字节,总共 8 页,这样刚好是 128*64 的点阵大小。

这点与 1.3 寸 OLED 驱动 IC SSD1106稍有不同,SSD1106 每页是 132 个字节,也是 8 页。所以在用 0.96 寸 OLED 移植 1.3 寸 OLED 程序的时候需要将 0.96 寸的显示地址向右偏移 2,这样显示就正常了;否则在用 1.3 寸的时候 1.3寸屏右边会有 4 个像素点宽度显示不正常或是全白,这点大家注意一下。其它的 SSD1306 和SSD1106 区别不大。

三、代码

3.1、子文件

Bmp.h 是存放的图片数据,也就是大家对一 BMP 图片取模的数据
Oledfont.H 主要是存放的字库数据,包含常用的字符和用户自己所取模的中文
Oled.c 主要是函数的操作
Main.c 这个就不说了

OLED.H 这 个 主 要 是 函 数 说 明 和 管 脚 定 义

3.2、自己归纳

1、OLED_ShowCHinese();

功能:汉字显示(可显示取模后的任意点阵)

3个传入参数,分别为:显示的横坐标、纵坐标、汉字库中文字的序号

2、OLED_ShowString();

功能:显示一个字符号串

4个传入参数,分别为:显示的横坐标、字符串、字体大小

3、OLED_ShowNum();

功能:显示n位数字(变量数值)

5个传入参数,分别为:显示的横坐标、字符串、num数值、数字的位数、字体大小

一个数字站7位

后期再次使用,可参考《番茄钟V1.0》

中景电子0.96OLED显示屏_arduino_IIC_例程+SPI_例程工程源码: void Adafruit_SSD1306::startscrolldiagleft(uint8_t start, uint8_t stop){ ssd1306_command(SSD1306_SET_VERTICAL_SCROLL_AREA); ssd1306_command(0X00); ssd1306_command(SSD1306_LCDHEIGHT); ssd1306_command(SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL); ssd1306_command(0X00); ssd1306_command(start); ssd1306_command(0X00); ssd1306_command(stop); ssd1306_command(0X01); ssd1306_command(SSD1306_ACTIVATE_SCROLL); } void Adafruit_SSD1306::stopscroll(void){ ssd1306_command(SSD1306_DEACTIVATE_SCROLL); } void Adafruit_SSD1306::ssd1306_data(uint8_t c) { if (sid != -1) { // SPI //digitalWrite(cs, HIGH); *csport |= cspinmask; //digitalWrite(dc, HIGH); *dcport |= dcpinmask; //digitalWrite(cs, LOW); *csport &= ~cspinmask; fastSPIwrite(c); //digitalWrite(cs, HIGH); *csport |= cspinmask; } else { // I2C uint8_t control = 0x40; // Co = 0, D/C = 1 Wire.beginTransmission(_i2caddr); Wire.write(control); Wire.write(c); Wire.endTransmission(); } } void Adafruit_SSD1306::display(void) { ssd1306_command(SSD1306_SETLOWCOLUMN | 0x0); // low col = 0 ssd1306_command(SSD1306_SETHIGHCOLUMN | 0x0); // hi col = 0 ssd1306_command(SSD1306_SETSTARTLINE | 0x0); // line #0 if (sid != -1) { // SPI *csport |= cspinmask; *dcport |= dcpinmask; *csport &= ~cspinmask; for (uint16_t i=0; i<(SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8); i++) { fastSPIwrite(buffer[i]); //ssd1306_data(buffer[i]); } // i wonder why we have to do this (check datasheet) if (SSD1306_LCDHEIGHT == 32) { for (uint16_t i=0; i<(SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8); i++) { //ssd1306_data(0); fastSPIwrite(0); } } *csport |= cspinmask; } else { // save I2C bitrate uint8_t twbrbackup = TWBR; TWBR = 12; // upgrade to 400KHz! //Serial.println(TWBR, DEC); //Serial.println(TWSR & 0x3, DEC); // I2C
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值