| 
				打卡等级:以坛为家II打卡总天数:570最近打卡:2025-10-31 04:32:55 荣誉版主 
 
	积分3873 
 | 
 
 发表于 2024-9-30 10:52:24
|
显示全部楼层 
| 本帖最后由 大明狐 于 2024-9-30 10:53 编辑 
 如果楼主使用的驱动程序是12832分辨率的屏幕的,就会出现这样的情况。
 12832和12864屏幕的硬件结构不同。
 在初始化的时候12832和12864的配置区别主要有两处:
 
 1、屏幕硬件的行引脚的配置(指令0xDA)
 
 其中第二字节是里的A[4]位产生这个影响的位。
 A[4]的默认值1,也就是配置结果是0x12,是使用所有的64行;
 当A[4]的值是0的时候,也就是配置结果是0x02,是使用所有偶数行(0、2、4、6……)。
 所以如果初始化函数里的相关指令是
 OLED_WR_Byte(0xDA, OLED_CMD);
 OLED_WR_Byte(0x02, OLED_CMD);
 那么在12864屏幕上就会出现这种隔行显示的问题,64行内容只有32行以这样的方式显示出来,其余32行则“显示”在了屏幕以外。
 
 2、屏幕复用率的设置(指令0xA8)
 
 其中A[5:0]这六个位,是设置使用屏幕行数的位。
 A[5:0]的数值范围是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。
 
 
 | 
 |