相同的程序在 红黑白三色 屏幕上不错位,
但是在双色屏幕就错位(如上图)
查DataSheet 之后在例程里找到
//初始化屏幕
void OLED_GUIInit(void)
{
OLED_RES_Clr(); // Module reset
delay_ms(20); //At least 10ms delay
OLED_RES_Set();
delay_ms(20); //At least 10ms delay
Epaper_READBUSY();
OLED_WR_REG(0x12); //SWRESET
Epaper_READBUSY();
OLED_WR_REG(0x01); //Driver output control
OLED_WR_DATA8(0x27);
OLED_WR_DATA8(0x01);
OLED_WR_DATA8(0x01);
OLED_WR_REG(0x11); //data entry mode
OLED_WR_DATA8(0x01);
OLED_WR_REG(0x44); //set Ram-X address start/end position
OLED_WR_DATA8(0x00);
OLED_WR_DATA8(0x0F); //0x0F-->(15+1)*8=128
OLED_WR_REG(0x45); //set Ram-Y address start/end position
OLED_WR_DATA8(0x27); //0xF9-->(249+1)=250
OLED_WR_DATA8(0x01);
OLED_WR_DATA8(0x00);
OLED_WR_DATA8(0x00);
OLED_WR_REG(0x3C); //BorderWavefrom
OLED_WR_DATA8(0x05);
OLED_WR_REG(0x21); // Display update control
OLED_WR_DATA8(0x00);
OLED_WR_DATA8(0x80);
OLED_WR_REG(0x18); //Read built-in temperature sensor
OLED_WR_DATA8(0x80);
OLED_WR_REG(0x4E); // set RAM x address count to 0;
OLED_WR_DATA8(0x00);
OLED_WR_REG(0x4F); // set RAM y address count to 0X199;
OLED_WR_DATA8(0x27);
OLED_WR_DATA8(0x01);
Epaper_READBUSY();
}
其中
OLED_WR_REG(0x44); //set Ram-X address start/end position
OLED_WR_DATA8(0x00);
OLED_WR_DATA8(0x0F); //0x0F-->(15+1)*8=128
//值是对的,但是后一行可疑
OLED_WR_REG(0x45); //set Ram-Y address start/end position
OLED_WR_DATA8(0x27); //0xF9-->(249+1)=250
//但是后一行可疑
而这几行正是设置地址的设置
OLED_WR_REG(0x4E); // set RAM x address count to 0;
OLED_WR_DATA8(0x00);
OLED_WR_REG(0x4F); // set RAM y address count to 0X199;
OLED_WR_DATA8(0x27);
同样这也是相同的可疑之处
试了1小时终于把值试出来了(@中景园官方)
改为设置之内的值
就好了。。。。
改为如下
//初始化屏幕
void OLED_GUIInit(void)
{
OLED_RES_Clr(); // Module reset
delay_ms(20); //At least 10ms delay
OLED_RES_Set();
delay_ms(20); //At least 10ms delay
Epaper_READBUSY();
OLED_WR_REG(0x12); //SWRESET
Epaper_READBUSY();
OLED_WR_REG(0x01); //Driver output control
OLED_WR_DATA8(0x27);
OLED_WR_DATA8(0x01);
OLED_WR_DATA8(0x01);
OLED_WR_REG(0x11); //data entry mode
OLED_WR_DATA8(0x01);
OLED_WR_REG(0x44); //set Ram-X address start/end position
OLED_WR_DATA8(0x00); //X address start L5B
OLED_WR_DATA8(0x0F); //X address end L5B 0x0F-->(15+1)*8=128
OLED_WR_REG(0x45); //set Ram-Y address start/end position
/* 黑白双色坐标 */
OLED_WR_DATA8(0xF9);
OLED_WR_DATA8(0x01); //Y End 0xF9-->(249+1)=250
OLED_WR_DATA8(0x2E); //Y Start 00
OLED_WR_DATA8(0x00);
/* 黑白红三色坐标
OLED_WR_DATA8(0x27); //0xF9-->(249+1)=250
OLED_WR_DATA8(0x01);
OLED_WR_DATA8(0x00);
OLED_WR_DATA8(0x00);
*/
OLED_WR_REG(0x3C); //BorderWavefrom
OLED_WR_DATA8(0x05);
OLED_WR_REG(0x21); // Display update control
OLED_WR_DATA8(0x00);
OLED_WR_DATA8(0x80);
OLED_WR_REG(0x18); //Read built-in temperature sensor
OLED_WR_DATA8(0x80);
OLED_WR_REG(0x4E); // set RAM x address count to 0;
OLED_WR_DATA8(0x00);
OLED_WR_REG(0x4F); // set RAM y address count to 0X199;
OLED_WR_DATA8(0x27); //27 纸筒接缝处坐标
OLED_WR_DATA8(0x01); //1
Epaper_READBUSY();
}