Advertisement
Guest User

Untitled

a guest
Dec 6th, 2022
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.29 KB | None | 0 0
  1. // run-length encoded fonts
  2. // https://eleif.net/rle.html
  3. const uint8_t font_bitmap[] = {
  4.     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
  5.     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
  6.     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
  7.     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
  8.     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
  9.     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
  10.     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
  11.     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
  12.     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
  13.     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
  14. };
  15.  
  16. const uint16_t font_bitmap_offsets[] = {0, 0xac, 0xe4, 0x19c, 0x256, 0x2d2, 0x35e, 0x422, 0x498, 0x580};
  17.  
  18. void ssd1306_draw_font(uint8_t x, uint8_t y, size_t ch_sz, uint16_t of)
  19. {
  20.     size_t tt = 0;
  21.     uint8_t x_pos = x;
  22.     uint8_t y_pos = 0;
  23.  
  24.     uint8_t num_bytes = 0;
  25.     uint8_t bytes = 0;
  26.     uint16_t ii = 0;
  27.     uint16_t ofset = font_bitmap_offsets[of];;
  28.  
  29.     for(tt=0; tt<ch_sz;)
  30.     {
  31.         num_bytes = font_bitmap[ofset++];
  32.         bytes = font_bitmap[ofset++];
  33.  
  34.         for (ii=0; ii<num_bytes; ++ii)
  35.         {
  36.             if (x_pos >= (x + FONT_WIDTH))
  37.             {
  38.                 x_pos = x;
  39.                 y_pos++;
  40.             }
  41.  
  42.             ssd1306_write(CMD, Set_Page_Start_Address_CMD + y_pos);        // set row
  43.             ssd1306_write(CMD, SSD1306_SETLOWCOLUMN | (x_pos & 0xf));      // set lower column address
  44.             ssd1306_write(CMD, SSD1306_SETHIGHCOLUMN | (x_pos >> 4));      // set higher column address
  45.  
  46.             ssd1306_write(DAT, (uint8_t)bytes);
  47.             tt++;
  48.             x_pos++;
  49.         }
  50.     }
  51. }
  52.  
  53. void ssd1306_fill(uint8_t bmp_data)
  54. {                                                    
  55.     uint8_t x_pos = 0;
  56.     uint8_t page = 0;
  57.  
  58.     for (page=0; page < y_max; ++page)
  59.     {
  60.         ssd1306_write(CMD, (Set_Page_Start_Address_CMD + page));
  61.         ssd1306_write(CMD, SSD1306_SETLOWCOLUMN);
  62.         ssd1306_write(CMD, SSD1306_SETHIGHCOLUMN);
  63.  
  64.         for (x_pos=0; x_pos < SSD1306_LCDWIDTH; ++x_pos)
  65.         {
  66.             ssd1306_write(DAT, bmp_data);
  67.         }                                                                                  
  68.     }  
  69. }
  70.  
  71. // 336 is sizeof run-length decoded font bitmap!
  72. void draw_tempere(unsigned short temp)
  73. {
  74.     if (temp == 0)
  75.     {
  76.         ssd1306_draw_font(0, 0, 336, 0);
  77.         ssd1306_draw_font(FONT_WIDTH, 0, 336, 0);
  78.         ssd1306_draw_font(2*FONT_WIDTH, 0, 336, 0);
  79.     }
  80.     else if (temp > 0 && temp < 10)
  81.     {
  82.         ssd1306_draw_font(0, 0, 336, 0);
  83.         ssd1306_draw_font(FONT_WIDTH, 0, 336, 0);
  84.         ssd1306_draw_font(2*FONT_WIDTH, 0, 336, temp);
  85.     }
  86.     else if (temp >= 10 && temp < 100)
  87.     {
  88.         ssd1306_draw_font(0, 0, 336, 0);
  89.         ssd1306_draw_font(FONT_WIDTH, 0, 336, (temp/10)%10);
  90.         ssd1306_draw_font(2*FONT_WIDTH, 0, 336, temp%10);
  91.     }
  92.     else if (temp >= 100 && temp < 1000)
  93.     {
  94.         ssd1306_draw_font(0, 0, 336, (temp/100)%10);
  95.         ssd1306_draw_font(FONT_WIDTH, 0, 336, (temp/10)%10);
  96.         ssd1306_draw_font(2*FONT_WIDTH, 0, 336, temp%10);
  97.     }
  98.     else
  99.     {
  100.         ssd1306_draw_font(0, 0, 336, 9);
  101.         ssd1306_draw_font(FONT_WIDTH, 0, 336, 9);
  102.         ssd1306_draw_font(2*FONT_WIDTH, 0, 336, 9);
  103.     }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement