「デカ文字」24x32で「12345」を表示(128x32)(SSD1306)(STM32G011J4M7)


「デカ文字」24x32で「12345」を表示(128x32)(SSD1306)(STM32G011J4M7)


Arduino STM32 oled ssd1306 STM32C011



x 過去ログを見ょ
x 「Arduino」関連
x りせっと簡素化のため電源を数回入れ直せ!!


目的
OLEDのテスト


結果

![o_cop953.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/40abd7b3-d083-65eb-261b-c4882a151e29.jpeg)



プログラム


```c++


//有機ELのSSD1306で「デカ文字」キャラクターを描画
//秋月のOLEDとアイテンドウの売り切れ?OLEDのアドレスは3C
//SSD1306_128x32_BIG_char_24_C011_1


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


//定義
#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};
  write_s(databytes, 4);
}//setMemoryAddressingMode


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


//バッファのクリア
void clearDisplay(void) {
  memset(buff_a, 0, (128 / 8) * 64);
}//clearDisplay


int start_x = 0; //xの開始位置
int start_y = 0; //yの開始位置


//デカ文字を1文字書く
void BIG_char(char char_i) {

  char_i = char_i - '0';

  //int char_i = 0;   //キャラクター番号
  //int start_x = 20; //xの開始位置
  //int start_y = 10; //yの開始位置
  int dot_1;        //ドットのオン、オフ
  //キャラクターを描画
  for (int x = 0; x < 24; x++) {
    for (int y = 0; y <  32; y++) {

      dot_1 =
        ( databytes[ (y * (24 / 8)) + (x / 8 ) + (char_i * (24 * 32 / 8)) ] >> (7 - (x & 7)) ) & 0x01;
      if (dot_1 != 0) {
        buff_a[(start_x + x) + ((start_y + (y*2)) / 8) * (128)] |= (1 << ((start_y + (y*2)) & 7));
      }

    }//for y
  }//for x

  start_x = start_x + 24;

}//BIG_char


// テキストの開始位置を設定
void setCursor(int x, int y) {
  start_x = x; //xの開始位置
  start_y = y; //yの開始位置
}//setCursor


//文字列の表示 nana_seg
void ns_printf(char *str1) {
  //文字の中身がゼロか
  while (*str1) {

    //一文字出力
    BIG_char( *str1 ++ );

  } //while
}//ns_printf


//再表示
void display(void) {
  //範囲の設定
  setPageAddress(0, MAX_PAGE);  // all pages
  setColumnAddress(0, MAX_COL); // all columns

  //128x64の再描画
  uint8_t databytes_d[2] = {DATA_MODE, 0x00};
  for (int icount = 0; icount < ((128 / 8) * 64); icount++) {
    databytes_d[1] = buff_a[icount];
    write_s(databytes_d, 2);
  }//for icount
}//display


//SSD1306の初期化
void display_begin(void) {
  //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();
}//display_begin

//初期化
void setup() {

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

  //SSD1306の初期化
  display_begin();

  //バッファのクリア
  clearDisplay();

  // テキストの開始位置を設定
  setCursor((128-(24*5))/2,0);

  //デカ文字を1文字書く
  //BIG_char('1');

  //デカ文字を表示
  ns_printf("12345"); 
  //ns_printf("54321");

  //再表示
  display();

}//setup


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


```


f24x32_0_9.h



