SSD1306 128x64 OLED 【三】

在不使用Adafruit的Library來試著點SSD1306



一.產生圖形資料

把上圖logo(128x64 bits)轉換成Array data

使用這個網站來轉換 https://javl.github.io/image2cpp/


1. Select Image,匯入圖形檔


2. Image Settings,圖形設定 (沒有要修改的設定)


3. 確認圖形有正常顯示

4. Code output format,選擇 Arduino code, single bitmap

5. Draw mode,選擇 Vertical - 1 bit per pixel

6. 點擊 Generate code產生出陣列資料,然後按 Copy output複製array data



二.Arduino IDE

把下列程式直接複製貼上你的Arduino IDE (上面的logo陣列已經在 NaN[] 裡面)


#include "Wire.h"

const unsigned char NaN [] PROGMEM = {
// 'arduino_logo', 128x64px
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 
0x3f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 
0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x3f, 0x0f, 0x07, 
0x07, 0x03, 0x01, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 
0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff, 
0xff, 0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 
0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x01, 0x01, 0x03, 
0x07, 0x07, 0x0f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 
0x80, 0xf0, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 
0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 
0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x7f, 
0x7f, 0x7f, 0x07, 0x07, 0x07, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf0, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x03, 0x1f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 
0xf8, 0xf8, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x1f, 0x0f, 0x07, 0x01, 0x00, 0x00, 0x00, 
0x80, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf8, 
0xf8, 0xf8, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x1f, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf0, 0xe0, 0xc0, 
0x80, 0x80, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 
0x0f, 0x0f, 0x07, 0x07, 0x03, 0x01, 0x01, 0x00, 0x80, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 
0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x80, 0x00, 0x01, 0x01, 0x03, 0x07, 0x07, 0x0f, 
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x80, 
0x80, 0xc0, 0xe0, 0xf8, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 
0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xfc, 0xf8, 
0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xfc, 0xfc, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x03, 0x00, 
0x70, 0x00, 0x01, 0x0f, 0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x01, 0x81, 0xe7, 
0xff, 0xff, 0x00, 0x00, 0xf8, 0xf8, 0xf8, 0x71, 0x01, 0x03, 0x8f, 0xff, 0x00, 0x00, 0x00, 0xff, 
0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0xff, 
0xff, 0x00, 0x00, 0x00, 0xe0, 0x83, 0x0f, 0x3f, 0x00, 0x00, 0xff, 0xff, 0x07, 0x01, 0x01, 0xf8, 
0xfc, 0xf8, 0x00, 0x01, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf8, 0xf8, 0xfe, 
0xfe, 0xfe, 0xfc, 0xf8, 0xf8, 0xff, 0xff, 0xf8, 0xf8, 0xf8, 0xff, 0xff, 0xf8, 0xf8, 0xf8, 0xfb, 
0xff, 0xff, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xfe, 0xfc, 0xf8, 0xf8, 
0xf9, 0xf9, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xf9, 0xf9, 0xf9, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xff, 
0xff, 0xf8, 0xf8, 0xf8, 0xff, 0xff, 0xfe, 0xf8, 0xf8, 0xf8, 0xff, 0xff, 0xfe, 0xfc, 0xf8, 0xf9, 
0xf9, 0xf9, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff
};

uint32_t i = 0;
uint32_t j = 0;

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);

  Wire.begin();

  delay(1000);
  
  // 3.Software Configuration as below
  // Set MUX Ratio
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xA8);
  Wire.write(0x3F);
  Wire.endTransmission();
  delay(1);

  // Set Display Offset
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xD3);
  Wire.write(0x00);
  Wire.endTransmission();
  delay(1);

  // Set Display Start Line
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0x40);
  Wire.endTransmission();
  delay(10);

  // Set Segment re-map
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xA0);
  Wire.endTransmission();
  delay(1);

  // Set COM Output Scan Direction
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xC0);
  Wire.endTransmission();
  delay(1);

  // Set COM Pins
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xDA);
  Wire.write(0x02);
  Wire.endTransmission();
  delay(1);

  // Set Contrast
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0x81);
  Wire.write(0x7F);
  Wire.endTransmission();
  delay(1);

  // Disable Entire Display ONn
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xA4);
  Wire.endTransmission();
  delay(1);

   // Set Normal Display
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xA6);
  Wire.endTransmission();
  delay(1); 

  // Set Osc Frequency
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xD5);
  Wire.write(0x80);
  Wire.endTransmission();
  delay(1);

  // Enable charge pump regulator
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0x8D);
  Wire.write(0x14);
  Wire.endTransmission();//00,8D,14
  delay(1);

  // Display ON
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xAF);
  Wire.endTransmission();
  delay(1);
  
    for(i=0; i<8; i++)
  {
    //set PAGEn (n 0~7)
    Wire.beginTransmission(0x3C);
    Wire.write(0x00);
    Wire.write(0x22);
    Wire.write(i);
    Wire.write(0x07);
    Wire.endTransmission();
    delay(1); 
    //Set column to 0
    Wire.beginTransmission(0x3C);
    Wire.write(0x00);
    Wire.write(0x21);
    Wire.write(0x00);
    Wire.write(0x7F);
    Wire.endTransmission();
    delay(1); 

    // Draw Pixels
    Wire.beginTransmission(0x3C);
    Wire.write(0x40);
    for(j=0; j<128; j++)
    {
      Wire.write( NaN[i*128 + j] );
    }
    Wire.endTransmission();
    delay(1);
  }
}

void loop(){

}
  

沒意外的話你已經能看到圖形出現在你的OLED

;但意外還是發生了,圖形並不正確




上列程式的初始設定是照datasheet最後的流程圖寫入的,視乎有些地方需要調整

硬體Set COM Pins Hardware Configuratio (DAh)寫入值由0x02h改為12h

  • A[4]=0b, Sequential COM pin configuration
  • A[4]=1b(RESET), Alternative COM pin configuration
  • A[5]=0b(RESET), Disable COM Left/Right remap
  • A[5]=1b, Enable COM Left/Right remap
  // Set COM Pins
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xDA);
  Wire.write(0x12);
  Wire.endTransmission();
  delay(10);

修改後的結果如下




圖形180度翻轉 (改變COM0到COMn的寫入順序)

Set COM Output Scan Direction寫入值由0xC0h改為C8h

  • C0h, X[3]=0b: normal mode (RESET) Scan from COM0 to COM[N –1]
  • C8h, X[3]=1b: remapped mode. Scan from COM[N-1] to COM0
  • Where N is the Multiplex ratio.

  // Set COM Output Scan Direction
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xC8);
  Wire.endTransmission();
  delay(10);

圖形是轉向了;可卻呈現鏡向的情況


Set Segment Re-map寫入值由A0h改為A1h

  • A0h, X[0]=0b: column address 0 is mapped to SEG0 (RESET)
  • A1h, X[0]=1b: column address 127 is mapped to SEG0
  // Set Segment re-map
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xA1);
  Wire.endTransmission();
  delay(10);

結果



修改後的程式

#include "Wire.h"

const unsigned char NaN [] PROGMEM = {
// 'arduino_logo', 128x64px
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 
0x3f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 
0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x3f, 0x0f, 0x07, 
0x07, 0x03, 0x01, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 
0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff, 
0xff, 0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 
0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x01, 0x01, 0x03, 
0x07, 0x07, 0x0f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 
0x80, 0xf0, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 
0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 
0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x7f, 
0x7f, 0x7f, 0x07, 0x07, 0x07, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf0, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x03, 0x1f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 
0xf8, 0xf8, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x1f, 0x0f, 0x07, 0x01, 0x00, 0x00, 0x00, 
0x80, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf8, 
0xf8, 0xf8, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x1f, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf0, 0xe0, 0xc0, 
0x80, 0x80, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 
0x0f, 0x0f, 0x07, 0x07, 0x03, 0x01, 0x01, 0x00, 0x80, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 
0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x80, 0x00, 0x01, 0x01, 0x03, 0x07, 0x07, 0x0f, 
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x80, 
0x80, 0xc0, 0xe0, 0xf8, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 
0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xfc, 0xf8, 
0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xfc, 0xfc, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x03, 0x00, 
0x70, 0x00, 0x01, 0x0f, 0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x01, 0x81, 0xe7, 
0xff, 0xff, 0x00, 0x00, 0xf8, 0xf8, 0xf8, 0x71, 0x01, 0x03, 0x8f, 0xff, 0x00, 0x00, 0x00, 0xff, 
0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0xff, 
0xff, 0x00, 0x00, 0x00, 0xe0, 0x83, 0x0f, 0x3f, 0x00, 0x00, 0xff, 0xff, 0x07, 0x01, 0x01, 0xf8, 
0xfc, 0xf8, 0x00, 0x01, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf8, 0xf8, 0xfe, 
0xfe, 0xfe, 0xfc, 0xf8, 0xf8, 0xff, 0xff, 0xf8, 0xf8, 0xf8, 0xff, 0xff, 0xf8, 0xf8, 0xf8, 0xfb, 
0xff, 0xff, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xfe, 0xfc, 0xf8, 0xf8, 
0xf9, 0xf9, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xf9, 0xf9, 0xf9, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xff, 
0xff, 0xf8, 0xf8, 0xf8, 0xff, 0xff, 0xfe, 0xf8, 0xf8, 0xf8, 0xff, 0xff, 0xfe, 0xfc, 0xf8, 0xf9, 
0xf9, 0xf9, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff
};

uint32_t i = 0;
uint32_t j = 0;

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);

  Wire.begin();

  delay(1000);

  // Set MUX Ratio
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xA8);
  Wire.write(0x3F);
  Wire.endTransmission();
  delay(1);

  // Set Display Offset
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xD3);
  Wire.write(0x00);
  Wire.endTransmission();
  delay(1);

  // Set Display Start Line
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0x40);
  Wire.endTransmission();
  delay(1);

  // Set Segment re-map
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xA1);
  Wire.endTransmission();
  delay(1);

  // Set COM Output Scan Direction
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xC8);
  Wire.endTransmission();
  delay(1);

  // Set COM Pins
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xDA);
  Wire.write(0x12);
  Wire.endTransmission();
  delay(1);

  // Set Contrast
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0x81);
  Wire.write(0x7F);
  Wire.endTransmission();
  delay(1);

  // Disable Entire Display ONn
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xA4);
  Wire.endTransmission();
  delay(1);

   // Set Normal Display
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xA6);
  Wire.endTransmission();
  delay(1); 

  // Set Osc Frequency
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xD5);
  Wire.write(0x80);
  Wire.endTransmission();
  delay(1);

  // Enable charge pump regulator
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0x8D);
  Wire.write(0x14);
  Wire.endTransmission();//00,8D,14
  delay(1);

  // Display ON
  Wire.beginTransmission(0x3C);
  Wire.write(0x00);
  Wire.write(0xAF);
  Wire.endTransmission();
  delay(1);
  
  for(i=0; i<8; i++)
  {
    //set PAGEn (n 0~7)
    Wire.beginTransmission(0x3C);
    Wire.write(0x00);
    Wire.write(0x22);
    Wire.write(i);
    Wire.write(0x07);
    Wire.endTransmission();
    delay(1); 
    //Set column to 0
    Wire.beginTransmission(0x3C);
    Wire.write(0x00);
    Wire.write(0x21);
    Wire.write(0x00);
    Wire.write(0x7F);
    Wire.endTransmission();
    delay(1); 

    // Draw Pixels
    Wire.beginTransmission(0x3C);
    Wire.write(0x40);
    for(j=0; j<128; j++)
    {
      Wire.write( NaN[i*128 + j] );
    }
    Wire.endTransmission();
    delay(1);
  }
}

void loop(){

}


水平移動

使用下列兩行指令即可看到畫面水平移動

0x27,0x00,0x00,0x07,0x07,0x00,0xFF

設定水平移動方向,速度,範圍

  • 26h, X[0]=0, Right Horizontal Scroll
  • 27h, X[0]=1, Left Horizontal Scroll

0x2F

  • 啟動滾動


水平及垂直移動

使用下列兩行指令即可看到畫面水平移動

0x29 0x00 0x00 0x07 0x07 0x01

設定水平及垂直移動方向,速度,範圍

  • 29h, X1X0=01b : Vertical and Right Horizontal Scroll
  • 2Ah, X1X0=10b : Vertical and Left Horizontal Scroll

0x2F

  • 啟動滾動




(1) SSD1306 128x64 OLED 【一】I2C版本
(2) SSD1306 128x64 OLED 【二】 Datasheet

留言

2024

11-27SPI Flash 操作 (Read/Write/Erase)
11-19Rotary Encoder Switch 旋轉編碼開關
11-14Command Line Interface - CLI via UART
11-14【STM32】USB HID - Volume Control
11-13【STM32】USB Custom HID
11-12【STM32】USB HID Keyboard + Mouse
11-12【STM32】USB HID Keyboard
11-12【STM32】USB HID Mouse
10-15SSD1306 128x64 OLED 【五】Wokwi Animator
09-2432F429IDISCOVERY - - LTDC [3] + FMC (SDRAM) + FatFS
09-2432F429IDISCOVERY - - LTDC [2] + FMC (SDRAM)
09-20STM32 + FatFs + SD card via SPI【三】FatFS指令操作II
09-19STM32 + FatFs + SD card via SPI【二】FatFS指令操作
09-18STM32 + FatFs + SD card via SPI【一】移植FatFS
09-0232F429IDISCOVERY - - LTDC [1]
04-17SSD1306 128x64 OLED 【四】Adafruit / GFX Library
04-17Arduino - Serial Plotter繪圖儀
04-16SSD1306 128x64 OLED 【三】
04-15SSD1306 128x64 OLED 【二】 Datasheet
04-12SSD1306 128x64 OLED 【一】I2C版本
03-20【freeRTOS】vTaskDelay 與 vTaskDelayUntil 的差異
03-19【freeRTOS】API功能列表
03-18【freeRTOS】Day1
03-08MBR和Blank project的差別
03-05刪除註冊檔registry的資料
02-27DFU over Bluetooth Low Energy
02-27nRF Util - 使用手冊
02-26nRF Command Line Tools
02-20建立BootLoader settings
02-19Secure DFU packet (ZIP) build 建立含袐鑰的Zip檔
02-19Secure DFU via BLE
02-19Secure DFU via UART
02-16nRF Util 安裝
01-16nRF52840 ic升級成nRF52840 Dongle的程式

2023

11-21[ SEGGER Embedded Studio ] 新增header files
11-21[ SEGGER Embedded Studio ] 編譯nRF52840時遇到的問題
11-07Arduino Nano ESP32 - Debugging除錯模式
11-03Git快速入手 - 使用Git GUI
10-30Git快速入手 - 使用Git Bash
10-12程式碼高亮顯示 -- google-code-prettify

2022

11-30[EZ-PD] CCG6DF CCG6SF的Host SDK遇到編譯錯誤(一)

2019

05-27[ Eagle PCB ] 合板成品
05-23#CASE_001_USB_TOOL_RL78_G12
05-22[ Eagle PCB ] 初次洗板
05-21[ Eagle PCB ] Panelize 併板
05-20[ Eagle PCB ] 建立自己的Library及元件
05-20[ Eagle PCB ] 添加library及元件
05-20[ Eagle PCB ] Introduce

2018

04-25[ TCP test Tool ] 好用的TCP Server/Client工具
01-16RZ/A1H -[0]- Renesas RZ/A1H YR0K77210S009BE BSP環境架設

2017

12-11EZ USB Suit使用JLink online debug FX3
10-20RL78 -[12]- CS+_CACX_Lab5_LowPower mode
10-16RL78 -[11]- CS+_CACX_Lab4_ADC_溫度感測
10-13RL78 -[10]- CS+_CACX_Lab4_ADC_內部參考電壓
10-13RL78 -[9]- CS+_Lab3_I2C + MPU6050
10-13RL78 -[8]- CS+_Lab2_Uart transmit
10-12RL78 -[7]- Renesas Flash Programmer 獨立燒錄軟體
10-12RL78 -[6]- CS+_雜記
10-12RL78 -[5]- CS+_tracking variables on debug mode
10-12RL78 -[4]- CS+_顯示ROM與RAM的使用size
10-12RL78 -[3]- CS+_Lab1_Led blinking
10-12RL78 -[2]- CS+專案建立
10-12RL78 -[1]- 開發環境介紹
10-06ESP-01 -[0]- 硬體設置
10-06LinkIt 7688 program Renesas RL78/G12 by 1-wire
10-06LinkIt Smart 7688 -[3]- Build the firmware from source codes
10-06LinkIt Smart 7688 -[2]- 使用UART進入bootloader / kernel console
10-06LinkIt Smart 7688 -[1]- 使用SSH連接kernel console
10-06LinkIt Smart 7688 -[0]- 初次使用
07-14LinkIt Smart 7688 -[9]- Using MRAA SPI in Python
07-13LinkIt Smart 7688 -[8]- Using MRAA UART in Python
07-12LinkIt Smart 7688 -[7]- Using MRAA I2C in Python
07-12LinkIt Smart 7688 -[6]- Using MRAA PWM in Python
07-12LinkIt Smart 7688 -[5]- Using MRAA GPIO in Python
07-10LinkIt Smart 7688 -[4]- 雜記
06-29輕乳酪蛋糕 Cotton Cheesecake
06-26VirtualBox 的 Ubuntu與Windows 共用資料夾

2015

04-29偵測USB PnP