Hub08 LED matrix 64*16 soft scrolling
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 22 Nov 2015 13:53:53 +0000 (14:53 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 22 Nov 2015 13:54:46 +0000 (14:54 +0100)
Hub08_LedMatrix/Hub08_LedMatrix.ino [new file with mode: 0644]
Hub08_LedMatrix/LEDMatrix.cpp [new file with mode: 0644]
Hub08_LedMatrix/LEDMatrix.h [new file with mode: 0644]
Hub08_LedMatrix/font.h [new file with mode: 0644]

diff --git a/Hub08_LedMatrix/Hub08_LedMatrix.ino b/Hub08_LedMatrix/Hub08_LedMatrix.ino
new file mode 100644 (file)
index 0000000..ee96eba
--- /dev/null
@@ -0,0 +1,156 @@
+/**
+ * LED Matrix library for http://www.seeedstudio.com/depot/ultrathin-16x32-red-led-matrix-panel-p-1582.html
+ * The LED Matrix panel has 32x16 pixels. Several panel can be combined together as a large screen.
+ *
+ * Coordinate & Connection (Arduino -> panel 0 -> panel 1 -> ...)
+ *   (0, 0)                                     (0, 0)
+ *     +--------+--------+--------+               +--------+--------+
+ *     |   5    |    4   |    3   |               |    1   |    0   |
+ *     |        |        |        |               |        |        |<----- Arduino
+ *     +--------+--------+--------+               +--------+--------+
+ *     |   2    |    1   |    0   |                              (64, 16)
+ *     |        |        |        |<----- Arduino
+ *     +--------+--------+--------+
+ *                             (96, 32)
+ *
+ */
+
+#define FONT8x8 0
+
+#include <avr/pgmspace.h>
+#include "LEDMatrix.h"
+#include "font.h"
+
+#define WIDTH   64
+#define HEIGHT  16
+
+// LEDMatrix(a, b, c, d, oe, r1, stb, clk);
+LEDMatrix matrix(4, 5, 6, 7, 8, 9, 10, 11);
+
+// Display Buffer 128 = 64 * 16 / 8
+uint8_t displaybuf[WIDTH * HEIGHT / 8] = {
+    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
+    0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0xE0, 0x07, 0x8F, 0xC7, 0xC7, 0xC7, 0xE0,
+    0x00, 0x40, 0x0C, 0xCE, 0x6C, 0x6C, 0x6C, 0xE0, 0x00, 0xE0, 0x0C, 0x0C, 0x6C, 0x6C, 0x6C, 0x60,
+    0x01, 0xF0, 0x07, 0x8C, 0x6F, 0xEF, 0xEC, 0x60, 0x23, 0xF8, 0x00, 0xCC, 0x6C, 0x0C, 0x0C, 0x60,
+    0x33, 0xF8, 0x0C, 0xCE, 0x6C, 0x6C, 0x6C, 0xE0, 0x3B, 0xF8, 0x07, 0x8F, 0xC7, 0xC7, 0xC7, 0xE0,
+    0x3B, 0xF8, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xF8, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
+    0x0B, 0xF8, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+uint8_t displaybuf_w[((WIDTH/8)+1) * HEIGHT];
+
+
+byte cell[16];
+
+void MatrixWriteCharacter(int x,int y, char character)
+{
+  //Serial.print(x);
+  //Serial.print("  ");
+  //Serial.println(character);
+#if FONT8x8
+  for(int i=0; i<8; i++) {
+     uint8_t *pDst = displaybuf_w + (i+y) * ((WIDTH / 8) + 1) + x  ;
+     *pDst = (font_8x8[character - 0x20][i]);
+  }
+#else
+  for(int i=0; i<16; i++) {
+     cell[i] = pgm_read_byte_near(&font_8x16[(character - 0x20)][i]);
+  }
+
+  //uint8_t *pDst = displaybuf_w + (y) * ((WIDTH / 8) + 1) + x  ;
+  uint8_t *pDst = displaybuf_w + x  ;
+
+  byte mask = 1;
+  for(int j=0; j<8; j++) {
+
+    byte out  = 0;
+    for(int i=0; i<8; i++) {
+       out <<= 1;
+       if ( cell[i] & mask ) {
+               out |= 1;
+        }
+     }
+     *pDst = out;
+     pDst += (WIDTH/8)+1;
+
+     mask <<= 1;
+  }
+
+  mask = 1;
+  for(int j=0; j<8; j++) {
+    byte out  = 0;
+    for(int i=8; i<16; i++) {
+       out <<= 1;
+       if ( cell[i] & mask ) {
+               out |= 1;
+        }
+     }
+     *pDst = out;
+     pDst += (WIDTH/8)+1;
+
+     mask <<= 1;
+  }
+#endif
+}
+
+
+
+void matrixPrint(String c) {
+  //c="33";
+  //Serial.println(c);
+  //Serial.println(c.length());
+  for (int i=0 ; i<c.length() ; i++) {
+      MatrixWriteCharacter(i,3,c[i]);
+//      matrix.scan();
+      //Serial.print(i);
+      //Serial.print(" -> ");
+      //Serial.println(c[i]);
+  }
+}
+
+
+void setup()
+{
+    matrix.begin(displaybuf, WIDTH, HEIGHT);
+    Serial.begin(57600);
+    matrix.clear();
+    //matrixPrint("12345678");
+    // uint8_t *pDst = displaybuf + y * (WIDTH / 8) + x / 8;
+       memset(displaybuf_w, 0, sizeof(displaybuf_w));
+}
+
+void matrixDelay(int x) {
+  for (int y=0; y<x; y++) { matrix.scan(); }
+  
+}
+
+void loop()
+{
+    matrix.clear();
+    int p=0;
+//    String poruka="X       XX      XOX     XOOX    XOoOX   XOooOX  XOoIoOX XOoiioOX        ";
+    String poruka="        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras blandit libero id ex dapibus suscipit. Proin vitae cursus eros. Ut porttitor congue metus at viverra. In consectetur ex massa.";
+
+    for (int p=0; p<poruka.length() ; p++) {
+         matrix.clear();
+         matrixPrint(poruka.substring(p,p+9));
+          for (int o=0; o<8; o++) {
+               uint8_t *src  = displaybuf_w;
+               uint8_t *dest = displaybuf;
+               int i = 0;
+               int j = 0;
+               for (int y = 0; y < HEIGHT; y++ ) {
+                       for (int x = 0; x < (WIDTH/8); x++) {
+                               *(dest + i) = ( *(src + j) << o ) | (( *(src + j + 1) & ( 0xff << 8 - o ) ) >> 8 - o );
+                               i++;
+                               j++;
+                       }
+                       j++;
+                       matrix.scan();
+                }
+          }
+    }
+
+}
diff --git a/Hub08_LedMatrix/LEDMatrix.cpp b/Hub08_LedMatrix/LEDMatrix.cpp
new file mode 100644 (file)
index 0000000..b3edb56
--- /dev/null
@@ -0,0 +1,174 @@
+/**
+ * LED Matrix library for http://www.seeedstudio.com/depot/ultrathin-16x32-red-led-matrix-panel-p-1582.html
+ * The LED Matrix panel has 32x16 pixels. Several panel can be combined together as a large screen.
+ *
+ * Coordinate & Connection (Arduino -> panel 0 -> panel 1 -> ...)
+ *   (0, 0)                                     (0, 0)
+ *     +--------+--------+--------+               +--------+--------+
+ *     |   5    |    4   |    3   |               |    1   |    0   |
+ *     |        |        |        |               |        |        |<----- Arduino
+ *     +--------+--------+--------+               +--------+--------+
+ *     |   2    |    1   |    0   |                              (64, 16)
+ *     |        |        |        |<----- Arduino
+ *     +--------+--------+--------+
+ *                             (96, 32)
+ *  Copyright (c) 2013 Seeed Technology Inc.
+ *  @auther     Yihui Xiong
+ *  @date       Nov 8, 2013
+ *  @license    MIT
+ */
+
+#include "LEDMatrix.h"
+#include "Arduino.h"
+
+#if 0
+#define ASSERT(e)   if (!(e)) { Serial.println(#e); while (1); }
+#else
+#define ASSERT(e)
+#endif
+
+LEDMatrix::LEDMatrix(uint8_t a, uint8_t b, uint8_t c, uint8_t d, uint8_t oe, uint8_t r1, uint8_t stb, uint8_t clk)
+{
+    this->clk = clk;
+    this->r1 = r1;
+    this->stb = stb;
+    this->oe = oe;
+    this->a = a;
+    this->b = b;
+    this->c = c;
+    this->d = d;
+
+    mask = 0xff;
+    state = 0;
+}
+
+void LEDMatrix::begin(uint8_t *displaybuf, uint16_t width, uint16_t height)
+{
+    ASSERT(0 == (width % 32));
+    ASSERT(0 == (height % 16));
+
+    this->displaybuf = displaybuf;
+    this->width = width;
+    this->height = height;
+
+    pinMode(a, OUTPUT);
+    pinMode(b, OUTPUT);
+    pinMode(c, OUTPUT);
+    pinMode(d, OUTPUT);
+    pinMode(oe, OUTPUT);
+    pinMode(r1, OUTPUT);
+    pinMode(clk, OUTPUT);
+    pinMode(stb, OUTPUT);
+
+    state = 1;
+}
+
+void LEDMatrix::drawPoint(uint16_t x, uint16_t y, uint8_t pixel)
+{
+    ASSERT(width > x);
+    ASSERT(height > y);
+
+    uint8_t *byte = displaybuf + x / 8 + y * width / 8;
+    uint8_t  bit = x % 8;
+
+    if (pixel) {
+        *byte |= 0x80 >> bit;
+    } else {
+        *byte &= ~(0x80 >> bit);
+    }
+}
+
+void LEDMatrix::drawRect(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint8_t pixel)
+{
+    for (uint16_t x = x1; x < x2; x++) {
+        for (uint16_t y = y1; y < y2; y++) {
+            drawPoint(x, y, pixel);
+        }
+    }
+}
+
+void LEDMatrix::drawImage(uint16_t xoffset, uint16_t yoffset, uint16_t width, uint16_t height, const uint8_t *image)
+{
+    for (uint16_t y = 0; y < height; y++) {
+        for (uint16_t x = 0; x < width; x++) {
+            const uint8_t *byte = image + (x + y * width) / 8;
+            uint8_t  bit = 7 - x % 8;
+            uint8_t  pixel = (*byte >> bit) & 1;
+
+            drawPoint(x + xoffset, y + yoffset, pixel);
+        }
+    }
+}
+
+void LEDMatrix::clear()
+{
+    uint8_t *ptr = displaybuf;
+    for (uint16_t i = 0; i < (width * height / 8); i++) {
+        *ptr = 0x00;
+        ptr++;
+    }
+}
+
+void LEDMatrix::reverse()
+{
+    mask = ~mask;
+}
+
+uint8_t LEDMatrix::isReversed()
+{
+    return mask;
+}
+
+void LEDMatrix::scan()
+{
+    static uint8_t row = 0;  // from 0 to 15
+
+    if (!state) {
+        return;
+    }
+
+    uint8_t *head = displaybuf + row * (width / 8);
+    for (uint8_t line = 0; line < (height / 16); line++) {
+        uint8_t *ptr = head;
+        head += width * 2;              // width * 16 / 8
+
+        for (uint8_t byte = 0; byte < (width / 8); byte++) {
+            uint8_t pixels = *ptr;
+            ptr++;
+            pixels = pixels ^ mask;     // reverse: mask = 0xff, normal: mask =0x00
+            for (uint8_t bit = 0; bit < 8; bit++) {
+                digitalWrite(clk, LOW);
+                digitalWrite(r1, pixels & (0x80 >> bit));
+                digitalWrite(clk, HIGH);
+            }
+        }
+    }
+
+    digitalWrite(oe, HIGH);              // disable display
+
+    // select row
+    digitalWrite(a, (row & 0x01));
+    digitalWrite(b, (row & 0x02));
+    digitalWrite(c, (row & 0x04));
+    digitalWrite(d, (row & 0x08));
+
+    // latch data
+    digitalWrite(stb, LOW);
+    digitalWrite(stb, HIGH);
+    digitalWrite(stb, LOW);
+
+    digitalWrite(oe, LOW);              // enable display
+
+    row = (row + 1) & 0x0F;
+}
+
+void LEDMatrix::on()
+{
+    state = 1;
+}
+
+void LEDMatrix::off()
+{
+    state = 0;
+    digitalWrite(oe, HIGH);
+}
diff --git a/Hub08_LedMatrix/LEDMatrix.h b/Hub08_LedMatrix/LEDMatrix.h
new file mode 100644 (file)
index 0000000..a6ca0a1
--- /dev/null
@@ -0,0 +1,89 @@
+/**
+ * LED Matrix library for http://www.seeedstudio.com/depot/ultrathin-16x32-red-led-matrix-panel-p-1582.html
+ * The LED Matrix panel has 32x16 pixels. Several panel can be combined together as a large screen.
+ *
+ * Coordinate & Connection (Arduino -> panel 0 -> panel 1 -> ...)
+ *   (0, 0)                                     (0, 0)
+ *     +--------+--------+--------+               +--------+--------+
+ *     |   5    |    4   |    3   |               |    1   |    0   |
+ *     |        |        |        |               |        |        |<----- Arduino
+ *     +--------+--------+--------+               +--------+--------+
+ *     |   2    |    1   |    0   |                              (64, 16)
+ *     |        |        |        |<----- Arduino
+ *     +--------+--------+--------+
+ *                             (96, 32)
+ *  Copyright (c) 2013 Seeed Technology Inc.
+ *  @auther     Yihui Xiong
+ *  @date       Nov 7, 2013
+ *  @license    MIT
+ */
+
+
+#ifndef __LED_MATRIX_H__
+#define __LED_MATRIX_H__
+
+ #include <stdint.h>
+
+class LEDMatrix {
+public:
+    LEDMatrix(uint8_t a, uint8_t b, uint8_t c, uint8_t d, uint8_t oe, uint8_t r1, uint8_t stb, uint8_t clk);
+
+    /**
+     * set the display's display buffer and number, the buffer's size must be not less than 512 * number / 8 bytes
+     * @param displaybuf    display buffer
+     * @param number        panels' number
+     */
+    void begin(uint8_t *displaybuf, uint16_t width, uint16_t height);
+
+    /**
+     * draw a point
+     * @param x     x
+     * @param y     y
+     * @param pixel 0: led off, >0: led on
+     */
+    void drawPoint(uint16_t x, uint16_t y, uint8_t pixel);
+
+    /**
+     * draw a rect
+     * @param (x1, y1)   top-left position
+     * @param (x2, y2)   bottom-right position, not included in the rect
+     * @param pixel      0: rect off, >0: rect on
+     */
+    void drawRect(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint8_t pixel);
+
+    /**
+     * draw a image
+     * @param (xoffset, yoffset)   top-left offset of image
+     * @param (width, height)      image's width and height
+     * @param pixels     contents, 1 bit to 1 led
+     */
+    void drawImage(uint16_t xoffset, uint16_t yoffset, uint16_t width, uint16_t height, const uint8_t *image);
+
+    /**
+     * Set screen buffer to zero
+     */
+    void clear();
+
+    /**
+     * turn off 1/16 leds and turn on another 1/16 leds
+     */
+    void scan();
+
+    void reverse();
+
+    uint8_t isReversed();
+
+    void on();
+
+    void off();
+
+private:
+    uint8_t clk, r1, stb, oe, a, b, c, d;
+    uint8_t *displaybuf;
+    uint16_t width;
+    uint16_t height;
+    uint8_t  mask;
+    uint8_t  state;
+};
+
+#endif
diff --git a/Hub08_LedMatrix/font.h b/Hub08_LedMatrix/font.h
new file mode 100644 (file)
index 0000000..88808f3
--- /dev/null
@@ -0,0 +1,398 @@
+#include <Arduino.h>
+
+#if FONT8x8
+
+static const byte ASCII[][5] =
+{
+ {0x00, 0x00, 0x00, 0x00, 0x00} // 20  
+,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !
+,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 "
+,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #
+,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $
+,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %
+,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 &
+,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 '
+,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (
+,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 )
+,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a *
+,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b +
+,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c ,
+,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d -
+,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e .
+,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f /
+,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0
+,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1
+,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2
+,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3
+,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4
+,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5
+,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6
+,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7
+,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8
+,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9
+,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a :
+,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ;
+,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c <
+,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d =
+,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e >
+,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ?
+,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @
+,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A
+,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B
+,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C
+,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D
+,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E
+,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F
+,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G
+,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H
+,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I
+,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J
+,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K
+,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L
+,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M
+,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N
+,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O
+,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P
+,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q
+,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R
+,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S
+,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T
+,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U
+,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V
+,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W
+,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X
+,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y
+,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z
+,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [
+,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c ¥
+,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ]
+,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^
+,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _
+,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 `
+,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a
+,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b
+,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c
+,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d
+,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e
+,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f
+,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g
+,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h
+,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i
+,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j 
+,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k
+,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l
+,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m
+,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n
+,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o
+,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p
+,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q
+,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r
+,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s
+,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t
+,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u
+,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v
+,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w
+,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x
+,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y
+,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z
+,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b {
+,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c |
+,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d }
+,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ←
+,{0x78, 0x46, 0x41, 0x46, 0x78} // 7f →
+};
+
+uint8_t font_8x8[95][8] = {
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //
+{0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00}, // !
+{0x6c,0x6c,0x6c,0x00,0x00,0x00,0x00,0x00}, // "
+{0x6c,0x6c,0xfe,0x6c,0xfe,0x6c,0x6c,0x00}, // #
+{0x30,0x7c,0xc0,0x78,0x0c,0xf8,0x30,0x00}, // $
+{0x00,0xc6,0xcc,0x18,0x30,0x66,0xc6,0x00}, // %
+{0x38,0x6c,0x38,0x76,0xdc,0xcc,0x76,0x00}, // &
+{0x60,0x60,0xc0,0x00,0x00,0x00,0x00,0x00}, // '
+{0x18,0x30,0x60,0x60,0x60,0x30,0x18,0x00}, // (
+{0x60,0x30,0x18,0x18,0x18,0x30,0x60,0x00}, // )
+{0x00,0x66,0x3c,0xff,0x3c,0x66,0x00,0x00}, // *
+{0x00,0x30,0x30,0xfc,0x30,0x30,0x00,0x00}, // +
+{0x00,0x00,0x00,0x00,0x00,0x70,0x30,0x60}, // ,
+{0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00}, // -
+{0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00}, // .
+{0x06,0x0c,0x18,0x30,0x60,0xc0,0x80,0x00}, // /
+{0x78,0xcc,0xdc,0xfc,0xec,0xcc,0x78,0x00}, // 0
+{0x30,0xf0,0x30,0x30,0x30,0x30,0xfc,0x00}, // 1
+{0x78,0xcc,0x0c,0x38,0x60,0xcc,0xfc,0x00}, // 2
+{0x78,0xcc,0x0c,0x38,0x0c,0xcc,0x78,0x00}, // 3
+{0x1c,0x3c,0x6c,0xcc,0xfe,0x0c,0x0c,0x00}, // 4
+{0xfc,0xc0,0xf8,0x0c,0x0c,0xcc,0x78,0x00}, // 5
+{0x38,0x60,0xc0,0xf8,0xcc,0xcc,0x78,0x00}, // 6
+{0xfc,0xcc,0x0c,0x18,0x30,0x60,0x60,0x00}, // 7
+{0x78,0xcc,0xcc,0x78,0xcc,0xcc,0x78,0x00}, // 8
+{0x78,0xcc,0xcc,0x7c,0x0c,0x18,0x70,0x00}, // 9
+{0x00,0x00,0x30,0x30,0x00,0x30,0x30,0x00}, // :
+{0x00,0x00,0x30,0x30,0x00,0x70,0x30,0x60}, // ;
+{0x18,0x30,0x60,0xc0,0x60,0x30,0x18,0x00}, // <
+{0x00,0x00,0xfc,0x00,0xfc,0x00,0x00,0x00}, // =
+{0x60,0x30,0x18,0x0c,0x18,0x30,0x60,0x00}, // >
+{0x78,0xcc,0x0c,0x18,0x30,0x00,0x30,0x00}, // ?
+{0x7c,0xc6,0xde,0xde,0xde,0xc0,0x78,0x00}, // @
+{0x30,0x78,0xcc,0xcc,0xfc,0xcc,0xcc,0x00}, // A
+{0xfc,0x66,0x66,0x7c,0x66,0x66,0xfc,0x00}, // B
+{0x3c,0x66,0xc0,0xc0,0xc0,0x66,0x3c,0x00}, // C
+{0xfc,0x6c,0x66,0x66,0x66,0x6c,0xfc,0x00}, // D
+{0xfe,0x62,0x68,0x78,0x68,0x62,0xfe,0x00}, // E
+{0xfe,0x62,0x68,0x78,0x68,0x60,0xf0,0x00}, // F
+{0x3c,0x66,0xc0,0xc0,0xce,0x66,0x3e,0x00}, // G
+{0xcc,0xcc,0xcc,0xfc,0xcc,0xcc,0xcc,0x00}, // H
+{0x78,0x30,0x30,0x30,0x30,0x30,0x78,0x00}, // I
+{0x1e,0x0c,0x0c,0x0c,0xcc,0xcc,0x78,0x00}, // J
+{0xe6,0x66,0x6c,0x78,0x6c,0x66,0xe6,0x00}, // K
+{0xf0,0x60,0x60,0x60,0x62,0x66,0xfe,0x00}, // L
+{0xc6,0xee,0xfe,0xd6,0xc6,0xc6,0xc6,0x00}, // M
+{0xc6,0xe6,0xf6,0xde,0xce,0xc6,0xc6,0x00}, // N
+{0x38,0x6c,0xc6,0xc6,0xc6,0x6c,0x38,0x00}, // O
+{0xfc,0x66,0x66,0x7c,0x60,0x60,0xf0,0x00}, // P
+{0x78,0xcc,0xcc,0xcc,0xdc,0x78,0x1c,0x00}, // Q
+{0xfc,0x66,0x66,0x7c,0x78,0x6c,0xe6,0x00}, // R
+{0x78,0xcc,0xe0,0x38,0x1c,0xcc,0x78,0x00}, // S
+{0xfc,0xb4,0x30,0x30,0x30,0x30,0x78,0x00}, // T
+{0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xfc,0x00}, // U
+{0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x00}, // V
+{0xc6,0xc6,0xc6,0xd6,0xfe,0xee,0xc6,0x00}, // W
+{0xc6,0xc6,0x6c,0x38,0x6c,0xc6,0xc6,0x00}, // X
+{0xcc,0xcc,0xcc,0x78,0x30,0x30,0x78,0x00}, // Y
+{0xfe,0xcc,0x98,0x30,0x62,0xc6,0xfe,0x00}, // Z
+{0x78,0x60,0x60,0x60,0x60,0x60,0x78,0x00}, // [
+{0xc0,0x60,0x30,0x18,0x0c,0x06,0x02,0x00}, // "\"
+{0x78,0x18,0x18,0x18,0x18,0x18,0x78,0x00}, // ]
+{0x10,0x38,0x6c,0xc6,0x00,0x00,0x00,0x00}, // ^
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff}, // _
+{0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00}, // `
+{0x00,0x00,0x78,0x0c,0x7c,0xcc,0x76,0x00}, // a
+{0xe0,0x60,0x7c,0x66,0x66,0x66,0xbc,0x00}, // b
+{0x00,0x00,0x78,0xcc,0xc0,0xcc,0x78,0x00}, // c
+{0x1c,0x0c,0x0c,0x7c,0xcc,0xcc,0x76,0x00}, // d
+{0x00,0x00,0x78,0xcc,0xfc,0xc0,0x78,0x00}, // e
+{0x38,0x6c,0x60,0xf0,0x60,0x60,0xf0,0x00}, // f
+{0x00,0x00,0x76,0xcc,0xcc,0x7c,0x0c,0xf8}, // g
+{0xe0,0x60,0x6c,0x76,0x66,0x66,0xe6,0x00}, // h
+{0x30,0x00,0x70,0x30,0x30,0x30,0x78,0x00}, // i
+{0x18,0x00,0x78,0x18,0x18,0x18,0xd8,0x70}, // j
+{0xe0,0x60,0x66,0x6c,0x78,0x6c,0xe6,0x00}, // k
+{0x70,0x30,0x30,0x30,0x30,0x30,0x78,0x00}, // l
+{0x00,0x00,0xec,0xfe,0xd6,0xc6,0xc6,0x00}, // m
+{0x00,0x00,0xf8,0xcc,0xcc,0xcc,0xcc,0x00}, // n
+{0x00,0x00,0x78,0xcc,0xcc,0xcc,0x78,0x00}, // o
+{0x00,0x00,0xdc,0x66,0x66,0x7c,0x60,0xf0}, // p
+{0x00,0x00,0x76,0xcc,0xcc,0x7c,0x0c,0x1e}, // q
+{0x00,0x00,0xd8,0x6c,0x6c,0x60,0xf0,0x00}, // r
+{0x00,0x00,0x7c,0xc0,0x78,0x0c,0xf8,0x00}, // s
+{0x10,0x30,0x7c,0x30,0x30,0x34,0x18,0x00}, // t
+{0x00,0x00,0xcc,0xcc,0xcc,0xcc,0x76,0x00}, // u
+{0x00,0x00,0xcc,0xcc,0xcc,0x78,0x30,0x00}, // v
+{0x00,0x00,0xc6,0xc6,0xd6,0xfe,0x6c,0x00}, // w
+{0x00,0x00,0xc6,0x6c,0x38,0x6c,0xc6,0x00}, // x
+{0x00,0x00,0xcc,0xcc,0xcc,0x7c,0x0c,0xf8}, // y
+{0x00,0x00,0xfc,0x98,0x30,0x64,0xfc,0x00}, // z
+{0x1c,0x30,0x30,0xe0,0x30,0x30,0x1c,0x00}, // {
+{0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x00}, // |
+{0xe0,0x30,0x30,0x1c,0x30,0x30,0xe0,0x00},
+{0x76,0xdc,0x00,0x00,0x00,0x00,0x00,0x00}, // ~
+};
+
+#else
+
+const uint8_t font_8x16 [95][16] PROGMEM = {
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,                                               
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},     /* 0x20 ' ' */                          
+{0x00,0x00,0xFC,0xFE,0xFE,0xFC,0x00,0x00,                                               
+ 0x00,0x00,0x00,0x6F,0x6F,0x00,0x00,0x00},     /* 0x21 '!' */                          
+{0x0B,0x0F,0x07,0x00,0x0B,0x0F,0x07,0x00,                                               
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},     /* 0x22 '"' */                          
+{0x18,0xFC,0xFC,0x18,0xFC,0xFC,0x18,0x00,                                               
+ 0x03,0x07,0x07,0x03,0x07,0x07,0x03,0x00},     /* 0x23 '#' */                          
+{0x00,0x38,0x7C,0xE7,0xC7,0x9C,0x18,0x00,                                               
+ 0x00,0x06,0x0E,0x38,0x39,0x0F,0x07,0x00},     /* 0x24 '$' */                          
+{0x18,0x2C,0xA4,0xD8,0xE0,0x70,0x38,0x00,                                               
+ 0x0E,0x07,0x03,0x0D,0x12,0x1A,0x0C,0x00},     /* 0x25 '%' */                          
+{0x18,0xBC,0xE6,0xB6,0x1E,0x8C,0x80,0x00,                                               
+ 0x07,0x0F,0x18,0x19,0x1B,0x16,0x0D,0x08},     /* 0x26 '&' */                          
+{0x00,0x00,0x1B,0x0F,0x07,0x00,0x00,0x00,                                               
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},     /* 0x27 ''' */                          
+{0x00,0x00,0xF0,0xFC,0x0E,0x06,0x00,0x00,                                               
+ 0x00,0x00,0x03,0x0F,0x1C,0x18,0x00,0x00},     /* 0x28 '(' */                          
+{0x00,0x00,0x06,0x0E,0xFC,0xF0,0x00,0x00,                                               
+ 0x00,0x00,0x18,0x1C,0x0F,0x03,0x00,0x00},     /* 0x29 ')' */                          
+{0x90,0xA0,0xC0,0xF8,0xC0,0xA0,0x90,0x00,                                               
+ 0x04,0x02,0x01,0x0F,0x01,0x02,0x04,0x00},     /* 0x2a '*' */                          
+{0x00,0xC0,0xC0,0xF0,0xF0,0xC0,0xC0,0x00,                                               
+ 0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00},     /* 0x2b '+' */                          
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,                                               
+ 0x00,0x00,0x58,0x78,0x38,0x00,0x00,0x00},     /* 0x2c ',' */                          
+{0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,                                               
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},     /* 0x2d '-' */                          
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,                                               
+ 0x00,0x00,0x38,0x38,0x38,0x00,0x00,0x00},     /* 0x2e '.' */                          
+{0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x00,                                               
+ 0x0E,0x07,0x03,0x01,0x00,0x00,0x00,0x00},     /* 0x2f '/' */                          
+{0xF8,0xFC,0x0E,0x06,0x0E,0xFC,0xF8,0x00,                                               
+ 0x07,0x0F,0x1C,0x18,0x1C,0x0F,0x07,0x00},     /* 0x30 '0' */                          
+{0x00,0x18,0x0C,0xFE,0xFE,0x00,0x00,0x00,                                               
+ 0x00,0x00,0x18,0x1F,0x1F,0x18,0x00,0x00},     /* 0x31 '1' */                          
+{0x18,0x1C,0x0E,0x86,0xCE,0xFC,0x78,0x00,                                               
+ 0x1C,0x1E,0x1F,0x1B,0x19,0x18,0x18,0x00},     /* 0x32 '2' */                          
+{0x06,0x06,0x66,0x66,0xF6,0x9E,0x0E,0x00,                                               
+ 0x06,0x0E,0x1C,0x18,0x1C,0x0F,0x07,0x00},     /* 0x33 '3' */                          
+{0xC0,0xFE,0x3E,0x00,0xFC,0xFC,0x00,0x00,                                               
+ 0x03,0x03,0x03,0x03,0x1F,0x1F,0x03,0x00},     /* 0x34 '4' */                          
+{0x7E,0x7E,0x66,0x66,0xE6,0xC6,0x86,0x00,                                               
+ 0x0C,0x1C,0x18,0x18,0x1C,0x0F,0x07,0x00},     /* 0x35 '5' */                          
+{0xF8,0xFC,0xCE,0x66,0xE6,0xC0,0x80,0x00,                                               
+ 0x07,0x0F,0x1C,0x18,0x1C,0x0F,0x03,0x00},     /* 0x36 '6' */                          
+{0x06,0x06,0x06,0x86,0xE6,0x7E,0x1E,0x00,                                               
+ 0x00,0x00,0x1E,0x1F,0x01,0x00,0x00,0x00},     /* 0x37 '7' */                          
+{0x18,0xBC,0xEE,0x46,0xEE,0xBC,0x18,0x00,                                               
+ 0x07,0x0F,0x1C,0x18,0x1C,0x0F,0x07,0x00},     /* 0x38 '8' */                          
+{0x78,0xFC,0xCE,0x86,0xCE,0xFC,0xF8,0x00,                                               
+ 0x00,0x00,0x19,0x19,0x1C,0x0F,0x07,0x00},     /* 0x39 '9' */                          
+{0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,                                               
+ 0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00},     /* 0x3a ':' */                          
+{0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,                                               
+ 0x00,0x40,0x6C,0x3C,0x1C,0x00,0x00,0x00},     /* 0x3b ';' */                          
+{0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x00,                                               
+ 0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x00},     /* 0x3c '<' */                          
+{0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x00,                                               
+ 0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x00},     /* 0x3d '=' */                          
+{0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,                                               
+ 0x38,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00},     /* 0x3e '>' */                          
+{0x18,0x1C,0x0E,0x86,0xCE,0xFC,0x78,0x00,                                               
+ 0x00,0x00,0x67,0x67,0x01,0x00,0x00,0x00},     /* 0x3f '?' */                          
+{0xF0,0x08,0xA4,0xA4,0xC4,0x08,0xF0,0x00,                                               
+ 0x07,0x08,0x13,0x12,0x11,0x0A,0x09,0x00},     /* 0x40 '@' */                          
+{0xF0,0xF8,0x1C,0x0E,0x1C,0xF8,0xF0,0x00,                                               
+ 0x1F,0x1F,0x06,0x06,0x06,0x1F,0x1F,0x00},     /* 0x41 'A' */                          
+{0xFE,0xFE,0xC6,0xC6,0xC6,0xFE,0x3C,0x00,                                               
+ 0x1F,0x1F,0x18,0x18,0x18,0x1F,0x0F,0x00},     /* 0x42 'B' */                          
+{0xF8,0xFC,0x0E,0x06,0x0E,0x1C,0x18,0x00,                                               
+ 0x07,0x0F,0x1C,0x18,0x1C,0x0E,0x06,0x00},     /* 0x43 'C' */                          
+{0xFE,0xFE,0x02,0x02,0x06,0xFC,0xF8,0x00,                                               
+ 0x1F,0x1F,0x10,0x10,0x18,0x0F,0x07,0x00},     /* 0x44 'D' */                          
+{0xFE,0xFE,0xC6,0xC6,0xC6,0x06,0x06,0x00,                                               
+ 0x1F,0x1F,0x18,0x18,0x18,0x18,0x18,0x00},     /* 0x45 'E' */                          
+{0xFE,0xFE,0xC6,0xC6,0xC6,0x06,0x06,0x00,                                               
+ 0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00},     /* 0x46 'F' */                          
+{0xF8,0xFC,0x0E,0x06,0x8E,0x9C,0x98,0x00,                                               
+ 0x07,0x0F,0x1C,0x18,0x0D,0x1F,0x1F,0x00},     /* 0x47 'G' */                          
+{0xFE,0xFE,0xC0,0xC0,0xC0,0xFE,0xFE,0x00,                                               
+ 0x1F,0x1F,0x00,0x00,0x00,0x1F,0x1F,0x00},     /* 0x48 'H' */                          
+{0x00,0x00,0x00,0xFE,0xFE,0x00,0x00,0x00,                                               
+ 0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00},     /* 0x49 'I' */                          
+{0x00,0x06,0x06,0xFE,0xFE,0x00,0x00,0x00,                                               
+ 0x0C,0x1C,0x18,0x1F,0x0F,0x00,0x00,0x00},     /* 0x4a 'J' */                          
+{0xFE,0xFE,0xE0,0xF0,0x3C,0x0E,0x06,0x00,                                               
+ 0x1F,0x1F,0x00,0x03,0x07,0x1E,0x1C,0x00},     /* 0x4b 'K' */                          
+{0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,                                               
+ 0x1F,0x1F,0x18,0x18,0x18,0x18,0x18,0x00},     /* 0x4c 'L' */                          
+{0xFE,0xFC,0x70,0xE0,0x70,0xFC,0xFE,0x00,                                               
+ 0x1F,0x1F,0x00,0x03,0x00,0x1F,0x1F,0x00},     /* 0x4d 'M' */                          
+{0xFE,0xFC,0x78,0xE0,0x80,0xFE,0xFE,0x00,                                               
+ 0x1F,0x1F,0x00,0x01,0x07,0x0F,0x1F,0x00},     /* 0x4e 'N' */                          
+{0xF8,0xFC,0x0E,0x06,0x0E,0xFC,0xF8,0x00,                                               
+ 0x07,0x0F,0x1C,0x18,0x1C,0x0F,0x07,0x00},     /* 0x4f 'O' */                          
+{0xFE,0xFE,0x86,0x86,0xCE,0xFC,0x78,0x00,                                               
+ 0x1F,0x1F,0x01,0x01,0x01,0x00,0x00,0x00},     /* 0x50 'P' */                          
+{0xF8,0xFC,0x0E,0x06,0x0E,0xFC,0xF8,0x00,                                               
+ 0x07,0x0F,0x1C,0x18,0x1B,0x16,0x0D,0x18},     /* 0x51 'Q' */                          
+{0xFE,0xFE,0x86,0x86,0x86,0xFC,0x78,0x00,                                               
+ 0x1F,0x1F,0x01,0x01,0x07,0x1E,0x18,0x00},     /* 0x52 'R' */                          
+{0x38,0x7C,0xEE,0xC6,0xCE,0x9C,0x18,0x00,                                               
+ 0x06,0x0E,0x1C,0x18,0x1D,0x0F,0x07,0x00},     /* 0x53 'S' */                          
+{0x00,0x06,0x06,0xFE,0xFE,0x06,0x06,0x00,                                               
+ 0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00},     /* 0x54 'T' */                          
+{0xFE,0xFE,0x00,0x00,0x00,0xFE,0xFE,0x00,                                               
+ 0x07,0x0F,0x1C,0x18,0x1C,0x0F,0x07,0x00},     /* 0x55 'U' */                          
+{0xFE,0xFE,0x00,0x00,0x00,0xFE,0xFE,0x00,                                               
+ 0x01,0x03,0x0F,0x1C,0x0F,0x03,0x01,0x00},     /* 0x56 'V' */                          
+{0xFE,0xFE,0x00,0xFE,0x00,0xFE,0xFE,0x00,                                               
+ 0x03,0x1F,0x1E,0x07,0x1E,0x1F,0x03,0x00},     /* 0x57 'W' */                          
+{0x0E,0x1E,0xF8,0xE0,0xF8,0x1E,0x0E,0x00,                                               
+ 0x1C,0x1F,0x03,0x00,0x03,0x1F,0x1C,0x00},     /* 0x58 'X' */                          
+{0x00,0xFE,0xFE,0x80,0x80,0xFE,0xFE,0x00,                                               
+ 0x00,0x00,0x01,0x1F,0x1F,0x01,0x00,0x00},     /* 0x59 'Y' */                          
+{0x06,0x06,0x86,0xC6,0xE6,0x7E,0x3E,0x00,                                               
+ 0x1E,0x1F,0x1B,0x19,0x18,0x18,0x18,0x00},     /* 0x5a 'Z' */                          
+{0x00,0xFF,0xFF,0x03,0x03,0x03,0x00,0x00,                                               
+ 0x00,0x3F,0x3F,0x30,0x30,0x30,0x00,0x00},     /* 0x5b '[' */                          
+{0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,                                               
+ 0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x00},     /* 0x5c '\' */                          
+{0x00,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,                                               
+ 0x00,0x30,0x30,0x30,0x3F,0x3F,0x00,0x00},     /* 0x5d ']' */                          
+{0x08,0x0C,0x06,0x03,0x06,0x0C,0x08,0x00,                                               
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},     /* 0x5e '^' */                          
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,                                               
+ 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00},     /* 0x5f '_' */                          
+{0x00,0x00,0x07,0x0F,0x1B,0x00,0x00,0x00,                                               
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},     /* 0x60 '`' */                          
+{0x00,0x98,0xD8,0xD8,0xD8,0xF0,0xE0,0x00,                                               
+ 0x07,0x0F,0x1D,0x18,0x0C,0x1F,0x1F,0x00},     /* 0x61 'a' */                          
+{0xFE,0xFE,0x30,0x18,0x38,0xF0,0xE0,0x00,                                               
+ 0x1F,0x1F,0x0C,0x18,0x1C,0x0F,0x07,0x00},     /* 0x62 'b' */                          
+{0xE0,0xF0,0x38,0x18,0x38,0x70,0x60,0x00,                                               
+ 0x07,0x0F,0x1C,0x18,0x1C,0x0E,0x06,0x00},     /* 0x63 'c' */                          
+{0xE0,0xF0,0x38,0x18,0x30,0xFE,0xFE,0x00,                                               
+ 0x07,0x0F,0x1C,0x18,0x0C,0x1F,0x1F,0x00},     /* 0x64 'd' */                          
+{0xE0,0xF0,0xB8,0x98,0xB8,0xF0,0xE0,0x00,                                               
+ 0x07,0x0F,0x1D,0x19,0x19,0x19,0x01,0x00},     /* 0x65 'e' */                          
+{0xC0,0xF8,0xFC,0xCE,0xC6,0x1C,0x18,0x00,                                               
+ 0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00},     /* 0x66 'f' */                          
+{0xE0,0xF0,0x38,0x18,0x30,0xF8,0xF8,0x00,                                               
+ 0x03,0x07,0x6E,0x6C,0x66,0x3F,0x1F,0x00},     /* 0x67 'g' */                          
+{0xFE,0xFE,0x30,0x18,0x38,0xF0,0xC0,0x00,                                               
+ 0x1F,0x1F,0x00,0x00,0x00,0x1F,0x1F,0x00},     /* 0x68 'h' */                          
+{0x00,0x30,0x30,0xF6,0xF6,0x00,0x00,0x00,                                               
+ 0x00,0x00,0x18,0x1F,0x1F,0x18,0x00,0x00},     /* 0x69 'i' */                          
+{0x00,0x30,0x30,0xF6,0xF6,0x00,0x00,0x00,                                               
+ 0x30,0x70,0x60,0x7F,0x3F,0x00,0x00,0x00},     /* 0x6a 'j' */                          
+{0xFE,0xFE,0x80,0xC0,0xF0,0x38,0x18,0x00,                                               
+ 0x1F,0x1F,0x01,0x07,0x0E,0x1C,0x18,0x00},     /* 0x6b 'k' */                          
+{0x00,0x00,0x06,0xFE,0xFE,0x00,0x00,0x00,                                               
+ 0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00},     /* 0x6c 'l' */                          
+{0xF8,0xF8,0x18,0xF0,0x18,0xF0,0xE0,0x00,                                               
+ 0x1F,0x1F,0x00,0x1F,0x00,0x1F,0x1F,0x00},     /* 0x6d 'm' */                          
+{0xF8,0xF8,0x30,0x18,0x38,0xF0,0xE0,0x00,                                               
+ 0x1F,0x1F,0x00,0x00,0x00,0x1F,0x1F,0x00},     /* 0x6e 'n' */                          
+{0xE0,0xF0,0x38,0x18,0x38,0xF0,0xE0,0x00,                                               
+ 0x07,0x0F,0x1C,0x18,0x1C,0x0F,0x07,0x00},     /* 0x6f 'o' */                          
+{0xF8,0xF8,0x30,0x18,0x38,0xF0,0xE0,0x00,                                               
+ 0x7F,0x7F,0x0C,0x18,0x1C,0x0F,0x07,0x00},     /* 0x70 'p' */                          
+{0xE0,0xF0,0x38,0x18,0x30,0xF8,0xF8,0x00,                                               
+ 0x07,0x0F,0x1C,0x18,0x0C,0x7F,0x7F,0x00},     /* 0x71 'q' */                          
+{0xF8,0xF8,0x60,0x30,0x18,0x78,0x70,0x00,                                               
+ 0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00},     /* 0x72 'r' */                          
+{0x60,0xF0,0x98,0x98,0x98,0x30,0x20,0x00,                                               
+ 0x04,0x0C,0x19,0x19,0x19,0x0F,0x06,0x00},     /* 0x73 's' */                          
+{0x60,0x60,0xFC,0xFE,0x60,0x60,0x00,0x00,                                               
+ 0x00,0x00,0x0F,0x1F,0x18,0x1C,0x0C,0x00},     /* 0x74 't' */                          
+{0xF8,0xF8,0x00,0x00,0x00,0xF8,0xF8,0x00,                                               
+ 0x0F,0x1F,0x18,0x18,0x0C,0x1F,0x1F,0x00},     /* 0x75 'u' */                          
+{0xF8,0xF8,0x00,0x00,0x00,0xF8,0xF8,0x00,                                               
+ 0x03,0x07,0x0E,0x1C,0x0E,0x07,0x03,0x00},     /* 0x76 'v' */                          
+{0xF8,0xF8,0x00,0xE0,0x00,0xF8,0xF8,0x00,                                               
+ 0x03,0x1F,0x1C,0x0F,0x1C,0x1F,0x03,0x00},     /* 0x77 'w' */                          
+{0x18,0x38,0xE0,0xC0,0xE0,0x38,0x18,0x00,                                               
+ 0x1C,0x1F,0x03,0x01,0x03,0x1F,0x1C,0x00},     /* 0x78 'x' */                          
+{0xF8,0xF8,0x00,0x00,0x00,0xF8,0xF8,0x00,                                               
+ 0x07,0x0F,0x6C,0x6C,0x66,0x3F,0x1F,0x00},     /* 0x79 'y' */                          
+{0x18,0x18,0x18,0x98,0xD8,0x78,0x38,0x00,                                               
+ 0x1C,0x1E,0x1B,0x19,0x18,0x18,0x18,0x00},     /* 0x7a 'z' */                          
+{0x00,0xC0,0xFE,0x3F,0x03,0x03,0x00,0x00,                                               
+ 0x00,0x00,0x1F,0x3F,0x30,0x30,0x00,0x00},     /* 0x7b '{' */                          
+{0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,                                               
+ 0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00},     /* 0x7c '|' */                          
+{0x00,0x03,0x03,0x3F,0xFE,0xC0,0x00,0x00,                                               
+ 0x00,0x30,0x30,0x3F,0x1F,0x00,0x00,0x00},     /* 0x7d '}' */                          
+{0xE0,0xE0,0xFC,0xF8,0xF0,0xE0,0x40,0x00,                                               
+ 0x00,0x00,0x07,0x03,0x01,0x00,0x00,0x00},     /* 0x7e '~' */                          
+};
+
+#endif