oled屏幕画面偏移问题
oled屏幕的画面偏移常常出现在“大芯片小屏幕”的情况下。“大芯片小屏幕”指的是屏幕的像素点阵大小比驱动ic能支持的大小要小。比如88×48的屏幕,驱动是CH1115(最大支持128×64)
解决画面偏移问题,需要我们搞清楚屏幕像素对应的RAM和数据所在的RAM
正好朱波手里有一块88×48的i2c oled屏幕,驱动ic是CH1115,那么就来探讨一下这个问题。
首先我们需要一个方便我们确定边界的图像。我这里用取模软件画了一个宽度为一像素的框框,整体大小是88*48。

然后写一下ic的初始化函数
这里COM扫描方向和段重映射方向为正常。
![]()
偏移量设为0
![]()
烧录看一下情况:

可以看到,上边框没了,左右边框正常。
此时大概可以推测出以下的映射关系:

可以看到,屏幕像素第0行所对应的驱动ic RAM的行数是未知的,那么如何知道这个数值呢?
因为我们设置的边框是1像素,所以只要设置好偏移量,让上下边框同时出现在屏幕上,就可以知道图中的“?”是多少了。
一般而言,像素坐标与RAM的映射关系有两种,一种是对齐,RAM的0行对应像素的0行,还有一种居中,也就是RAM的第7行,对应像素的0行。
现在上边框偏移出去了,我们可以合理怀疑这块屏幕是居中,所以图中的"?"是7。
也就是这样

然后我用蓝色画出了图像数据所在的RAM区域,也就是这样

现在我们要做的,就是让数据偏移到像素的第0行,也就是RAM中的第7行。

由于RAM第0行向上偏移会移到底部,也就是RAM的第63行。所以计算一下,需要偏移8+48=56行,换成十六进制也就是0x38。这也是厂家程序这里给0x38的原因。
![]()
烧录看一下情况:

这下上下左右边框都出来了,代表我们的偏移没有问题。
精彩的来了,如果我们进行水平镜像和垂直镜像呢?
把COM扫描方向和段重映射都反过来。
![]()
烧录看一下情况:

左边出现了花屏,说明左边的RAM没有设置数据,然后上边框也没了。
其实这也很好解释,有了前面的经验,这次很快就能画出映射关系图:

我们改变了扫描方向,但是屏幕和驱动ic的RAM的硬件连接是固定的,也就是屏幕只能是用那一块RAM。
看了这个图,情况一目了然(画的图有点歪,轻喷)
这时候只要把起始列设到40,然后把数据往上偏移8行就能让数据所在的RAM和屏幕所利用的RAM重合

![]()
烧录看一下情况:

完美解决问题。妈妈再也不怕我的oled图像会偏移了!
更多推荐

所有评论(0)