大明狐 发表于 2024-3-22 12:21:24

【视频】简单聊一聊OLED的取模顺序并且手搓一个显示函数

本帖最后由 大明狐 于 2024-4-12 17:39 编辑

Part 1:简单聊一聊OLED的取模顺序,了解了取模顺序,就可以写出需要的显示函数了


104


Part 2:手搓一个显示函数的过程记录

123





zhp 发表于 2024-3-22 12:57:02

膜拜大神{:4_250:}{:4_250:}{:4_250:}

soma 发表于 2024-3-22 13:19:05

学习了

xxxevery 发表于 2024-3-24 00:17:05

又碰到大明狐老大了,请教一下是不是sh1106不能采用水平地址扫描的方式啊,这两天一直没搞出来,不是说它和ssd1306是兼容的吗

大明狐 发表于 2024-3-24 11:00:30

xxxevery 发表于 2024-3-24 00:17
又碰到大明狐老大了,请教一下是不是sh1106不能采用水平地址扫描的方式啊,这两天一直没搞出来,不是说它和 ...

查看SH1106的数据手册发现确实没有关于寻址模式的指令





并且手册里也提到了当遇到需要换行的时候
需要自行给Column号置零和给Page号加一




试了一下,SH1106默认只有页地址模式


超过右边界之后会从同一行的左边第0列开始显示

但是因为SH1106是132×64点阵的驱动芯片
所以还有一部分数据会“显示”在屏幕外面。
所以即便是兼容,也还是建议使用指定行列坐标的方式显示内容





这些芯片型号的屏幕说的兼容
说的是一些能保证基本显示功能的配置
比如显示位置等等
就像同样是128×64的SSD1306的滚屏和反色,在SSD1315上就是无效的


yjawei 发表于 2024-3-24 11:06:46

视频对屏幕的基本原理讲得通透,

xxxevery 发表于 2024-3-24 12:08:42

谢谢大明狐老大的回复,就只能按着页面寻址模式来弄了,我是用缓存来刷新oled显存的,本来想着直接一个for循环就写完了,没想着居然不行啊,怪不得sh1106屏的价格比ssd1306屏便宜不老少呢

大明狐 发表于 2024-3-24 13:22:31

xxxevery 发表于 2024-3-24 12:08
谢谢大明狐老大的回复,就只能按着页面寻址模式来弄了,我是用缓存来刷新oled显存的,本来想着直接一个for ...





用缓存数组的数据刷新oled显存,用一个for循环的方式,只适合SSD1306或者SSD1315之类驱动芯片的屏幕



因为这两种芯片都是128×64点阵的,所以在水平寻址模式下,显存可以用1024次循环直接填满




但是SH1106、SH1107之类驱动芯片,是132×64点阵的
(我录视频用的1.3寸屏,就是SH1106驱动芯片的)



而我们用的128×64的屏幕,出厂的时候,连接的都是中间的部分,两侧都有两列没有使用


这也是为什么在用SH1106的屏幕的时候,起始列坐标要右移2才能正常显示
否则从第0列开始,图像就会有两列显示不全,并且右边会有两列花屏的原因


所以假设SH1106也可以用水平寻址模式,那么要自动填满数据,需要的也不止是1024次循环。


所以刚才说到一点,还是建议使用指定行列坐标的方式
行和列分别两个循环,同时在定位函数里统一右移2,
然后128个数据一组进行填充,
这样就能保证填充的是能看到的128×64的区域了。
(U8g2里SH1106屏幕的刷新屏幕函数,用的也是这个方式)
如果用SSD1306的屏幕,还是用一个循环和自加的方式填充效率更高。

yjawei 发表于 2024-3-24 15:37:09

明白,原来有些屏需要移位是这样来的。

大明狐 发表于 2024-4-12 17:39:19

一楼更新一段手搓显示函数的过程记录{:5_344:}
页: [1] 2
查看完整版本: 【视频】简单聊一聊OLED的取模顺序并且手搓一个显示函数