找回密码
 立即注册
查看: 1908|回复: 17

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

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-01 15:00:39

24

主题

305

回帖

2556

积分

荣誉版主

积分
2556
发表于 2024-3-22 12:21:24 | 显示全部楼层 |阅读模式
本帖最后由 大明狐 于 2024-4-12 17:39 编辑

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





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







2 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2024-3-22 12:57:02 | 显示全部楼层
膜拜大神
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-3-22 13:19:05 来自手机 | 显示全部楼层
学习了
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:391
  • 最近打卡:2025-04-30 00:26:42

0

主题

336

回帖

1490

积分

金牌会员

积分
1490
发表于 2024-3-24 00:17:05 | 显示全部楼层
又碰到大明狐老大了,请教一下是不是sh1106不能采用水平地址扫描的方式啊,这两天一直没搞出来,不是说它和ssd1306是兼容的吗

点评

查看SH1106的数据手册发现确实没有关于寻址模式的指令 [attachimg]39457[/attachimg] 并且手册里也提到了当遇到需要换行的时候 需要自行给Column号置零和给Page号加一 [attachimg]39458[/attachimg] 试了一下  详情 回复 发表于 2024-3-24 11:00
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-01 15:00:39

24

主题

305

回帖

2556

积分

荣誉版主

积分
2556
发表于 2024-3-24 11:00:30 | 显示全部楼层
xxxe*** 发表于 2024-3-24 00:17
又碰到大明狐老大了,请教一下是不是sh1106不能采用水平地址扫描的方式啊,这两天一直没搞出来,不是说它和 ...

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

SH1106page2.jpg



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



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

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

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





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


能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-01 10:01:59

0

主题

170

回帖

955

积分

高级会员

积分
955
发表于 2024-3-24 11:06:46 | 显示全部楼层
视频对屏幕的基本原理讲得通透,

点评

谢谢肯定^o^  发表于 2024-3-24 13:37
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:391
  • 最近打卡:2025-04-30 00:26:42

0

主题

336

回帖

1490

积分

金牌会员

积分
1490
发表于 2024-3-24 12:08:42 | 显示全部楼层
谢谢大明狐老大的回复,就只能按着页面寻址模式来弄了,我是用缓存来刷新oled显存的,本来想着直接一个for循环就写完了,没想着居然不行啊,怪不得sh1106屏的价格比ssd1306屏便宜不老少呢

点评

用缓存数组的数据刷新oled显存,用一个for循环的方式,只适合SSD1306或者SSD1315之类驱动芯片的屏幕 因为这两种芯片都是128×64点阵的,所以在水平寻址模式下,显存可以用1024次循环直接填满 [attachimg]3948  详情 回复 发表于 2024-3-24 13:22
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-01 15:00:39

24

主题

305

回帖

2556

积分

荣誉版主

积分
2556
发表于 2024-3-24 13:22:31 | 显示全部楼层
xxxe*** 发表于 2024-3-24 12:08
谢谢大明狐老大的回复,就只能按着页面寻址模式来弄了,我是用缓存来刷新oled显存的,本来想着直接一个for ...





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



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



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


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

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


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


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

能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-01 10:01:59

0

主题

170

回帖

955

积分

高级会员

积分
955
发表于 2024-3-24 15:37:09 | 显示全部楼层
明白,原来有些屏需要移位是这样来的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-01 15:00:39

24

主题

305

回帖

2556

积分

荣誉版主

积分
2556
发表于 2024-4-12 17:39:19 | 显示全部楼层
一楼更新一段手搓显示函数的过程记录{:5_344:}
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 00:01 , Processed in 0.889243 second(s), 116 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表