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

STM32 实验9 OLED显示实验(2)

来源:网络收集 时间:2019-06-17 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

者该显示的没有显示了。这个问题在能读的模式下,我们可以先读出来要写入的那个字节,得到当前状况,在修改了要改写的位之后再写进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模块插上去就好了。实物连接如下图所示:

图3.9.2.2 OLED模块与开发板连接实物图

3.9.3 软件设计

软件设计我们依旧在之前的工程上面增加,首先在HARDWARE文件夹下新建一个OLED的文件夹。然后打开USER文件夹下的工程,新建一个oled.c的文件和oled.h的头文件,保存在OLED文件夹下,并将OLED文件夹加入头文件包含路径。

打开oled.c,输入如下代码: #include \#include \#include \#include \ //OLED的显存 //存放格式如下. //[0]0 1 2 3 ... 127 //[1]0 1 2 3 ... 127 //[2]0 1 2 3 ... 127 //[3]0 1 2 3 ... 127 //[4]0 1 2 3 ... 127 //[5]0 1 2 3 ... 127 //[6]0 1 2 3 ... 127 //[7]0 1 2 3 ... 127

u8 OLED_GRAM[128][8]; //更新显存到LCD

void OLED_Refresh_Gram(void) {

u8 i,n;

for(i=0;i<8;i++) {

LED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7)

OLED_WR_Byte (0x02,OLED_CMD); //设置显示位置—列低地址,偏移了2列

LED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址

for(n=0;n<128;n++)OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);

}

}

#if OLED_MODE==1

//向SSD1306写入一个字节。 //dat:要写入的数据/命令

//cmd:数据/命令标志 0,表示命令;1,表示数据; void OLED_WR_Byte(u8 dat,u8 cmd)

{

DATAOUT(dat)

OLED_RS=cmd; OLED_CS=0; OLED_WR=0; OLED_WR=1; OLED_CS=1; OLED_RS=1;

} #else

//SSD1306写入一个字节。 //dat:要写入的数据/命令

//cmd:数据/命令标志 0,表示命令;1,表示数据; void OLED_WR_Byte(u8 dat,u8 cmd)

{

u8 i;

OLED_RS=cmd; //写命令 OLED_CS=0; for(i=0;i<8;i++)

{

OLED_SCLK=0; if(dat&0x80)OLED_SDIN=1;

else OLED_SDIN=0;

OLED_SCLK=1; dat<<=1; }

OLED_CS=1; OLED_RS=1; } #endif

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库STM32 实验9 OLED显示实验(2)在线全文阅读。

STM32 实验9 OLED显示实验(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/662198.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: