模块介绍

0.96寸OLED(4Pin) 模块采用 SSD1306 为主芯片, 像素为 128*64, 通讯方式为 IIC, 地址可选(默认地址0x78),接口简单, 模块带有稳压芯片, 支持3.3V~5V电压供电, 上电自动复位, 自发光自由视角,功耗低。 主要特点如下:

1、兼容 3.3V 或 5V 电源输入。

2、通讯地址可选择(0x78/0x7a)。

 

图片1.png

模块引脚

符号

类型

描述

GND

GND

接地引脚

VCC

VCC

电源引脚

SCL

输入

时钟线

SDA

输入\输出

数据线

 

协议介绍

该模块与单片机的通讯为IIC协议。模拟IIC指的就是用单片机引脚高低电平的变化,来模拟IIC的时序信号传送数据。硬件IIC则可以直接配置单片机相应的寄存器自动产生通讯信号,我们代码中主要采用了模拟IIC的方式来驱动OLED。单片机与OLED显示屏之间通过IIC协议进行数据的交互,从而正确的显示单片机发送给显示屏的数据。

  • IIC协议

一个 I2C 总线只使用了两条总线,一条双向串行数据线 (SDA) ,一条串行时钟线 (SCL)。SDA数据线即用来表示数据,SCL时钟线用于数据收发同步。每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。

 iic.png

  • 协议传输过程(单片机如何将数据写入OLED过程)

1) 发送起始信号(S)
2) 写从机地址与读写位, IIC 模式为只写, 所以 RW# 位为 0, OLED默认地址是0X78。
3) 等待从机(这里的从机是指模块) 应答。
4) 写入一字节数据/命令
5) 等待从机应答。
6) 写入一字节的数据/命令。
7) 等待从机应答。
8) 发送停止信号。

图片5.png

  • 起始和停止信号

当 SCL 线是高电平时 SDA 线从高电平向低电平切换,这个情况表示通讯的起始。当 SCL 是高电平时 SDA 线由低电平向高电平切换,表示通讯的停止。起始和停止信号一般由主机产生。

图片2.png

  • 发送数据

I2C 使用 SDA 信号线来传输数据,使用 SCL 信号线进行数据同步。见图数据有效性。 SDA 数据线在 SCL 的每个时钟周期传输一位数据。传输时, SCL 为高电平的时候 SDA 表示的数据有效,即此时的 SDA 为高电平时表示数据“1”,为低电平时表示数据“0”。当 SCL 为低电平时, SDA的数据无效,一般在这个时候 SDA 进行电平切换,为下一次表示数据做好准备

图片3.png

  • 响应信号

I2C 的数据和地址传输都带响应。响应包括“应答 (ACK)”和“非应答 (NACK)”两种信号。作为数据接收端时,当设备 (无论主从机) 接收到 I2C 传输的一个字节数据或地址后,若希望对方继续发送数据,则需要向对方发送“应答 (ACK)”信号,发送方会继续发送下一个数据;若接收端希望结束数据传输,则向对方发送“非应答 (NACK)”信号,发送方接收到该信号后会产生一个停止信号,结束信号传输。

图片4.png

驱动代码

  • OLED模块驱动代码主要有三个文件,分别是bsp_oled.c、bsp_oled.h、bsp_oledfond.h

  1. bsp_oled.c:主要为OLED模块的驱动代码。单片机管脚初始化、IIC协议的实现、与OELD模块的数据交互等内容都在该文件。

  2. bsp_oled.h:主要是单片机管脚的定义,代码里面目前配置的单片机与OLED模块通信的管脚是PA11和PA12。具体使用那两个管脚根据实际情况修改。

  3. bsp_oledfond.h:存放字符和汉字的字模,使OLED显示屏能够正确的显示字符和汉字。

图片7.png

取模软件

ASCII字符、 汉字、 图片的字模都是使用 PCtoLCD2002 字模软件生成的。ASCII 的字模已经取好在 bsp_oledfont.h 文件中, 可以直接使用。 如果用户想显示汉字, 那么就需要自己通过取模软件取模出来,取出的字模按照 bsp_oledfont.h 文件中的汉字格式写入代码中的hz[]数组里面。

字模软件.png

模式我们选择字符模式,宽高选择16*16,也就是一个汉字所占的像素点的大小。在选项中,我们需要配置一些参数,具体配置参数如下。

{1200EAE4-E16D-451e-8C83-003FBBBA6CB2}.png

参数确定之后,我们就可以生成想要生成的汉字或字符的字模数据了,比如我们想生成“叶”字,直接在输入框中输入叶,然后点击生成字模。

{B7C0A134-2AF0-4d95-AD9F-5C2B9FBE6147}.png

将生成的字模参数复制到bsp_oledfont.h文件hz[]中,格式一定要和hz[]中其余字体的字幕格式保持一致,最后再将字体添加到hz_index[]中即可。(hz[]和hz_index[]中字体的顺序要保持一致。)

代码下载

0.96寸OLED显示屏.zip