Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // run-length encoded fonts
- // https://eleif.net/rle.html
- const uint8_t font_bitmap[] = {
- 0x0A,0x00,0x01,0x80,0x01,0xC0,0x02,0xE0,0x03,0xF0,0x09,0xF8,0x03,0xF0,0x02,0xE0,0x02,0xC0,0x01,0x80,0x0E,0x00,0x01,0xE0,0x01,0xF8,0x01,0xFE,0x04,0xFF,0x01,0x3F,0x01,0x0F,0x01,0x07,0x02,0x03,0x07,0x01,0x02,0x03,0x01,0x07,0x01,0x0F,0x01,0x1F,0x01,0x7F,0x03,0xFF,0x01,0xFE,0x01,0xFC,0x01,0xF0,0x01,0x80,0x08,0x00,0x01,0xC0,0x06,0xFF,0x01,0x1F,0x13,0x00,0x01,0x07,0x06,0xFF,0x01,0xF0,0x07,0x00,0x07,0xFF,0x15,0x00,0x07,0xFF,0x07,0x00,0x07,0xFF,0x15,0x00,0x07,0xFF,0x07,0x00,0x01,0x01,0x01,0x7F,0x05,0xFF,0x01,0xFE,0x01,0x80,0x11,0x00,0x01,0x80,0x01,0xF8,0x06,0xFF,0x01,0x03,0x09,0x00,0x01,0x03,0x01,0x0F,0x01,0x3F,0x01,0x7F,0x03,0xFF,0x01,0xFE,0x01,0xF8,0x01,0xF0,0x02,0xE0,0x07,0xC0,0x02,0xE0,0x01,0xF0,0x01,0xF8,0x01,0xFC,0x03,0xFF,0x01,0x7F,0x01,0x3F,0x01,0x1F,0x01,0x07,0x10,0x00,0x01,0x01,0x02,0x03,0x03,0x07,0x09,0x0F,0x03,0x07,0x02,0x03,0x01,0x01,0x0A,0x00, // 0
- 0x10,0x00,0x03,0x80,0x03,0xC0,0x03,0xE0,0x02,0xF0,0x15,0x00,0x02,0xF8,0x03,0xFC,0x03,0x7E,0x02,0x3F,0x03,0x1F,0x01,0x0F,0x07,0xFF,0x15,0x00,0x02,0x01,0x0C,0x00,0x07,0xFF,0x23,0x00,0x07,0xFF,0x23,0x00,0x07,0xFF,0x23,0x00,0x07,0xFF,0x23,0x00,0x07,0xFF,0x23,0x00,0x07,0x07,0x0F,0x00, // 1
- 0x08,0x00,0x01,0x80,0x01,0xC0,0x02,0xE0,0x03,0xF0,0x0A,0xF8,0x04,0xF0,0x01,0xE0,0x02,0xC0,0x01,0x80,0x0C,0x00,0x01,0xC0,0x01,0xF8,0x01,0xFC,0x01,0xFE,0x03,0xFF,0x01,0x7F,0x01,0x1F,0x01,0x0F,0x01,0x07,0x02,0x03,0x08,0x01,0x02,0x03,0x01,0x07,0x01,0x0F,0x01,0x1F,0x05,0xFF,0x01,0xFE,0x01,0xF8,0x01,0xC0,0x07,0x00,0x01,0x10,0x06,0x0F,0x01,0x07,0x13,0x00,0x01,0xC0,0x06,0xFF,0x01,0x1F,0x1C,0x00,0x01,0x80,0x01,0xC0,0x01,0xE0,0x01,0xF0,0x01,0xFC,0x03,0xFF,0x01,0x7F,0x01,0x3F,0x01,0x0F,0x01,0x03,0x17,0x00,0x01,0x80,0x01,0xC0,0x01,0xE0,0x01,0xF0,0x01,0xF8,0x01,0xFC,0x01,0xFE,0x01,0xFF,0x01,0x7F,0x01,0x3F,0x01,0x1F,0x01,0x0F,0x01,0x07,0x01,0x03,0x15,0x00,0x01,0x80,0x01,0xC0,0x01,0xE0,0x01,0xF0,0x01,0xF8,0x01,0xFE,0x02,0xFF,0x01,0x7F,0x01,0x3F,0x01,0x1F,0x01,0x0F,0x01,0x07,0x01,0x01,0x17,0x00,0x01,0xE0,0x01,0xF8,0x01,0xFC,0x01,0xFE,0x04,0xFF,0x01,0xEF,0x01,0xE7,0x01,0xE3,0x01,0xE1,0x17,0xE0,0x07,0x00,0x23,0x07,0x03,0x00, // 2
- 0x09,0x00,0x01,0x80,0x01,0xC0,0x02,0xE0,0x03,0xF0,0x0A,0xF8,0x03,0xF0,0x02,0xE0,0x01,0xC0,0x01,0x80,0x0D,0x00,0x01,0xC0,0x01,0xF0,0x01,0xFC,0x01,0xFE,0x03,0xFF,0x01,0x7F,0x01,0x1F,0x01,0x0F,0x01,0x07,0x02,0x03,0x08,0x01,0x02,0x03,0x01,0x07,0x01,0x0F,0x01,0x1F,0x04,0xFF,0x01,0xFE,0x01,0xFC,0x01,0xE0,0x09,0x00,0x07,0x03,0x12,0x00,0x01,0x80,0x06,0xFF,0x01,0x7F,0x14,0x00,0x09,0xF0,0x02,0xF8,0x02,0xFC,0x01,0xFE,0x01,0xFF,0x01,0xBF,0x02,0x1F,0x01,0x0F,0x01,0x07,0x01,0x01,0x15,0x00,0x09,0x03,0x03,0x07,0x01,0x0F,0x01,0x1F,0x01,0x3F,0x02,0xFF,0x02,0xFE,0x01,0xFC,0x01,0xF8,0x01,0xE0,0x01,0x80,0x08,0x00,0x07,0xE0,0x14,0x00,0x07,0xFF,0x08,0x00,0x01,0x03,0x01,0x0F,0x01,0x3F,0x01,0x7F,0x03,0xFF,0x01,0xFE,0x01,0xF8,0x02,0xF0,0x02,0xE0,0x08,0xC0,0x02,0xE0,0x01,0xF0,0x01,0xF8,0x01,0xFC,0x01,0xFE,0x03,0xFF,0x01,0x7F,0x01,0x1F,0x01,0x0F,0x01,0x01,0x0D,0x00,0x02,0x01,0x02,0x03,0x03,0x07,0x0A,0x0F,0x03,0x07,0x02,0x03,0x01,0x01,0x0A,0x00, // 3
- 0x17,0x00,0x01,0x80,0x01,0xC0,0x08,0xF0,0x1B,0x00,0x01,0x80,0x01,0xE0,0x01,0xF0,0x01,0xFC,0x01,0xFE,0x02,0xFF,0x01,0x3F,0x07,0xFF,0x16,0x00,0x01,0x80,0x01,0xE0,0x01,0xF0,0x01,0xFC,0x01,0xFE,0x02,0xFF,0x01,0x3F,0x01,0x1F,0x01,0x07,0x01,0x03,0x02,0x00,0x07,0xFF,0x11,0x00,0x01,0x80,0x01,0xE0,0x01,0xF0,0x01,0xFC,0x01,0xFE,0x02,0xFF,0x01,0x3F,0x01,0x1F,0x01,0x07,0x01,0x03,0x07,0x00,0x07,0xFF,0x0C,0x00,0x01,0x80,0x01,0xE0,0x01,0xF0,0x01,0xFC,0x03,0xFF,0x01,0x3F,0x01,0x1F,0x01,0x07,0x01,0x03,0x0C,0x00,0x07,0xFF,0x0A,0x00,0x01,0x7C,0x07,0x7F,0x11,0x7E,0x07,0xFF,0x08,0x7E,0x1B,0x00,0x07,0xFF,0x23,0x00,0x07,0x07,0x09,0x00, // 4
- 0x08,0x00,0x1D,0xF0,0x0C,0x00,0x01,0xC0,0x06,0xFF,0x17,0x03,0x0C,0x00,0x06,0xFF,0x01,0x07,0x03,0x00,0x09,0x80,0x16,0x00,0x07,0xFF,0x01,0x7E,0x02,0x3F,0x08,0x1F,0x02,0x3F,0x01,0x7F,0x02,0xFF,0x02,0xFE,0x01,0xFC,0x01,0xF8,0x01,0xF0,0x01,0xE0,0x01,0xC0,0x10,0x00,0x02,0x01,0x10,0x00,0x01,0x01,0x01,0x03,0x01,0x0F,0x06,0xFF,0x01,0xF8,0x08,0x00,0x06,0xE0,0x01,0xC0,0x13,0x00,0x01,0x80,0x07,0xFF,0x08,0x00,0x01,0x01,0x01,0x07,0x01,0x1F,0x01,0x3F,0x01,0x7F,0x02,0xFF,0x01,0xFE,0x01,0xFC,0x01,0xF8,0x01,0xF0,0x02,0xE0,0x07,0xC0,0x02,0xE0,0x02,0xF0,0x01,0xF8,0x01,0xFE,0x03,0xFF,0x01,0x7F,0x01,0x3F,0x01,0x1F,0x01,0x07,0x0F,0x00,0x01,0x01,0x02,0x03,0x03,0x07,0x0A,0x0F,0x03,0x07,0x02,0x03,0x01,0x01,0x0A,0x00, // 5
- 0x10,0x00,0x02,0x80,0x02,0xC0,0x04,0xE0,0x07,0xF0,0x13,0x00,0x01,0x80,0x01,0xC0,0x01,0xF0,0x01,0xF8,0x01,0xFC,0x01,0xFE,0x02,0xFF,0x01,0x7F,0x01,0x3F,0x02,0x1F,0x02,0x0F,0x03,0x07,0x06,0x03,0x10,0x00,0x01,0xC0,0x01,0xF8,0x01,0xFE,0x04,0xFF,0x01,0x1F,0x01,0x07,0x01,0x01,0x03,0x00,0x09,0x80,0x13,0x00,0x01,0xF8,0x06,0xFF,0x01,0xF9,0x01,0xF8,0x01,0xFC,0x01,0xFE,0x01,0x7E,0x02,0x3F,0x07,0x1F,0x02,0x3F,0x01,0x7F,0x02,0xFF,0x01,0xFE,0x02,0xFC,0x01,0xF8,0x01,0xF0,0x01,0xC0,0x01,0x80,0x09,0x00,0x07,0xFF,0x01,0x07,0x01,0x03,0x01,0x01,0x0F,0x00,0x01,0x01,0x01,0x07,0x01,0x7F,0x05,0xFF,0x01,0xFC,0x08,0x00,0x01,0x0F,0x06,0xFF,0x01,0xF0,0x01,0x80,0x12,0x00,0x01,0xF0,0x06,0xFF,0x01,0x07,0x09,0x00,0x01,0x03,0x01,0x0F,0x01,0x1F,0x01,0x7F,0x03,0xFF,0x01,0xFE,0x01,0xF8,0x02,0xF0,0x02,0xE0,0x06,0xC0,0x02,0xE0,0x01,0xF0,0x01,0xF8,0x01,0xFC,0x03,0xFF,0x01,0x7F,0x01,0x3F,0x01,0x1F,0x01,0x07,0x01,0x01,0x0F,0x00,0x02,0x01,0x02,0x03,0x02,0x07,0x09,0x0F,0x03,0x07,0x02,0x03,0x01,0x01,0x0A,0x00, // 6
- 0x03,0x00,0x25,0xE0,0x05,0x00,0x1B,0x07,0x01,0x87,0x01,0xE7,0x05,0xFF,0x01,0x3F,0x01,0x0F,0x01,0x03,0x1D,0x00,0x01,0xC0,0x01,0xF0,0x01,0xFC,0x03,0xFF,0x01,0x7F,0x01,0x1F,0x01,0x07,0x01,0x01,0x1C,0x00,0x01,0x80,0x01,0xF0,0x01,0xFC,0x04,0xFF,0x01,0x3F,0x01,0x0F,0x01,0x03,0x1C,0x00,0x01,0x80,0x01,0xE0,0x01,0xF8,0x01,0xFE,0x03,0xFF,0x01,0x7F,0x01,0x1F,0x01,0x07,0x1D,0x00,0x01,0xC0,0x01,0xF0,0x01,0xFE,0x04,0xFF,0x01,0x3F,0x01,0x0F,0x01,0x01,0x1C,0x00,0x01,0xC0,0x01,0xF0,0x01,0xFC,0x04,0xFF,0x01,0x7F,0x01,0x1F,0x01,0x03,0x1E,0x00,0x01,0x08,0x01,0x0E,0x05,0x0F,0x01,0x07,0x01,0x01,0x17,0x00, // 7
- 0x0A,0x00,0x01,0x80,0x01,0xC0,0x02,0xE0,0x03,0xF0,0x09,0xF8,0x03,0xF0,0x02,0xE0,0x02,0xC0,0x01,0x80,0x0E,0x00,0x01,0xF0,0x01,0xFC,0x01,0xFE,0x04,0xFF,0x01,0x3F,0x01,0x0F,0x01,0x07,0x02,0x03,0x07,0x01,0x02,0x03,0x01,0x07,0x01,0x0F,0x01,0x1F,0x05,0xFF,0x01,0xFC,0x01,0xF0,0x01,0x80,0x09,0x00,0x01,0x04,0x06,0xFF,0x01,0xF1,0x01,0x80,0x10,0x00,0x01,0xE0,0x06,0xFF,0x01,0x1F,0x0B,0x00,0x01,0x03,0x01,0x07,0x01,0x0F,0x01,0x1F,0x01,0x3F,0x01,0xBF,0x01,0xFF,0x01,0xFE,0x01,0xFC,0x02,0xF8,0x07,0xF0,0x02,0xF8,0x01,0xFC,0x01,0xFE,0x02,0xFF,0x01,0x3F,0x01,0x1F,0x01,0x0F,0x01,0x07,0x01,0x03,0x0B,0x00,0x01,0xC0,0x01,0xE0,0x01,0xF8,0x01,0xFC,0x02,0xFE,0x01,0xFF,0x01,0x7F,0x01,0x1F,0x02,0x0F,0x02,0x07,0x07,0x03,0x02,0x07,0x02,0x0F,0x01,0x1F,0x01,0x3F,0x02,0xFF,0x01,0xFE,0x01,0xFC,0x01,0xF8,0x01,0xF0,0x01,0xC0,0x08,0x00,0x01,0xFE,0x06,0xFF,0x01,0x81,0x13,0x00,0x01,0x01,0x07,0xFF,0x08,0x00,0x01,0x07,0x01,0x1F,0x01,0x3F,0x01,0x7F,0x03,0xFF,0x01,0xFC,0x01,0xF8,0x01,0xF0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x01,0xF0,0x01,0xF8,0x01,0xFC,0x04,0xFF,0x01,0x7F,0x01,0x1F,0x01,0x0F,0x01,0x01,0x0D,0x00,0x01,0x01,0x02,0x03,0x04,0x07,0x0A,0x0F,0x03,0x07,0x02,0x03,0x01,0x01,0x09,0x00, // 8
- 0x0A,0x00,0x01,0x80,0x02,0xC0,0x03,0xE0,0x09,0xF0,0x03,0xE0,0x02,0xC0,0x01,0x80,0x10,0x00,0x01,0xC0,0x01,0xF0,0x01,0xFC,0x01,0xFE,0x03,0xFF,0x01,0x7F,0x01,0x1F,0x01,0x0F,0x03,0x07,0x06,0x03,0x02,0x07,0x01,0x0F,0x01,0x1F,0x01,0x3F,0x03,0xFF,0x01,0xFE,0x01,0xFC,0x01,0xF0,0x01,0xE0,0x0A,0x00,0x01,0xFE,0x06,0xFF,0x01,0x01,0x12,0x00,0x01,0x07,0x06,0xFF,0x01,0xF8,0x08,0x00,0x01,0x1F,0x06,0xFF,0x01,0xF0,0x01,0xC0,0x10,0x00,0x01,0x80,0x01,0xE0,0x07,0xFF,0x0A,0x00,0x01,0x03,0x01,0x07,0x01,0x0F,0x01,0x1F,0x01,0x3F,0x02,0x7F,0x01,0xFF,0x01,0xFE,0x02,0xFC,0x07,0xF8,0x02,0xFC,0x01,0x7E,0x01,0x7F,0x01,0x3F,0x01,0x1F,0x01,0x0F,0x06,0xFF,0x01,0x7F,0x13,0x00,0x08,0x01,0x05,0x00,0x01,0xC0,0x01,0xF0,0x01,0xFE,0x04,0xFF,0x01,0x3F,0x01,0x07,0x10,0x00,0x07,0xC0,0x03,0xE0,0x02,0xF0,0x02,0xF8,0x01,0xFC,0x01,0xFE,0x02,0xFF,0x01,0x7F,0x01,0x3F,0x01,0x1F,0x01,0x0F,0x01,0x03,0x13,0x00,0x08,0x0F,0x04,0x07,0x02,0x03,0x02,0x01,0x0F,0x00 // 9
- };
- const uint16_t font_bitmap_offsets[] = {0, 0xac, 0xe4, 0x19c, 0x256, 0x2d2, 0x35e, 0x422, 0x498, 0x580};
- void ssd1306_draw_font(uint8_t x, uint8_t y, size_t ch_sz, uint16_t of)
- {
- size_t tt = 0;
- uint8_t x_pos = x;
- uint8_t y_pos = 0;
- uint8_t num_bytes = 0;
- uint8_t bytes = 0;
- uint16_t ii = 0;
- uint16_t ofset = font_bitmap_offsets[of];;
- for(tt=0; tt<ch_sz;)
- {
- num_bytes = font_bitmap[ofset++];
- bytes = font_bitmap[ofset++];
- for (ii=0; ii<num_bytes; ++ii)
- {
- if (x_pos >= (x + FONT_WIDTH))
- {
- x_pos = x;
- y_pos++;
- }
- ssd1306_write(CMD, Set_Page_Start_Address_CMD + y_pos); // set row
- ssd1306_write(CMD, SSD1306_SETLOWCOLUMN | (x_pos & 0xf)); // set lower column address
- ssd1306_write(CMD, SSD1306_SETHIGHCOLUMN | (x_pos >> 4)); // set higher column address
- ssd1306_write(DAT, (uint8_t)bytes);
- tt++;
- x_pos++;
- }
- }
- }
- void ssd1306_fill(uint8_t bmp_data)
- {
- uint8_t x_pos = 0;
- uint8_t page = 0;
- for (page=0; page < y_max; ++page)
- {
- ssd1306_write(CMD, (Set_Page_Start_Address_CMD + page));
- ssd1306_write(CMD, SSD1306_SETLOWCOLUMN);
- ssd1306_write(CMD, SSD1306_SETHIGHCOLUMN);
- for (x_pos=0; x_pos < SSD1306_LCDWIDTH; ++x_pos)
- {
- ssd1306_write(DAT, bmp_data);
- }
- }
- }
- // 336 is sizeof run-length decoded font bitmap!
- void draw_tempere(unsigned short temp)
- {
- if (temp == 0)
- {
- ssd1306_draw_font(0, 0, 336, 0);
- ssd1306_draw_font(FONT_WIDTH, 0, 336, 0);
- ssd1306_draw_font(2*FONT_WIDTH, 0, 336, 0);
- }
- else if (temp > 0 && temp < 10)
- {
- ssd1306_draw_font(0, 0, 336, 0);
- ssd1306_draw_font(FONT_WIDTH, 0, 336, 0);
- ssd1306_draw_font(2*FONT_WIDTH, 0, 336, temp);
- }
- else if (temp >= 10 && temp < 100)
- {
- ssd1306_draw_font(0, 0, 336, 0);
- ssd1306_draw_font(FONT_WIDTH, 0, 336, (temp/10)%10);
- ssd1306_draw_font(2*FONT_WIDTH, 0, 336, temp%10);
- }
- else if (temp >= 100 && temp < 1000)
- {
- ssd1306_draw_font(0, 0, 336, (temp/100)%10);
- ssd1306_draw_font(FONT_WIDTH, 0, 336, (temp/10)%10);
- ssd1306_draw_font(2*FONT_WIDTH, 0, 336, temp%10);
- }
- else
- {
- ssd1306_draw_font(0, 0, 336, 9);
- ssd1306_draw_font(FONT_WIDTH, 0, 336, 9);
- ssd1306_draw_font(2*FONT_WIDTH, 0, 336, 9);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement