「理系フリマ」でGet(ゲット)した有機EL(SSD1306)で「理系フリマ」と表示して遊ぶ。(STM32C011)(水平走査)



目的
再度、全画面表示(水平走査線)の変換して表示


「理系フリマ」でゲットした物(20240504)


![o_coq080.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/dcc525b8-4cb8-3614-937a-b3fec479a97f.jpeg)


1.インストール(つかわないけど)

https://qiita.com/caa45040/items/3c57c159be0fd0f7a718

2.インストール(つかわないけど)

https://qiita.com/caa45040/items/f7698f087967381f91af


3.制作

https://qiita.com/caa45040/items/574231109a31cb6c55eb

![o_coq081.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/dd4b4fa3-4824-185e-e3a3-fc100df09702.jpeg)


4.変換

https://javl.github.io/image2cpp/

![o_coq082.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/7bfecc0c-71fb-9d14-0a11-a93fa19df1cd.jpeg)


5.コンパイル実行、結果

![o_coq083.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/da2e7ff5-003d-2f14-24fd-69a56f302bd3.jpeg)



プログラム


```c++



//有機ELのSSD1306で全画面表示
//秋月のOLEDとアイテンドウの売り切れOLEDのアドレスは3c
//変換は、https://javl.github.io/image2cpp/
//SSD1306_all_128x64_H_C011_3


//ヘッダー
#include <Arduino.h>
#include <Wire.h>


//定義
// ビットマップデータ
// 'H_Edge1', 128x64px
static const unsigned char PROGMEM databytes_H[] = {


  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, 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, 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, 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, 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, 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, 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, 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, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xcf, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xf0, 0x00, 0x07, 0xf8, 0x00, 0x07, 0xff, 0xff, 0xff, 0x1f, 0xf0, 0xff, 0xff, 0xff, 0xff, 
  0xe0, 0x30, 0x00, 0x07, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x1f, 0xf0, 0xff, 0xff, 0xff, 0xff, 
  0x00, 0x30, 0x03, 0xe7, 0x00, 0x07, 0xff, 0xff, 0xfe, 0x03, 0x1f, 0xf0, 0xff, 0xff, 0xff, 0xff, 
  0x00, 0x31, 0xf3, 0xe7, 0xff, 0x87, 0xff, 0xc0, 0x00, 0x01, 0x1f, 0xf0, 0xff, 0xff, 0xff, 0xff, 
  0x01, 0xf1, 0xf3, 0xe7, 0xff, 0x07, 0xff, 0xc0, 0x00, 0x01, 0x1f, 0xf0, 0xff, 0xff, 0xff, 0xff, 
  0xe1, 0xf1, 0xf3, 0xe7, 0xfc, 0x1f, 0x8f, 0xc0, 0x00, 0x01, 0x1f, 0xf0, 0xff, 0x80, 0x00, 0x01, 
  0xe1, 0xf1, 0xf0, 0x07, 0xf8, 0xff, 0x0f, 0xc0, 0x3f, 0xe1, 0x1f, 0xf0, 0xc0, 0x00, 0x00, 0x00, 
  0xe1, 0xf0, 0x00, 0x07, 0xe0, 0xfc, 0x0f, 0xff, 0xff, 0xe1, 0x1f, 0xf0, 0xc0, 0x00, 0x00, 0x00, 
  0xe1, 0xf0, 0x00, 0xe7, 0xe1, 0xf8, 0x1f, 0xff, 0xff, 0xe1, 0x1f, 0xf0, 0xc0, 0x00, 0x3f, 0xc1, 
  0xe1, 0xf9, 0xf3, 0xe7, 0xf0, 0x00, 0x7f, 0xff, 0xff, 0xc1, 0x1f, 0xf0, 0xe1, 0xff, 0xff, 0xc3, 
  0xe0, 0x39, 0xf3, 0xe7, 0xf0, 0x01, 0xff, 0xff, 0xff, 0xc1, 0x1f, 0xf0, 0xff, 0xff, 0xff, 0x87, 
  0x00, 0x39, 0xf3, 0xc7, 0xfe, 0x03, 0xc7, 0xff, 0xff, 0xc3, 0x1f, 0xf0, 0xff, 0xff, 0xff, 0x07, 
  0x00, 0x39, 0xf3, 0x07, 0xfe, 0x0f, 0xc3, 0xff, 0xff, 0x83, 0x1f, 0xf0, 0xff, 0xff, 0xfe, 0x0f, 
  0x01, 0xf8, 0x00, 0x07, 0xf8, 0x3f, 0xc1, 0xff, 0xff, 0x07, 0x1f, 0xf0, 0xff, 0xff, 0xfc, 0x1f, 
  0xe1, 0xf8, 0x00, 0x07, 0xf0, 0x7f, 0xe0, 0xff, 0xff, 0x07, 0x1f, 0xf0, 0xff, 0xe7, 0xfc, 0x3f, 
  0xe1, 0xf8, 0x03, 0xc7, 0xc1, 0xfc, 0x00, 0x7f, 0xff, 0x0f, 0x1f, 0xf0, 0xff, 0xc3, 0xf0, 0xff, 
  0xe1, 0xf9, 0xe3, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x0f, 0xff, 0xf0, 0xff, 0xe1, 0xe1, 0xff, 
  0xe1, 0xff, 0xe3, 0xff, 0x00, 0x00, 0x3c, 0x7f, 0xfc, 0x1f, 0xff, 0xf0, 0xff, 0xf0, 0xc1, 0xff, 
  0xe1, 0xff, 0xe3, 0xff, 0x0c, 0x00, 0x3e, 0x7f, 0xf8, 0x1f, 0xff, 0xf0, 0xff, 0xf0, 0x07, 0xff, 
  0xe0, 0x30, 0x00, 0x03, 0xff, 0xc1, 0xfe, 0x7f, 0xf8, 0x3f, 0xff, 0xf0, 0xff, 0xfc, 0x0f, 0xff, 
  0xe0, 0x30, 0x00, 0x03, 0xf1, 0xc1, 0xcf, 0xff, 0xf0, 0xff, 0xff, 0xf1, 0xff, 0xfe, 0x0f, 0xff, 
  0x80, 0xf0, 0x00, 0x03, 0xe1, 0xc1, 0xc7, 0xff, 0xe0, 0xff, 0xff, 0xe1, 0xff, 0xff, 0x0f, 0xff, 
  0x01, 0xff, 0xe3, 0xff, 0xe1, 0xc1, 0xe3, 0xff, 0xc1, 0xff, 0xff, 0xe3, 0xff, 0xff, 0x07, 0xff, 
  0x0f, 0xff, 0xe3, 0xff, 0xc3, 0xc1, 0xf0, 0xff, 0x03, 0xff, 0xff, 0xc3, 0xff, 0xff, 0x83, 0xff, 
  0x3f, 0xff, 0xe3, 0xff, 0x87, 0xc1, 0xf8, 0x7c, 0x0f, 0xff, 0xff, 0x87, 0xff, 0xff, 0xc3, 0xff, 
  0xff, 0xff, 0xe3, 0xff, 0x0f, 0xc1, 0xf8, 0x38, 0x1f, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xe3, 0xff, 
  0xff, 0xc0, 0x00, 0x01, 0x1f, 0xc1, 0xfc, 0x38, 0x7f, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xc0, 0x00, 0x01, 0x3f, 0xc1, 0xfe, 0x3d, 0xff, 0xff, 0xfe, 0x1f, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xc0, 0x00, 0x01, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 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, 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, 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, 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, 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


};

#define MAX_PAGE                   (7)
#define MAX_COL                    (127)

#define COMMAND_MODE               0x80 // continuation bit is set!
#define DATA_MODE                  0x40

#define SET_COLUMN_ADDRESS         0x21 // takes two bytes, start address and end address of display data RAM
#define SET_PAGE_ADDRESS           0x22 // takes two bytes, start address and end address of display data RAM

#define SET_MEMORY_ADDRESSING_MODE 0x20 // takes one byte as given above
#define HORIZONTAL_ADDRESSING_MODE 0x00


//I2Cに配列を転送する
void write_s(uint8_t *str1, uint8_t len1) {

  Wire.beginTransmission(  0x3c  );

  for (int ii = 0; ii < len1; ii++) {

    //一文字出力
    Wire.write(*str1 ++);

  }//for

  Wire.endTransmission();

}//write_s


//セットページアドレス
void setPageAddress(uint8_t start, uint8_t end)
{
  uint8_t databytes[6] = {COMMAND_MODE, SET_PAGE_ADDRESS, COMMAND_MODE, start, COMMAND_MODE, end};
  write_s(databytes, 6);
}//setPageAddress


//セットカラムアクセス
void setColumnAddress(uint8_t start, uint8_t end)
{
  uint8_t databytes[6] = {COMMAND_MODE, SET_COLUMN_ADDRESS, COMMAND_MODE, start, COMMAND_MODE, end};
  write_s(databytes, 6);
}//setColumnAddress


//セットメモリーアドレシングモード
void setMemoryAddressingMode()
{
  uint8_t databytes[4] = {COMMAND_MODE, SET_MEMORY_ADDRESSING_MODE, COMMAND_MODE, HORIZONTAL_ADDRESSING_MODE};
  //_i2c->write(_writeOpcode, databytes, 4);
  write_s(databytes, 4);
}//setMemoryAddressingMode


//初期化
void setup() {

  delay(3000); //not Delete (絶対消すな)(消しちゃィゃーん)

  //I2Cのポートの変更
  Wire.setSDA(19); //PA10
  Wire.setSCL(18); //PA9

  //I2Cの初期化
  Wire.begin(); //C011
  delay(200);

  //SSD1306の初期化スペル(魔法)
  //0x80,0x8d,0x80,0x14,0x80,0xAF
  write_s( (uint8_t*) "\200\215\200\024\200\257", 6);
  delay(100);

  //セットメモリーアドレシングモード
  setMemoryAddressingMode();

  uint8_t buff_a[((128 / 8) * 64)]; //バッファー
  memset(buff_a, 0, ((128 / 8) * 64) ); //バッファーのクリア
  int dot_1;//ドット

  //1ドットづつ変換する
  for (int x = 0; x < 128; x++) {
    for (int y = 0; y < 64; y++) {

      dot_1 = ( databytes_H[ (y * (128 / 8)) + (x / 8 ) ] >> (7 - (x & 7)) ) & 0x01;
      if (dot_1 != 0) {
        buff_a[x + (y / 8) * (128)] |= (1 << (y & 7));
      }

    }//for y
  }//for x


  //delay(100);
  //64 or 32
  //uint8_t databytes_a[3] = {COMMAND_MODE, 0xDA,0b00010010};
  //write_s(databytes_a, 3);
  //delay(100);


  //範囲の設定
  setPageAddress(0, MAX_PAGE);  // all pages
  setColumnAddress(0, MAX_COL); // all columns

  //データの配列の定義
  uint8_t databytes[2] = {DATA_MODE, 0x00};

  //128x64の表画
  for (int icount = 0; icount < ((128 / 8) * 64); icount++) {
    databytes[1] = 0;
    write_s(databytes, 2);
  }//for



  //128x64の表画
  for (int icount = 0; icount < ((128 / 8) * 64); icount++) {
    databytes[1] = buff_a[icount];
    write_s(databytes, 2);
  }//for

}//setup


//メインループ
void loop() {
}//loop


```