
OELD显示模块
模块介绍
0.96寸OLED(4Pin) 模块采用 SSD1306 为主芯片, 像素为 128*64, 通讯方式为 IIC, 地址可选(默认地址0x78),接口简单, 模块带有稳压芯片, 支持3.3V~5V电压供电, 上电自动复位, 自发光自由视角,功耗低。 主要特点如下:
1、兼容 3.3V 或 5V 电源输入。
2、通讯地址可选择(0x78/0x7a)。
模块引脚
协议介绍
该模块与单片机的通讯为IIC协议。模拟IIC指的就是用单片机引脚高低电平的变化,来模拟IIC的时序信号传送数据。硬件IIC则可以直接配置单片机相应的寄存器自动产生通讯信号,我们代码中主要采用了模拟IIC的方式来驱动OLED。单片机与OLED显示屏之间通过IIC协议进行数据的交互,从而正确的显示单片机发送给显示屏的数据。
IIC协议
一个 I2C 总线只使用了两条总线,一条双向串行数据线 (SDA) ,一条串行时钟线 (SCL)。SDA数据线即用来表示数据,SCL时钟线用于数据收发同步。每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
协议传输过程(单片机如何将数据写入OLED过程)
1) 发送起始信号(S)
2) 写从机地址与读写位, IIC 模式为只写, 所以 RW# 位为 0, OLED默认地址是0X78。
3) 等待从机(这里的从机是指模块) 应答。
4) 写入一字节数据/命令
5) 等待从机应答。
6) 写入一字节的数据/命令。
7) 等待从机应答。
8) 发送停止信号。
起始和停止信号
当 SCL 线是高电平时 SDA 线从高电平向低电平切换,这个情况表示通讯的起始。当 SCL 是高电平时 SDA 线由低电平向高电平切换,表示通讯的停止。起始和停止信号一般由主机产生。
发送数据
I2C 使用 SDA 信号线来传输数据,使用 SCL 信号线进行数据同步。见图数据有效性。 SDA 数据线在 SCL 的每个时钟周期传输一位数据。传输时, SCL 为高电平的时候 SDA 表示的数据有效,即此时的 SDA 为高电平时表示数据“1”,为低电平时表示数据“0”。当 SCL 为低电平时, SDA的数据无效,一般在这个时候 SDA 进行电平切换,为下一次表示数据做好准备
响应信号
I2C 的数据和地址传输都带响应。响应包括“应答 (ACK)”和“非应答 (NACK)”两种信号。作为数据接收端时,当设备 (无论主从机) 接收到 I2C 传输的一个字节数据或地址后,若希望对方继续发送数据,则需要向对方发送“应答 (ACK)”信号,发送方会继续发送下一个数据;若接收端希望结束数据传输,则向对方发送“非应答 (NACK)”信号,发送方接收到该信号后会产生一个停止信号,结束信号传输。
驱动代码
OLED模块驱动代码主要有三个文件,分别是bsp_oled.c、bsp_oled.h、bsp_oledfond.h
bsp_oled.c:主要为OLED模块的驱动代码。单片机管脚初始化、IIC协议的实现、与OELD模块的数据交互等内容都在该文件。
bsp_oled.h:主要是单片机管脚的定义,代码里面目前配置的单片机与OLED模块通信的管脚是PA11和PA12。具体使用那两个管脚根据实际情况修改。
bsp_oledfond.h:存放字符和汉字的字模,使OLED显示屏能够正确的显示字符和汉字。
取模软件
ASCII字符、 汉字、 图片的字模都是使用 PCtoLCD2002 字模软件生成的。ASCII 的字模已经取好在 bsp_oledfont.h 文件中, 可以直接使用。 如果用户想显示汉字, 那么就需要自己通过取模软件取模出来,取出的字模按照 bsp_oledfont.h 文件中的汉字格式写入代码中的hz[]数组里面。
模式我们选择字符模式,宽高选择16*16,也就是一个汉字所占的像素点的大小。在选项中,我们需要配置一些参数,具体配置参数如下。
参数确定之后,我们就可以生成想要生成的汉字或字符的字模数据了,比如我们想生成“叶”字,直接在输入框中输入叶,然后点击生成字模。
将生成的字模参数复制到bsp_oledfont.h文件hz[]中,格式一定要和hz[]中其余字体的字幕格式保持一致,最后再将字体添加到hz_index[]中即可。(hz[]和hz_index[]中字体的顺序要保持一致。)