karlman 发表于 2024-5-14 22:31:42

OLED12864和12832的疑惑

本帖最后由 karlman 于 2024-5-15 07:13 编辑

STC8G1K17A 8pin芯片,此为手头的单片机。
买了个OLED12832,0.91',SSD1306芯片,例程里给的是软件IIC,测试了一下显示正常。
找了个硬件IIC的OLED12864例程,测试发现字符都被压缩压扁了一半,也就是说16点阵的汉字,变成16*8了,只显示了2、4、6、8、10、12、14、16这8行,字扁了一半。如下图
   
https://www.stcaimcu.com/forum.php?mod=image&aid=44012&size=300x300&key=5bec655957968dce&nocache=yes&type=fixnone
看这两个例程,硬件IIC也是在软件IIC的基础上改的,对比了半天也没有找出问题所在。
于是又买了个OLED12864,0.93',也是SSD1306芯片,测试用硬件IIC例程显示正常!

https://www.stcaimcu.com/forum.php?mod=image&aid=44011&size=300x300&key=e458c4bc483ca5c7&nocache=yes&type=fixnone
我就觉得很奇怪了,难道这两个OLED的显存页面不一样?
我又用OLED12832的软件IIC例程去测试OLED12864,结果显示的内容是显示一行空一行,也是只显示了2行汉字!也就是说每个汉字变成了16*32了,12864也只能显示2行汉字了。如图
   

下面把硬件例程和软件例程的OLED显示部分上传上来给大家看看,有没有哪位能帮我这个初学菜鸟找出问题所在?多谢!



xxxevery 发表于 2024-5-14 23:08:05

疑惑在哪了

karlman 发表于 2024-5-14 23:26:28

xxxevery 发表于 2024-5-14 23:08
疑惑在哪了

刚才没编辑完

xxxevery 发表于 2024-5-15 00:18:08

OLED12832肯定比OLED12864少显示一半啊,从你的图片上看明显就是只能显示显存中0、2、4、6行,你每次换行的时候就不能用y+1了,得y+2,或者直接写0、2、4、6这四行

karlman 发表于 2024-5-15 00:40:39

本帖最后由 karlman 于 2024-5-15 00:52 编辑

xxxevery 发表于 2024-5-15 00:18
OLED12832肯定比OLED12864少显示一半啊,从你的图片上看明显就是只能显示显存中0、2、4、6行,你每次换行的 ...
这两个OLED用的都是SSD1306芯片啊,显存都是128*64的,只是12832只用了一半显存吧?
我的例程都是只显示两行字符,也就是32行点阵。
我的理解是,前一半显存不都是一样的吗?为什么显示出来不一样?
从程序里我看不出驱动12864和12832有什么不同。
除了一个是硬件IIC一个是软件外,写OLED屏幕的子程序几乎都是一样的,显存都是8页,每页都是8*128,也就是半行16点阵的汉字,12864用了8页(4行汉字)缓存,12832只用了前4页(2行汉字)缓存吧?

toddyang 发表于 2024-5-15 08:53:12

xxxevery 发表于 2024-5-14 23:08
疑惑在哪了

汉字扁了,只剩下一半

soma 发表于 2024-5-15 10:22:27

这和点阵字没关系吧

karlman 发表于 2024-5-15 11:04:29

soma 发表于 2024-5-15 10:22
这和点阵字没关系吧

测试时我只是换了个屏,没有动程序。点阵OLEDFONT.H用的是同一个文件。我现在只能是猜想12832并不是简单的只用了12864的前一半显存,点阵和显存的对应关系不对。但是我没有从程序中找出不同。

xxxevery 发表于 2024-5-15 12:30:05

以前还真没玩过12832的屏,都是玩12864的屏。又研究了一下,我觉得应该是oled屏初始化里设置的问题了,你试试把oled12832屏可以正常运行的程序中的OLED_Init(void)函数中
   OLED_WR_Byte(0xa8,OLED_CMD);//设置驱动路数
   OLED_WR_Byte(0x1f,OLED_CMD);
之中的0x1f改为0x3f,编译后看12864的屏显示是否正常了

karlman 发表于 2024-5-15 16:00:56

本帖最后由 karlman 于 2024-5-15 18:47 编辑

xxxevery 发表于 2024-5-15 12:30
以前还真没玩过12832的屏,都是玩12864的屏。又研究了一下,我觉得应该是oled屏初始化里设置的问题了,你试 ...
我的目的是用硬件IIC驱动12832的屏,所以我去把左边的这个12864硬件IIC程序的0x3f改成了0x1f,显示结果还是扁字,但是向下移动了一行(16点)
换成12864的话,是正常显示但是向下移动了两行(32点)。


感觉确实很可能是初始化的参数不对,但两个程序的OLED初始化代码相差比较大,软件IIC的代码还没有详细注释,不知道每个参数是什么意思。
页: [1] 2
查看完整版本: OLED12864和12832的疑惑