0.96寸和2.42寸OLED屏幕滚动初始化设置

做项目时需要用到OLED屏幕滚动显示的功能,复制其他博主的代码完成了水平滚动显示的功能。http://www.51hei.com/bbs/dpj-180145-1.html

但是,2.42寸OLED的滚动显示和0.96寸初始化设置还是有略微的区别的,如果直接复制粘贴,你会发现屏幕只有一小块地方在动。

网上搜了很久,都是0.96寸的介绍应用,无奈之下自己查阅英文文档,最终解决。

希望为要使用2.42寸屏幕的朋友提供些许帮助。

贴上两者的初始化设置代码。

 

0.96

 

void OLED_Init(void)
{

   GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);//使能PORTA~E,PORTG时钟
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13 ;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
    GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化
    OLED_RST_Set();
    delay_ms(100);
    OLED_RST_Clr();
    delay_ms(200);
    OLED_RST_Set();
    OLED_WR_Byte(0xAE,OLED_CMD); //关闭显示
    OLED_WR_Byte(0xD5,OLED_CMD); //设置时钟分频因子,震荡频率
    OLED_WR_Byte(0x80,OLED_CMD);   //[3:0],分频因子;[7:4],震荡频率	
    OLED_WR_Byte(0xA8,OLED_CMD); //设置驱动路数
    OLED_WR_Byte(0X3F,OLED_CMD); //默认0X3F(1/64) 
    OLED_WR_Byte(0xD3,OLED_CMD); //设置显示偏移
    OLED_WR_Byte(0X00,OLED_CMD); //默认为0
    
    OLED_WR_Byte(0x40,OLED_CMD); //设置显示开始行 [5:0],行数.
    //												    
    OLED_WR_Byte(0x8D,OLED_CMD); //电荷泵设置
    OLED_WR_Byte(0x14,OLED_CMD); //bit2,开启/关闭
    OLED_WR_Byte(0x20,OLED_CMD); //设置内存地址模式
    OLED_WR_Byte(0x02,OLED_CMD); //[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;
    //
    OLED_WR_Byte(0xA1,OLED_CMD); //段重定义设置,bit0:0,0->0;1,0->127;
    
    OLED_WR_Byte(0xc8,OLED_CMD); //(0xC0/0xC8) Set COM Output Scan Direction  行扫描顺序:从上到下
    
    //OLED_WR_Byte(0xC0,OLED_CMD); //设置COM扫描方向;bit3:0,普通模式;1,重定义模式 COM[N-1]->COM0;N:驱动路数
    OLED_WR_Byte(0xDA,OLED_CMD); //设置COM硬件引脚配置
    OLED_WR_Byte(0x12,OLED_CMD); //[5:4]配置
    
    OLED_WR_Byte(0x81,OLED_CMD); //对比度设置
    OLED_WR_Byte(0xcf,OLED_CMD); //1~255;默认0X7F (亮度设置,越大越亮)
    
    OLED_WR_Byte(0xD9,OLED_CMD); //设置预充电周期
    OLED_WR_Byte(0xf1,OLED_CMD); //[3:0],PHASE 1;[7:4],PHASE 2;
    OLED_WR_Byte(0xDB,OLED_CMD); //设置VCOMH 电压倍率
    OLED_WR_Byte(0x40,OLED_CMD); //[6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;
    
    OLED_WR_Byte(0xA4,OLED_CMD); //全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)
    OLED_WR_Byte(0xA6,OLED_CMD); //设置显示方式;bit0:1,反相显示;0,正常显示	   
    
    OLED_WR_Byte(0x8d,OLED_CMD);
    OLED_WR_Byte(0x14,OLED_CMD);
    delay_ms(200);
    OLED_WR_Byte(0xAF,OLED_CMD); //开启显示	 
    delay_ms(200);
    OLED_Clear();
    OLED_Set_Pos(0, 0);

		//以下为实现滚屏增加的初始化配置
	OLED_WR_Byte(0x2E,OLED_CMD);        //关闭滚动
  OLED_WR_Byte(0x26,OLED_CMD);        //水平向左或者右滚动 26/27
  OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
  OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0  (000-111)
  OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
  OLED_WR_Byte(0x07,OLED_CMD);        //终止页 7
  OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
  OLED_WR_Byte(0xFF,OLED_CMD);        //虚拟字节	 
  OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动	
}

 

2.42

前面部分的设置都是一样的。2.42寸屏幕的代码需要增加一行虚拟字节,修改一行虚拟字节,英文注释为官方文档复制

		//以下为实现滚屏增加的初始化配置
	OLED_WR_Byte(0x2E,OLED_CMD);        //关闭滚动
  OLED_WR_Byte(0x26,OLED_CMD);        //水平向左或者右滚动 26/27
  OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
  OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0  (000-111)
  OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
  OLED_WR_Byte(0x07,OLED_CMD);        //终止页 7
  OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节  //E[7:0] : Dummy byte (Set as 00h)

//不同之处 不同之处 不同之处 不同之处 
  OLED_WR_Byte(0x00,OLED_CMD);  //虚拟字节 //F[7:0] : Define the start column (RESET = 00h) 
  OLED_WR_Byte(0x7F,OLED_CMD);  //G[7:0] : Define the end column address (RESET = 7Fh) 

//  OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动