```c++:f24x32_0_9.h


// ビットマップデータ
// 'soiya1', 128x640px
static const unsigned char PROGMEM databytes[] = {

// 'f24x64_0_9', 24x640px

  0xff, 0x00, 0xff, 0xfe, 0x18, 0x7f, 0xfc, 0xff, 0x3f, 0xf9, 0xff, 0x9f, 0xf3, 0xff, 0xcf, 0xf3, 
  0xff, 0xcf, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 
  0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 
  0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 
  0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 
  0xe7, 0xf3, 0xff, 0xe7, 0xf3, 0xff, 0xcf, 0xf8, 0xff, 0x8f, 0xfc, 0x3e, 0x1f, 0xfe, 0x00, 0x3f, 
  0xff, 0x03, 0xff, 0xfe, 0x03, 0xff, 0xfc, 0xe7, 0xff, 0xf9, 0xe7, 0xff, 0xfb, 0xe7, 0xff, 0xff, 
  0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 
  0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 
  0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 
  0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 
  0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xfe, 0x00, 0x7f, 0xfc, 0x00, 0x3f, 
  0xff, 0x00, 0xff, 0xfe, 0x18, 0x7f, 0xfc, 0xff, 0x3f, 0xf9, 0xff, 0x9f, 0xf3, 0xff, 0xcf, 0xf3, 
  0xff, 0xcf, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xf7, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 
  0xe7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x9f, 0xff, 0xff, 0x3f, 0xff, 0x80, 0x7f, 
  0xff, 0x00, 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf3, 
  0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 
  0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf1, 0xfe, 0x07, 0xf8, 0x00, 0x07, 
  0xff, 0x00, 0xff, 0xfe, 0x18, 0x7f, 0xfc, 0xff, 0x3f, 0xf9, 0xff, 0x9f, 0xf3, 0xff, 0xcf, 0xf3, 
  0xff, 0xcf, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 
  0xe7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x9f, 0xff, 0xff, 0x3f, 0xff, 0x00, 0x7f, 
  0xff, 0x00, 0x7f, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe7, 0xff, 
  0xff, 0xe7, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf3, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 
  0xf3, 0xf3, 0xff, 0xf7, 0xf3, 0xff, 0xe7, 0xf8, 0xff, 0xcf, 0xfc, 0x3e, 0x1f, 0xfe, 0x00, 0x3f, 
  0xff, 0xfe, 0x7f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x7f, 0xff, 0xf8, 0xff, 0xff, 0xf9, 0xff, 0xff, 
  0xe1, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x0f, 0xff, 0xfe, 0x19, 0xff, 0xfc, 0x39, 
  0xff, 0xf8, 0x79, 0xff, 0xf1, 0xf9, 0xff, 0xf3, 0xf9, 0xff, 0xe3, 0xf9, 0xff, 0xe7, 0xf9, 0xff, 
  0xe7, 0xf1, 0xf7, 0xe0, 0x00, 0x07, 0xe0, 0x00, 0x07, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 
  0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 
  0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 
  0xf0, 0x00, 0x07, 0xf0, 0x00, 0x07, 0xe7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xef, 0xff, 0xff, 0xe7, 
  0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 
  0xff, 0xe3, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xfe, 0x00, 0x7f, 
  0xff, 0x20, 0x7f, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe7, 0xff, 
  0xff, 0xe7, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf3, 0xff, 0xff, 
  0xf3, 0xff, 0xff, 0xf7, 0xf3, 0xff, 0xe7, 0xf8, 0xff, 0xcf, 0xfc, 0x3e, 0x1f, 0xfe, 0x00, 0x3f, 
  0xff, 0x00, 0xff, 0xfe, 0x18, 0x7f, 0xfc, 0xff, 0x3f, 0xf9, 0xff, 0x9f, 0xf3, 0xff, 0xcf, 0xf3, 
  0xff, 0xcf, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xef, 0xe7, 0xff, 0xff, 0xe7, 0xff, 
  0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xe0, 0x00, 0x7f, 
  0xe0, 0x00, 0x3f, 0xe1, 0xff, 0x3f, 0xe3, 0xff, 0x9f, 0xe7, 0xff, 0xcf, 0xe7, 0xff, 0xe7, 0xe7, 
  0xff, 0xe7, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 
  0xf3, 0xf3, 0xff, 0xf7, 0xf3, 0xff, 0xe7, 0xf8, 0xff, 0xcf, 0xfc, 0x3e, 0x1f, 0xfe, 0x00, 0x3f, 
  0xc0, 0x00, 0x0f, 0xc0, 0x00, 0x03, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xcf, 0xff, 
  0xff, 0x8f, 0xff, 0xff, 0x0f, 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xf9, 
  0xff, 0xff, 0xf3, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xc7, 0xff, 0xff, 0x8f, 0xff, 0xff, 0x0f, 0xff, 
  0xfe, 0x1f, 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xf8, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xf1, 
  0xff, 0xff, 0xe1, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xe3, 0xff, 
  0xff, 0xe3, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 
  0xff, 0x00, 0xff, 0xfe, 0x18, 0x7f, 0xfc, 0xff, 0x3f, 0xf9, 0xff, 0x9f, 0xf3, 0xff, 0xcf, 0xf3, 
  0xff, 0xcf, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 
  0xe7, 0xf3, 0xff, 0xef, 0xf3, 0xff, 0xcf, 0xf9, 0xff, 0x9f, 0xfc, 0xff, 0x3f, 0xfe, 0x00, 0x7f, 
  0xff, 0x00, 0x7f, 0xfe, 0x3e, 0x3f, 0xfc, 0xff, 0x9f, 0xf9, 0xff, 0xcf, 0xf3, 0xff, 0xe7, 0xf3, 
  0xff, 0xe7, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 
  0xf3, 0xf3, 0xff, 0xf7, 0xf3, 0xff, 0xe7, 0xf8, 0xff, 0xcf, 0xfc, 0x3e, 0x1f, 0xfe, 0x00, 0x3f, 
  0xff, 0x00, 0xff, 0xfe, 0x18, 0x7f, 0xfc, 0xff, 0x3f, 0xf9, 0xff, 0x9f, 0xf3, 0xff, 0xcf, 0xf3, 
  0xff, 0xc7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 
  0xe7, 0xf3, 0xff, 0xe7, 0xf3, 0xff, 0xe7, 0xf9, 0xff, 0xe7, 0xfc, 0xff, 0x07, 0xfe, 0x00, 0x07, 
  0xff, 0x00, 0x67, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 
  0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xc7, 0xff, 0xff, 
  0xc7, 0xff, 0xff, 0xc7, 0xff, 0xff, 0x8f, 0xff, 0xfc, 0x1f, 0xff, 0xf0, 0x3f, 0xff, 0xe1, 0xff

};


```