为了方便对照,在你的 PCtoLCD 的截图里,随便取一组不是全0或者全1的像素点,
比如第20组,从上向下依次是7个亮点1个黑点,对应的数据是 0x7F,用二进制表示是 0111 1111 ,
说明取模的顺序是 从上向下 读取像素点,从低位到高位保存,数据位的顺序是高位在前(左)(这一点后面说)。
这个顺序是符合OLED显存的赋值顺序的,所以显示正常。
而STC的图片取模工具里,第20个数据是 0xFC, 二进制数是 1111 1100 (不同取模软件对图片的识别略有偏差属于正常)
说明取模的顺序是 从上向下读取像素点,从低位到高位保存,数据位的顺序是低位在前(左)。
把这种顺序的数据发给OLED,就会导致每一页的图像都是上下镜像的,也就是你形容的支离破碎的感觉了。
================================================================
这个问题很多人在习惯使用PCtoLCD之后改用STC的取模工具的时候都提到过,原因就在被 低位在前 的选项迷惑了
PCtoLCD 中的 低位在前是 【取模走向】
而 STC 中的 低位在前 是 【存储顺序】
比如上面选取的八个像素点,按照两个软件中选择的共同的顺序,从上向下读取的时候,依次是 1,1,1,1,1,1,1,0。
PCtoLCD的 低位在前 的 走向,意思就是 从“先低位向高位读取”,严谨一些的话,其实应该叫做 低位在先
PCtoLCD 默认的存储顺序,是 先读到的是低位,后读到的是高位,也就是 0111 1111(0x7F)
通过读取像素点的走向,来决定字模数据位的顺序.
在 STC 中, 取模走向 已经在【扫描模式】的下拉列表中就定下了,
所以按照 先读到的是低位,后读到的是高位 的原则,
如果选择 低位在前 的 存储顺序,保存成的数据就是 11111100 了。
因此,为了符合OLED的赋值规则,这里应该选择 高位在前 ,也就是 00111111 。
另外,如果使用的是画点的方式进行显示,如果是低位在前的数据,也可以在读取顺序的代码中进行修改,把 dat & (x01<<n) 改成 dat & (0x80>>n)
================================================================
关于 STC 的 低位在前 的存储顺序,比较适合 以像素点为单位的取模方式 。
比如常见的单色LED点阵屏(74HC595 或者 MAX7219 等等)、带灰度的OLED(4位灰度)、TFT彩屏(16位RGB)、WS2812(24位RGB)、HUB75彩屏(24位RGB)等等,
因为发送数据是以每个像素点为最小单元,而不像单色OLED那样以八个像素点为最小显示单元,
所以,数据位的顺序是 低位在前 还是 高位在前 ,主要取决于程序代码里的读取顺序。
同理,PCtoLCD 里的 高位在前 的走向,也是为了迎合不同种类的单色屏幕的读取顺序。
比如常见的单色LED点阵屏(74HC595 或者 MAX7219 等等),数据是一位一位发送的,
所以对于不同读取顺序的驱动程序,也可以在 PCtoLCD 中选择不同走向进行取模。
大明狐 发表于 2025-10-11 12:33
从截图看,错乱的原因大概是数据的 取模顺序 的问题。
果然还得是大佬
页:
1
[2]