0.96 OLED隔行不亮(已解决)
本帖最后由 芯征程 于 2024-10-10 14:55 编辑各位大佬,有没有遇到OLED 隔行不亮的问题,是我设置有问题,还是屏有问题? 一般来说是显示模式的问题,比如12864的屏用了12832的代码 代码贴出来看看 一般OLED有个隔行逐行设置,必须和面板ITO走线匹配 DebugLab 发表于 2024-9-28 22:06
一般OLED有个隔行逐行设置,必须和面板ITO走线匹配
本帖最后由 大明狐 于 2024-9-30 10:53 编辑
如果楼主使用的驱动程序是12832分辨率的屏幕的,就会出现这样的情况。
12832和12864屏幕的硬件结构不同。
在初始化的时候12832和12864的配置区别主要有两处:
1、屏幕硬件的行引脚的配置(指令0xDA)
DA11011010
A00AA0010
其中第二字节是里的A位产生这个影响的位。
A的默认值1,也就是配置结果是0x12,是使用所有的64行;
当A的值是0的时候,也就是配置结果是0x02,是使用所有偶数行(0、2、4、6……)。
所以如果初始化函数里的相关指令是
OLED_WR_Byte(0xDA, OLED_CMD);
OLED_WR_Byte(0x02, OLED_CMD);
那么在12864屏幕上就会出现这种隔行显示的问题,64行内容只有32行以这样的方式显示出来,其余32行则“显示”在了屏幕以外。
2、屏幕复用率的设置(指令0xA8)
A810101000
A**AAAAAA
其中A这六个位,是设置使用屏幕行数的位。
A的数值范围是0x0F~0x3F,也就是屏幕芯片支持最少使用行数是16行(0~15),最多使用64行(0~63)。
从楼主的屏幕显示结果来看,驱动程序里的这一项应该设置的是64行,或者使用的是没有配置这一项,屏幕使用的默认值0x3F
OLED_WR_Byte(0xA8, OLED_CMD);
OLED_WR_Byte(0x3F, OLED_CMD);
所以这一项可以不用考虑。
但是如果是比较严谨的12832的驱动程序,这一项会设置成0x1F,也就是只是用屏幕的32行,这样芯片就不会额外去扫描其余“不存在”的32行。
如果是这样,屏幕只会有一半显示,那么在使用12864屏幕的时候,这一条指令也需要修改成0x3F。
感谢,下面这两条指令居然都错了。已经解决问题了。
OLED_WR_Byte(0xDA, OLED_CMD);
OLED_WR_Byte(0x02, OLED_CMD);
OLED_WR_Byte(0xA8, OLED_CMD);
OLED_WR_Byte(0x3F, OLED_CMD);
页:
[1]