OLED SSD1306 与 SSD1315 在初始化的区别


在使用0.96寸的OLED时,发现之前的代码不能正常通过单片机的IIC使用DMA进行刷新,刷新时总是错一位,后来查阅资料发现是现在的OLED使用了SSD1315替换了SSD1306控制芯片,贴一下各个初始化过程,方便记录:

SSD1306初始化:

 

 1 /**
 2   * @brief  OLED初始化
 3   * @param  None
 4   * @retval None.
 5   */
 6 void OLED_Init(void)
 7 {
 8 #if SENDDTA_DMA
 9         I2C_DMA_WriteReg( (uint8_t*)OLED_Init_CMD, OLED_ADDRESS,OLED_WriteCom_Addr,sizeof(OLED_Init_CMD)); //sizeof(OLED_Init_CMD)
10 #else
11 //  DelayMs(100); //这里的延时很重要
12     delay_ms(10);
13     WriteCmd(0xAE); //display off
14     WriteCmd(0x20); //Set Memory Addressing Mode
15     WriteCmd(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
16     WriteCmd(0xb0); //Set Page Start Address for Page Addressing Mode,0-7
17     WriteCmd(0xc8); //Set COM Output Scan Direction
18     WriteCmd(0x00); //---set low column address
19     WriteCmd(0x10); //---set high column address
20     WriteCmd(0x40); //--set start line address
21     WriteCmd(0x81); //--set contrast control register
22     WriteCmd(0xff); //亮度调节 0x00~0xff
23     WriteCmd(0xa1); //--set segment re-map 0 to 127
24     WriteCmd(0xa6); //--set normal display
25     WriteCmd(0xa8); //--set multiplex ratio(1 to 64)
26     WriteCmd(0x3F); //
27     WriteCmd(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
28     WriteCmd(0xd3); //-set display offset
29     WriteCmd(0x00); //-not offset
30     WriteCmd(0xd5); //--set display clock divide ratio/oscillator frequency
31     WriteCmd(0xf0); //--set divide ratio
32     WriteCmd(0xd9); //--set pre-charge period
33     WriteCmd(0x22); //
34     WriteCmd(0xda); //--set com pins hardware configuration
35     WriteCmd(0x12);
36     WriteCmd(0xdb); //--set vcomh
37     WriteCmd(0x20); //0x20,0.77xVcc
38     WriteCmd(0x8d); //--set DC-DC enable
39     WriteCmd(0x14); //
40     WriteCmd(0xaf); //--turn on oled panel
41 #endif
42 }

这里使用默认是刷新方式,按照页写数据没有问题,使用DMA时需要把照寻址方式修改为了水平寻址时就出现了刷新数据不对的问题

为此,我直接使用了网络上默认的方式对DMA发送指令进行初始化

const uint8_t OLED_Init_CMD[] = 
{ 
   0xAE,0x00,0x10,0x40,0xB0,0x81,0xFF,0xA1,0xA6,0xA8,
   0x3F,0xC8,0xD3,0x00,0xD5,0x80,0xD8,0x05,0xD9,0xF1,
   0xDA,0x12,0xDB,0x30,0x8D,0x14,0xAF,0x20,0x00
};

发现使用改方式刷新SSD1315类型的OLED时会出问题,对其进行修改:

const uint8_t OLED_Init_CMD[] = 
{ 
  0xae,0x00,0x10,0x40,0x81,0xcf,0xa1,0xc8,0xa6,0xa8,
  0x3f,0xd3,0x00,0xd5,0x80,0xd9,0xf1,0xda,0x12,0xdb,
  0x40,0x20,0x00,0x8d,0x14,0xa4,0xa6,0xaf
};

立刻正常,看来两个片子的工作模式还是有些区别的


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM