第一范文网 - 专业文章范例文档资料分享平台

STM32 实验9 OLED显示实验

来源:用户分享 时间:2025/8/20 3:30:18 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

可以看到,在发送了列地址之后,开始读数据,第一个是Dummy Read,也就是假读,我们从第二个开始,才算是真正有效的数据。

并行接口模式就介绍到这里,我们接下来介绍一下4线串行(SPI)方式,4先串口模式使用的信号线有如下几条:

CS:OLED片选信号。

RST(RES):硬复位OLED。

DC:命令/数据标志(0,读写命令;1,读写数据)。

SCLK:串行时钟线。在4线串行模式下,D0信号线作为串行时钟线SCLK。 SDIN:串行数据线。在4线串行模式下,D1信号线作为串行数据线SDIN。

模块的D2需要悬空,其他引脚可以接到GND。在4线串行模式下,只能往模块写数据而不能读数据。

在4线SPI模式下,每个数据长度均为8位,在SCLK的上升沿,数据从SDIN移入到SSD1306,并且是高位在前的。DC线还是用作命令/数据的标志线。在4线SPI模式下,写操作的时序如下:

图3.9.1.6 4线SPI写操作时序图

4线串行模式就为大家介绍到这里。其他还有几种模式,在SSD1306的数据手册上都有详细的介绍,如果要使用这些方式,请大家参考该手册。

接下来,我们介绍一下模块的显存,SSD1306的显存总共为128*64bit大小,SSD1306将这些显存分为了8页,其对应关系如下:

表3.9.1.3 SSD1306显存与屏幕对应关系表

可以看出,SSD1306的每页包含了128个字节,总共8页,这样刚好是128*64的点阵大小。因为每次写入都是按字节写入的,这就存在一个问题,如果我们使用只写方式操作模块,那么,每次要写8个点,这样,我们在画点的时候,就必须把要设置的点所在的字节的每个位都搞清楚当前的状态(0/1?),否则写入的数据就会覆盖掉之前的状态,结果就是有些不需要显示的点,显示出来了,或

者该显示的没有显示了。这个问题在能读的模式下,我们可以先读出来要写入的那个字节,得到当前状况,在修改了要改写的位之后再写进GRAM,这样就不会影响到之前的状况了。但是这样需要能读GRAM,对于3线或4线SPI模式,模块是不支持读的,而且读->改->写的方式速度也比较慢。

所以我们采用的办法是在STM32的内部建立一个OLED的GRAM(共128个字节),在每次修改的时候,只是修改STM32上的GRAM(实际上就是SRAM),在修改完了之后,一次性把STM32上的GRAM写入到OLED的GRAM。当然这个方法也有坏处,就是对于那些SRAM很小的单片机(比如51系列)就比较麻烦了。

SSD1306的命令比较多,这里我们仅介绍几个比较常用的命令,这些命令如下表:

表3.9.1.4 SSD1306常用命令表

第一个命令为0X81,用于设置对比度的,这个命令包含了两个字节,第一个0X81为命令,随后发送的一个字节为要设置的对比度的值。这个值设置得越大屏幕就越亮。

第二个命令为0XAE/0XAF。0XAE为关闭显示命令;0XAF为开启显示命令。

第三个命令为0X8D,该指令也包含2个字节,第一个为命令字,第二个为设置值,第二个字节的BIT2表示电荷泵的开关状态,该位为1,则开启电荷泵,为0则关闭。在模块初始化的时候,这个必须要开启,否则是看不到屏幕显示的。

第四个命令为0XB0~B7,该命令用于设置页地址,其低三位的值对应着GRAM的页地址。 第五个指令为0X00~0X0F,该指令用于设置显示时的起始列地址低四位。 第六个指令为0X10~0X1F,该指令用于设置显示时的起始列地址高四位。

其他命令,我们就不在这里一一介绍了,大家可以参考SSD1306 datasheet的第28页。从这页开始,对SSD1306的指令有详细的介绍。

最后,我们再来介绍一下OLED模块的初始化过程,SSD1306的典型初始化框图如下图所示:

图3.9.1.7 SSD1306初始化框图

驱动IC的初始化代码,我们直接使用厂家推荐的设置就可以了,只要对细节部分进行一些修改,使其满足我们自己的要求即可,其他不需要变动。

OLED的介绍就到此为止,我们重点向大家介绍了ALIENTEK OLED模块的相关知识,接下来我们将使用这个模块来显示字符和数字。通过以上介绍,我们可以得出OLED显示需要的相关设置步骤如下:

1)设置STM32与OLED模块相连接的IO。

这一步,先将我们与OLED模块相连的IO口设置为输出,具体使用哪些IO口,这里需要根据连接电路以及OLED模块所设置的通讯模式来确定。这些将在硬件设计部分向大家介绍。

2)初始化OLED模块。

其实这里就是上面的初始化框图的内容,通过对OLED相关寄存器的初始化,来启动OLED的显示。为后续显示字符和数字做准备。

3)通过函数将字符和数字显示到OLED模块上。 这里就是通过我们设计的程序,将要显示的字符送到OLED模块就可以了,这些函数将在软件设计部分向大家介绍。

通过以上三步,我们就可以使用ALIENTEK OLED模块来显示字符和数字了,在后面我们还将会给大家介绍显示汉字的方法。这一部分就先介绍到这里。

3.9.2 硬件设计

OLED模块的电路在上一节已有详细说明了,这里我们介绍OLED模块与ALIETEK MiniSTM32开发板的连接,MiniSTM32开发板地板的LCD接口和ALIENTEK OLED模块直接可以对插,连接如下图:

图3.9.2.1 OLED模块与开发板连接示意图

图中绿色线圈出来的部分就是连接OLED的接口,这里在硬件上,OLED与MiniSTM32开发板的IO口对应关系如下:

OLED_CS对应PC9; OLED_RS对应PC8; OLED_WR对应PC7; OLED_RD对应PC6;

OLED_D[7:0]对应PB[7:0];

这些线的连接,MiniSTM32的内部已经连接好了,我们只需要将OLED模块插上去就好了。实物连接如下图所示:

搜索更多关于: STM32 实验9 OLED显示实验 的文档
STM32 实验9 OLED显示实验.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6to7906ntq3xy6r95j55_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top