User manual

133 134
i2c_oled_write_command(i2cbaseadr,0xff); // 0..ff
//
i2c_oled_write_command(i2cbaseadr,0xD9); // set precharge period
i2c_oled_write_command(i2cbaseadr,0xF1); // F1 acher staerker, 11//22 weniger
stark
//
i2c_oled_write_command(i2cbaseadr,0xDB); // COM Deselect level
i2c_oled_write_command(i2cbaseadr,0x40); // 0.83*VCC laut datenblatt von legendary
//
i2c_oled_write_command(i2cbaseadr,0xA4); // Display on alle pixel ein
//
i2c_oled_write_command(i2cbaseadr,0xA6); // set normal display a6=normal
a7=invertiert
//
i2c_oled_write_command(i2cbaseadr,0xAF); // enable display
//
}
// zeilen 0..7
unsigned char i2c_oled_write_top(unsigned char i2cbaseadr, int zeile,
int bytes, unsigned char barray[],signed int sh1106padding)
{
int i;
i2c_oled_write_command(i2cbaseadr,0x20); // page address mode
i2c_oled_write_command(i2cbaseadr,0x02); // page address mode
// **
//
i2c_oled_write_command(i2cbaseadr,0xb0+(zeile & 7)); // B0..B7
//
i2c_oled_write_command(i2cbaseadr,0x00); // $00 lower nibble col + x3x2x1x0
i2c_oled_write_command(i2cbaseadr,0x10); // $10 high nibble col + x3x2x1x0
//
// DANN Daten senden Umschalten auf Daten Modus
//
// ACHTUNG bei Arduino anscheinend max 32 bytes data
// Wirelib mxa 32 bytes buffer size !!
// daher zerlegen noetig !!
// AChtung col 1..64-seg95..seg32 row 1..48 com32..com55
// zahl bytes / 8 teilbar !!
int j=0;
int k =0;
// MAX LIMIT daher zwei schleifen bei Arduino
Wire.beginTransmission(i2cbaseadr);
Wire.write(0x40); // 0100 0000 co=0 DC =1 ist data follow no cmd repeat
for (i=0; i<16; i++) {
Wire.write(0);
}
Wire.endTransmission();
Wire.beginTransmission(i2cbaseadr);
Wire.write(0x40); // 0100 0000 co=0 DC =1 ist data follow no cmd repeat
for (i=0; i<16; i++) {
Wire.write(0);
}
Wire.endTransmission();
for (k=0; k<8; k++) {
Wire.beginTransmission(i2cbaseadr);
Wire.write(0x40); // 0100 0000 co=0 DC =1 ist data follow no cmd repeat
for (i=0; i<bytes/8; i++) {
Wire.write(barray[j++]);
}
Wire.endTransmission();
}
//
}
// ACHTUNG VERZAHNTes Display...
void disp_lcd_frombuffer() {
// 132 x an der Stelle !!
// 64yx48
// AChtung col 1..64-seg95..seg32 row 1..48 com32..com55
// verzahnt com 0..23 nach 48..2 und com 32..55 nach row 47..1
// offsets im transfer std 0..8
i2c_oled_write_top(i2coledssd, 0, 64, &lcdbuffer[0], 0);
i2c_oled_write_top(i2coledssd, 1, 64, &lcdbuffer[64], 0);
i2c_oled_write_top(i2coledssd, 2, 64, &lcdbuffer[64*2], 0);
i2c_oled_write_top(i2coledssd, 3, 64, &lcdbuffer[64*3], 0);
i2c_oled_write_top(i2coledssd, 4, 64, &lcdbuffer[64*4], 0);
i2c_oled_write_top(i2coledssd, 5, 64, &lcdbuffer[64*5], 0);
}
// Buffer loeschen mit farbe
// 0 oder ff
#dene COLOR_BLACK 0
#dene COLOR_WHITE 1 // sonderfall
void disp_buffer_clear(unsigned short data) {
unsigned char *ptr = (unsigned char*)&lcdbuffer[0];
unsigned char datal = 0;
if (data >0) datal = 0xffffffff; // alle an dann beim loeschen
int i = 0;
for (i = 0; i<LCDSIZE/8; i++) {
*ptr++ = datal;
}
}