Всё возможно …
Вот код под 128х32:
#include <Wire.h>
#define ssd1306_addr 0x3C
static const uint8_t PROGMEM init_bytes[]={0x00, 0xae, 0xd5, 0x80, 0xa8, 0x1f, 0xd3, 0x00, 0x40, 0x8d, 0x14, 0x20, 0x00, 0xa1, 0xc8,
0x81, 0xff, 0xda, 0x02, 0xd9, 0xf1, 0xdb, 0x40, 0x21, 0x00, 0x7f, 0x22, 0x00, 0x03, 0xa4, 0xa6, 0xaf};
static const uint8_t PROGMEM arduino[] = {
0x00, 0x7c, 0x12, 0x12, 0x12, 0x7c, 0x00, 0x7e, 0x12, 0x12, 0x12, 0x6c, 0x00, 0x7e, 0x42, 0x42,
0x42, 0x3c, 0x00, 0x3e, 0x40, 0x40, 0x40, 0x3e, 0x00, 0x7a, 0x00, 0x7e, 0x08, 0x10, 0x20, 0x7e,
0x00, 0x3c, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x40, 0x00, 0x7e, 0x12, 0x12, 0x12, 0x6c, 0x00, 0x3e,
0x40, 0x40, 0x40, 0x3e, 0x00
};
void setup() {
Wire.begin();
Wire.setClock(800000);
Wire.beginTransmission(ssd1306_addr);
for (uint8_t i=0; i<sizeof(init_bytes); i++) {
Wire.write(pgm_read_byte(init_bytes+i));
}
Wire.endTransmission();
}
void loop() {
uint8_t p=0;
Wire.beginTransmission(ssd1306_addr);
Wire.write(0x40);
for (uint8_t i=0;i<28;i++) Wire.write(pgm_read_byte(arduino+p++));
Wire.endTransmission();
Wire.beginTransmission(ssd1306_addr);
Wire.write(0x40);
for (uint8_t i=0;i<25;i++) Wire.write(pgm_read_byte(arduino+p++));
Wire.endTransmission();
for (uint8_t i=0;i<128*4/16-3;i++) {
Wire.beginTransmission(ssd1306_addr);
Wire.write(0x40);
Wire.write(0x33);
Wire.write(0x33);
Wire.write(0xCC);
Wire.write(0xCC);
Wire.write(0x33);
Wire.write(0x33);
Wire.write(0xCC);
Wire.write(0xCC);
Wire.write(0x33);
Wire.write(0x33);
Wire.write(0xCC);
Wire.write(0xCC);
if (i<(128*4/16-4)) {
Wire.write(0x33);
Wire.write(0x33);
Wire.write(0xCC);
Wire.write(0xCC);
}
Wire.endTransmission();
}
}
Тот что на Wokwi под 128х64 и должен был перезатирать надпись на 128х32 дисплее …




