基于stm32f103与IIC的0.96OLED屏幕显示字符与平滑滚动显示
- 一、0.96OLED屏幕简介
-
- 1、类型区分及接线
- 2、IIC通信原理
- 二、正常显示与平滑滚动显示
-
- 1、显示字符
- 2、显示传感器数据
- 3、平滑滚动显示
- 4、效果演示
- 5、查看oled的IIC通信协议程序
一、0.96OLED屏幕简介
1、类型区分及接线
- 模块有7针和4针两种,下面的是7针模块,主要引脚与4针相同
2、IIC通信原理
关于IIC在之前的文章AHT20与stm32中介绍过,这里只做主要的时序介绍。
- IIC总线
开始信号:处理器让SCL时钟保持高电平,然后让SDA数据信号由高变低就表示一个开始信号。同时IIC总线上的设备检测到这个开始信号它就知道处理器要发送数据了。
停止信号
处理器让SCL时钟保持高电平,然后让SDA数据信号由低变高就表示一个停止信号。同时IIC总线上的设备检测到这个停止信号它就知道处理器已经结束了数据传输,我们就可以各忙各个的了,如休眠等。 - IIC数据传输过程
1、在数据传输时,SDA的数据在SCL为高电平时,必须保持稳定,SCL高电平器件完成数据的传输。在SCL低电平器件,可以任意改变SDA的数据。数据写入过程是从最好为开始,高位在前,低位在后,即MSB。
2、响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA电平。即接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。 - 数据写入
首先发送一个开始信号,接着发送从机地址,OLED的从机地址前7位为地址,最后一位表示读(1)或者写(0)。应答ACK信号表示有这个从设备存在。在接收到应答信号后,发送控制位,来区分之后所发送的数据是控制命令还是显示相关的数据。在发送控制位后,等待应答信号。然后发送相应的控制命令或者数据。最后发送停止信号,表示数据传输完成。
二、正常显示与平滑滚动显示
例程及字模工具等相关资料提取码:vzrh
1、显示字符
1、本文所用硬件为野火的指南者stmf103开发板,IIC模式的四针0.96,七针也可以,按照上文讲述的接线方式接线即可。
2、显示汉字与字符
- 将下载后的例程打开,可以看到里边有显示汉字和字符串的函数
- 右键查看定义,了解每个参数的含义
显示汉字,参数分别为,起始点的横坐标x,纵坐标y,待显示汉字在字模数组中的位置。
显示字符串,参数分别为,起始点的横坐标x,纵坐标y,待显示字符串的首地址,待显示字符的字模大小(8、16、24、32等,取决于你取得字模格式) - 取模
打开oledfont.h
文件
我们可以看到里面有各种字模数组,且有不同的大小,如上图中的汉字即为16×16的列行式字模,在数组中的行数即为显示汉字函数的第三个参数。
打开资料中的取模软件
注意以上几个选项的选择,按照自己所需格式进行选择,然后确定,输入汉字生成字模。将生成的字模复制到自己的字模数组即可。
2、显示传感器数据
AHT20与stm32中我们介绍了AHT20与stm32f103进行温度采集,这里直接将AHT20初始化和IIC通信的源文件和头文件bsp_i2c
移植到我们这个工程中,将采集到的温度显示到OLED屏上
然后在主函数中调用温度采集函数
3、平滑滚动显示
滚动显示可以使用软件的方式,即循环更新显示起始点的坐标,但这样显示并不流畅平滑,会有卡顿。所以我们采用硬件刷新的方式,通过给oled发送SSD1306的驱动显示命令,控制屏幕进行平滑滚动显示。资料中有SSD1306的驱动手册,可供参考。
4、效果演示
5、查看oled的IIC通信协议程序
打开oled.c,即可看到oled的IIC初始化,以及各时序命令,开始信号,停止信号,读写数据等函数。
具体如何编写应参照数据手册的内容进行编写。