// In lcd_gfx.h einfügen: void lcd_drawBitmap(uint8_t px, uint8_t py, const uint8_t bitmap[]); // draw bitmap at pixel position x, y. // In lcd_gfx.c einfügen: void lcd_drawBitmap(uint8_t px, uint8_t py, const uint8_t bitmap[]) { uint8_t size_x = pgm_read_byte(&bitmap[0]); // width of bitmap in px uint8_t size_y = pgm_read_byte(&bitmap[1]); // height of bitmap in px uint8_t rows; uint8_t x, y; uint16_t bufadr; uint8_t mask; uint8_t bm; // calculate count of rows (1 row = 8 px = 1 byte) rows = size_y / 8; if (size_y % 8 != 0) rows++; // display all bytes in bitmap. bitmap starts at index 2 for (uint16_t i = 2; i < rows * size_x + 2; i++) { bm = pgm_read_byte(&bitmap[i]); y = (i - 2) / size_x * 8 + py; x = (i - 2) % size_x + px; bufadr = y / 8 * DISPLAY_WIDTH + x; // build bitmap mask mask = 0; for (uint8_t n = 0; n < y % 8; n++) mask += 1 << n; // display upper byte displayBuffer[bufadr] &= mask; displayBuffer[bufadr] |= (bm << (y % 8)); // display lower byte, if necessary if (y % 8 != 0) { mask = ~mask; bufadr += DISPLAY_WIDTH; displayBuffer[bufadr] &= mask; displayBuffer[bufadr] |= (bm >> (8 - y % 8)); } } }