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