39 static uint8_t s_invertByte = 0x00000000;
40 const uint8_t *s_font6x8 = &ssd1306xled_font6x8[3];
55 fill_Data ^= s_invertByte;
99 uint8_t text_index = 0;
100 uint8_t page_offset = 0;
116 if (page_offset == s_fixedFont.
pages)
133 uint8_t c = ch[j] - 32;
139 uint16_t offset = (c * s_fixedFont.
pages + page_offset) * s_fixedFont.
width;
140 for( i=0; i<s_fixedFont.
width; i++)
143 if ( style == STYLE_NORMAL )
145 data = pgm_read_byte(&s_fixedFont.
data[offset]);
147 else if ( style == STYLE_BOLD )
149 uint8_t temp = pgm_read_byte(&s_fixedFont.
data[offset]);
155 uint8_t temp = pgm_read_byte(&s_fixedFont.
data[offset + 1]);
156 data = (temp & 0xF0) | ldata;
157 ldata = (temp & 0x0F);
162 x += s_fixedFont.
width;
172 uint8_t text_index = 0;
173 uint8_t page_offset = 0;
189 if (page_offset == (s_fixedFont.
pages << 1))
206 uint8_t c = ch[j] - 32;
212 uint16_t offset = (c * s_fixedFont.
pages + (page_offset >> 1)) * s_fixedFont.
width;
213 for( i=0; i<s_fixedFont.
width; i++)
216 if ( style == STYLE_NORMAL )
218 data = pgm_read_byte(&s_fixedFont.
data[offset]);
220 else if ( style == STYLE_BOLD )
222 uint8_t temp = pgm_read_byte(&s_fixedFont.
data[offset]);
228 uint8_t temp = pgm_read_byte(&s_fixedFont.
data[offset + 1]);
229 data = (temp & 0xF0) | ldata;
230 ldata = (temp & 0x0F);
232 if (page_offset & 1) data >>= 4;
233 data = ((data & 0x01) ? 0x03: 0x00) |
234 ((data & 0x02) ? 0x0C: 0x00) |
235 ((data & 0x04) ? 0x30: 0x00) |
236 ((data & 0x08) ? 0xC0: 0x00);
241 x += (s_fixedFont.
width << 1);
256 uint8_t c = ch[j] - 32;
270 if ( style == STYLE_NORMAL )
272 data = pgm_read_byte(&s_font6x8[c*6+i]);
274 else if ( style == STYLE_BOLD )
276 uint8_t temp = pgm_read_byte(&s_font6x8[c*6+i]);
282 uint8_t temp = pgm_read_byte(&s_font6x8[c*6+i + 1]);
283 data = (temp & 0xF0) | ldata;
284 ldata = (temp & 0x0F);
298 uint8_t text_index = 0;
330 uint8_t c = ch[j] - 32;
339 if ( style == STYLE_NORMAL )
341 data = pgm_read_byte(&s_font6x8[c*6+i]);
343 else if ( style == STYLE_BOLD )
345 uint8_t temp = pgm_read_byte(&s_font6x8[c*6+i]);
351 uint8_t temp = pgm_read_byte(&s_font6x8[c*6+i + 1]);
352 data = (temp & 0xF0) | ldata;
353 ldata = (temp & 0x0F);
356 data = ((data & 0x01) ? 0x03: 0x00) |
357 ((data & 0x02) ? 0x0C: 0x00) |
358 ((data & 0x04) ? 0x30: 0x00) |
359 ((data & 0x08) ? 0xC0: 0x00);
377 uint8_t text_end_pos = len * 6 + left;
378 if (text_end_pos <= right)
387 s_fixedFont.
width = pgm_read_byte(&progmemFont[1]);
388 s_fixedFont.
pages = pgm_read_byte(&progmemFont[2]) >> 3;
389 s_fixedFont.
data = progmemFont + 3;
394 s_font6x8 = progmemFont;
417 for (uint8_t x = x1; x <= x2; x++)
426 uint8_t topPage = y1 >> 3;
427 uint8_t bottomPage = y2 >> 3;
428 uint8_t height = y2-y1;
431 if (topPage == bottomPage)
433 ssd1306_sendByte( ((0xFF >> (0x07 - height)) << (y1 & 0x07))^s_invertByte );
439 for ( y = (topPage + 1); y <= (bottomPage - 1); y++)
462 for(j=0; j<(h >> 3); j++)
478 for(j=0; j<(h >> 3); j++)
495 for(j=0; j<(h >> 3); j++)
522 uint8_t offsety = sprite->
y & 0x7;
527 for (uint8_t i=0; i < sprite->
w; i++)
537 for (uint8_t i=0; i < sprite->
w; i++)
543 sprite->
lx = sprite->
x;
544 sprite->
ly = sprite->
y;
550 uint8_t posy = sprite->
y >> 3;
551 uint8_t offsety = sprite->
y & 0x7;
554 for (uint8_t i=0; i < sprite->
w; i++)
563 for (uint8_t i=0; i < sprite->
w; i++)
574 uint8_t y1 = sprite->
ly >> 3;
575 uint8_t y2 = (sprite->
ly + 7) >> 3;
576 if (sprite->
ly < sprite->
y)
577 y2 =
min(y2, (uint8_t)((sprite->
y >> 3) - 1));
579 y1 =
max(y1, (sprite->
ly + 7) >> 3);
580 for(uint8_t y = y1; y <= y2; y++)
584 for(uint8_t x = sprite->
lx; x < sprite->lx + sprite->
w; x++)
590 if (sprite->
lx != sprite->
x)
592 uint8_t x1 = sprite->
lx;
593 uint8_t x2 = sprite->
lx + sprite->
w - 1;
594 if (sprite->
x < sprite->
lx)
595 x1 =
max(x1, sprite->
x + sprite->
w);
597 x2 =
min((uint8_t)(sprite->
x - 1), x2);
598 for(uint8_t y = sprite->
ly >> 3; y <= (sprite->
ly + 7) >> 3; y++)
602 for(uint8_t x = x1; x <= x2; x++)
613 return (
SPRITE){x,y,w,x,y,data,NULL};
void ssd1306_drawBitmap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *buf)
void ssd1306_negativeMode()
const uint8_t * data
Pointer to PROGMEM data, representing sprite image.
void(* ssd1306_sendByte)(uint8_t data)
void ssd1306_displayOff()
void(* ssd1306_dataStart)()
void(* ssd1306_endTransmission)()
uint8_t ssd1306_displayHeight()
void ssd1306_replaceSprite(SPRITE *sprite, const uint8_t *data)
void ssd1306_drawHLine(uint8_t x1, uint8_t y1, uint8_t x2)
void(* ssd1306_nextRamPage)()
void ssd1306_setFont6x8(const uint8_t *progmemFont)
uint8_t ssd1306_charF6x8_eol(uint8_t left, uint8_t y, const char ch[], EFontStyle style, uint8_t right)
void ssd1306_drawVLine(uint8_t x1, uint8_t y1, uint8_t y2)
void ssd1306_positiveMode()
void ssd1306_putPixels(uint8_t x, uint8_t y, uint8_t pixels)
SPRITE ssd1306_createSprite(uint8_t x, uint8_t y, uint8_t w, const uint8_t *data)
void ssd1306_drawSpriteEx(uint8_t x, uint8_t y, uint8_t w, const uint8_t *sprite)
void ssd1306_sendCommand(uint8_t command)
void ssd1306_fillScreen(uint8_t fill_Data)
void ssd1306_drawRect(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2)
void ssd1306_clearScreen()
uint8_t y
draw position Y on the screen
uint8_t ssd1306_charF12x16(uint8_t xpos, uint8_t y, const char ch[], EFontStyle style)
uint8_t ssd1306_charF6x8(uint8_t x, uint8_t y, const char ch[], EFontStyle style)
void ssd1306_clearBlock(uint8_t x, uint8_t y, uint8_t w, uint8_t h)
void ssd1306_setFixedFont(const uint8_t *progmemFont)
uint8_t width
width in pixels
uint8_t ssd1306_printFixed2x(uint8_t xpos, uint8_t y, const char ch[], EFontStyle style)
void ssd1306_invertMode()
uint8_t x
draw position X on the screen
uint8_t ssd1306_displayWidth()
void ssd1306_drawSprite(SPRITE *sprite)
void ssd1306_eraseTrace(SPRITE *sprite)
void ssd1306_drawBuffer(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *buf)
void ssd1306_eraseSprite(SPRITE *sprite)
void ssd1306_normalMode()
void(* ssd1306_setRamBlock)(uint8_t x, uint8_t y, uint8_t w)
void ssd1306_putPixel(uint8_t x, uint8_t y)
uint8_t lx
last draw position X on the screen
uint8_t ssd1306_printFixed(uint8_t xpos, uint8_t y, const char ch[], EFontStyle style)
const uint8_t * data
font chars bits
uint8_t pages
height in pages
uint8_t ly
last draw position Y on the screen