FPGA驱动OLED屏幕
0赞一. 简介
这是FPGA之旅设计的第九例啦!!!本例将介绍如何使用FPGA驱动OLED屏幕,并在接下来的几例中,配合其它模块,进行一些有趣的综合实验。由于使用的OLED屏是IIC接口的,对IIC接口不是很清楚的,可以参考第五例的设计,同时使用第五例写好的IIC模块,驱动OLED屏。Let's do it!
二. 0.96寸OLED屏介绍
这里就只介绍最常用的0.96寸屏,其它的一样。OLED共支持8080并口、SPI和IIC三种接口,同样也只介绍IIC接口的用法。0.96寸OLED屏幕的分辨率为128×64,内部有一块GRAM用来存储显示的数据。
1
OLED的存储区域
这块存储区域分为8个page,每个page下面共有128bit,如下图所示
这就难免会有些疑问了,128×8,不应该是128×64嘛?8个page,为什么是64行呢?数据写入的呢?
每一个page包括8行,所以说8个page共有64行。IIC每次发送数据的时候,是发送一个byte的,也就是8bit,这8bit数据会存储到某一列的八行中,例如图中SEG0区域,是第一列的头八行。这样GRAM的存储区域就弄懂了。
2
OLED的数据存储模式
当我们向OLED的GRAM发送显示数据的过程中,OLED内部共有三种处理模式。
模式一: 当我们指定了一个page和某一列的时候,每写一个数据,列会自动加一,当写到page的最后一列的时候,列数,会自动跳转到第零列,需要手动的切换page。
在实际的使用中,具体使用那一种模式,可以根据自己的子模软件或者项目来,怎么方便怎么来!
了解了上面两个部分后,基本就可以编写驱动程序啦,不要问为什么,(#^.^#),初始化OLED就是配置一些列命令的过程,而这些寄存器和配置的值一般都是copy现成的。然后了解一下关键的一两个命令就可以啦。想要深入的了解OLED的功能的话,可以阅读对应的芯片手册哦!在后面的例程中也会介绍部分功能强大的命令。
三. OLED关键命令介绍
0xAE/0xAF: 对应着开启OLED显示和关闭OLED显示
0x20-0x22: 对应着上面的三种OLED数据存储模式,默认为0x22,模式一
0x00-0x0F: 设置列地址的低四位,默认为0x00
0x10-0x1F: 设置列地址的高四位,默认为0x10
0xB0-0xB7: 设置page,第四位表示page
暂时差不多只需要了解上面的这些寄存器。
四. IIC驱动OLED数据格式
驱动OLED分为写数据和写命令(读暂时不考虑)。写命令就是配置的过程,写数据就是写入GRAM中进行显示的过程。
IIC数据格式 :OLED地址 + 命令 / 数据 + 值。
OLED地址,就是IIC协议中的从机地址,我这里是0x78。
命令/数据中,0x00表示接下来的值代表命令,0x40表示接下的值表示数据,存入GRMA。
值,具体的命令或者数据
也就是说每一次IIC需要传输24bit,3个字节的数据,和第五例的IIC模块完美对应,那事情就好办啦!
五. OLED初始化
直接copy某例程提供的配置参数,共需要配置26个命令,第一个是上面介绍的0xAE命令,关闭OLED显示。最后一个也是介绍的0xAF命令,开启OLED显示,没有配置模式,直接使用的默认的模式一,配置完成后,可以看到OLED屏被点亮,内容是杂乱的
六. 向GRAM中写入数据
初始化后,就可以显示内容啦,仅仅只需要配置page和起始列三个命令,然后写入数据即可,配置页和列地址,只有在模式一有效,也就是上电默认的模式。
这样就可以显示数据啦,亲测可用哦!
其实驱动OLED也没有那么复杂嘛。
七. 上板验证
先来编写个简单的模块,用来初始化OLED。下载程序后,我的OLED是亮起来了,你的呢!
FPGA驱动OLED就结束啦!
回复FPGA之旅设计99例之第九例获取工程文件
原文链接:https://mp.weixin.qq.com/s/HPubkS3-EVhbcsShtyBCIQ
电子技术应用专栏作家 FPGA之旅