SSD1327 SeeedStudio OLED display

Dependents:   drive drive1 drive213 drive123213

Files at this revision

API Documentation at this revision

Comitter:
vart
Date:
Tue Oct 11 08:33:26 2016 +0000
Commit message:
initial commit

Changed in this revision

SSD1327.cpp Show annotated file Show diff for this revision Revisions of this file
SSD1327.h Show annotated file Show diff for this revision Revisions of this file
defaultfont.h Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r dae0ebfc0852 SSD1327.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SSD1327.cpp	Tue Oct 11 08:33:26 2016 +0000
@@ -0,0 +1,182 @@
+#include "mbed.h"
+#include "SSD1327.h"
+
+/// 96x96 pixel SSD1327 SeeedStudio 1.12" OLED display
+/// http://www.displayfuture.com/Display/datasheet/controller/SSD1327.pdf
+/// based on https://github.com/blitz/mbed-arch-pro
+
+// font info
+int font_w;
+int font_h;
+int font_bpc; //bytes per char width
+uint8_t *font_s;
+
+unsigned char currR, currC;
+
+unsigned char grayH;
+unsigned char grayL;
+
+
+bool SSD1327::send(char mode, const char data[], size_t len)
+    {
+        for (size_t c = 0; c < len; c++) {
+            const char snd[2]= { mode, data[c] };
+            if (i2c.write(address, snd, sizeof(snd)) != 0)
+                return false;
+        }
+
+        return true;
+    }
+
+/*bool SSD1327::sendf(char mode, char data[], size_t len)
+    {
+        for (size_t c = 0; c < len; c++) {
+            const char snd[2]= { mode, data[c] };
+            if (i2c.write(address, snd, sizeof(snd)) != 0)
+                return false;
+        }
+
+        return true;
+    } */
+
+bool SSD1327::sendx(char mode, char data[], size_t len)
+    {
+        char snd[52];
+        snd[0]=mode;
+        for (char c=0;c<len;c++) snd[c+1]=data[c];
+        if (i2c.write(address, snd, len+1) != 0)
+                return false;
+        return true;
+    }
+
+void SSD1327::tribyte_cmd(uint8_t a, uint8_t b, uint8_t c)
+    {
+        char data[] = { a, b, c };
+        send(cmd_mode, data, sizeof(data));
+
+    }
+
+void SSD1327::set_column_address(uint8_t start, uint8_t end)
+    {
+        tribyte_cmd(0x15, start, end);
+    }
+
+void SSD1327::set_row_address(uint8_t start, uint8_t end)
+    {
+        tribyte_cmd(0x75, start, end);
+    }
+    
+void SSD1327::set_gray_level(unsigned char level)
+    {
+        grayL =  level & 0x0F;
+        grayH =  grayL<<4;
+    }
+    
+void SSD1327::set_text_rc(unsigned char row, unsigned char column)
+{
+  currR=row;
+  currC=column;
+  set_column_address(8+column*font_w/2,8+column*font_w/2+font_w/2-1);
+  set_row_address(0x00+(row*font_h),0x00+(row*font_h+(font_h-1)));
+}    
+
+void SSD1327::set_rc(unsigned char row, unsigned char column)
+{
+  if (row>PIXELS) row=PIXELS;
+  if (column>PIXELS) column=PIXELS;
+  currR=row;
+  currC=column/2;
+  set_column_address(8+column/2,8+column/2+font_w/2-1);
+  set_row_address(row,row+(font_h-1));
+}    
+
+void SSD1327::putc(unsigned char C)
+{
+  uint8_t line;
+  uint8_t *pchar;
+  char cc=0;
+   char out[50];
+
+    if(C < 32 || C > 127) //Ignore non-printable ASCII characters. This can be modified for multilingual font.
+    {
+        C=' '; //Space
+    }
+
+    pchar=font_s+((C-32)*font_h*font_bpc);
+
+    for (char i = 0; i < font_h; i++) {
+      char outcc=0;
+      for (char j=0; j<font_bpc; j++) {
+          line=pchar[cc++];
+          for (char k=0; k<4;k++) {
+            char c=0x00;
+            char bit1=line & 0x80; line<<=1;
+            char bit2=line & 0x80; line<<=1;
+            c|=(bit1)?grayH:0x00;
+            c|=(bit2)?grayL:0x00;
+            out[outcc++]=c;
+          }
+      }
+      sendx(data_mode,out,font_bpc*4);
+    }
+    set_text_rc(currR,currC+1);
+}
+
+void SSD1327::puts(const char *str)
+{
+    unsigned char i=0;
+    while(str[i])
+    {
+        putc(str[i]);
+        i++;
+    }
+}
+
+void SSD1327::set_font(const uint8_t *Font, int width, int height) {
+  font_s= (uint8_t *) Font;
+  font_h=height;
+  font_w=width;
+  font_bpc=width/8;
+}
+
+
+
+void SSD1327::clear()
+    {
+        char empty[48]={0};    
+        set_column_address(8, 8 + PIXELS/2 - 1);
+        set_row_address   (0, PIXELS - 1);
+        for (char j=0;j<96;j++) sendx(data_mode, empty, sizeof(empty));
+    }
+
+SSD1327::SSD1327(I2C &i2c)
+        : i2c(i2c)
+    {
+        // Init gray level for text. Default:Brightest White
+        grayH= 0xF0;
+        grayL= 0x0F;
+
+        static const char init[] = { 0xFD, 0x12, 0xAE, 0xA8, 0x5F, 0xA1,
+                                     0x00, 0xA2, 0x60, 0xA0, 0x46, 0xAB,
+                                     0x01, 0x81, 0x53, 0xB1, 0x51, 0xB3,
+                                     0x01, 0xB9, 0xBC, 0x08, 0xBE, 0x07,
+                                     0xB6, 0x01, 0xD5, 0x62, 0xA4, 0x2E,
+                                     0xAF };
+
+        if (not send(cmd_mode, init, sizeof(init))) {
+//            pc.printf("SSD1327 init failed.\n");
+        }
+
+        wait_ms(100);
+
+        static const char init2[] = { 0xA0, 0x42,
+                                      0x15, 0x08, 0x37, 0x75, 0x00, 0x5f  };
+
+        if (not send(cmd_mode, init2, sizeof(init2))) {
+//            pc.printf("SSD1327 init2 failed.\n");
+        }
+//        pc.printf("SSD1327 initialized.\n");
+        clear();
+    }
+
+// EOF
diff -r 000000000000 -r dae0ebfc0852 SSD1327.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SSD1327.h	Tue Oct 11 08:33:26 2016 +0000
@@ -0,0 +1,111 @@
+#ifndef SSD1327_H
+#define SSD1327_H
+
+#include "mbed.h"
+
+/** 96x96 pixel SSD1327 SeeedStudio 1.12" OLED display
+
+based on https://github.com/blitz/mbed-arch-pro
+
+Example:
+@code
+#include "mbed.h"
+#include "SSD1327.h"
+#include "defaultfont.h"
+
+//Pin Defines for I2C Bus
+#define D_SDA                  D3
+#define D_SCL                  D6
+I2C i2c(D_SDA, D_SCL);
+
+// Instantiate OLED
+static SSD1327 oled { i2c };
+ 
+
+ int main() {
+         oled.set_font(default_font,8,8);
+         oled.set_text_rc(0,0);
+         oled.puts("Hello world!");
+         while (1) {wait(0.1);}
+}
+@endcode
+*/
+
+class SSD1327 {
+    I2C &i2c;
+
+
+public:
+    /* Create SSD1327 object
+    */
+    SSD1327(I2C &i2c);
+
+    const static uint8_t address   = 0x3c << 1;
+    const static uint8_t cmd_mode  = 0x80;
+    const static uint8_t data_mode = 0x40;
+
+    const static uint8_t PIXELS         = 96;
+    const static uint8_t PIXEL_PER_CHAR = 8; // if default font used
+
+    const static uint8_t ROWS = PIXELS / PIXEL_PER_CHAR;
+    const static uint8_t COLS = PIXELS / PIXEL_PER_CHAR;
+    
+    /** Set Gray Level 
+    * @param level - new gray level  (0..0xF)
+    */
+    void set_gray_level(unsigned char level);
+    
+    /** Set text font
+    * @param Font - font array
+    * @param width - font width (only 8, 16, 24 or 32)
+    * @param height - font height
+    */
+    void set_font(const uint8_t *Font, int width, int height);
+    
+    /** Set new Row and Column
+    * @param row - new row (0..95)
+    * @param column - new column (0..95)
+    */
+    void set_rc(unsigned char row, unsigned char column);
+    
+    /** Set new text Row and Column
+    * Used after set_font
+    * @param row - new row (0..96/font_height-1)
+    * @param column - new column (0..96/font_width-1)
+    */
+    void set_text_rc(unsigned char row, unsigned char column);
+    
+    /** Put char into display using current font
+    * @param C - printed char
+    */
+    void putc(unsigned char C);
+
+    /** Put string into display using current font
+    * @param str - printed string
+    */
+    void puts(const char *str);
+    
+    /** Clear display
+    */
+    void clear();
+    
+    // Service low-level functions
+
+    bool send(char mode, const char data[], size_t len);
+
+    void tribyte_cmd(uint8_t a, uint8_t b, uint8_t c);
+    
+    void set_column_address(uint8_t start, uint8_t end);
+
+    void set_row_address(uint8_t start, uint8_t end);
+    
+    //bool sendf(char mode, char data[], size_t len);
+    
+    bool sendx(char mode, char data[], size_t len);
+    
+    
+};
+
+#endif // SSD1327_H
+
+// EOF
diff -r 000000000000 -r dae0ebfc0852 defaultfont.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultfont.h	Tue Oct 11 08:33:26 2016 +0000
@@ -0,0 +1,957 @@
+// Default font 8x8
+// usage: oled.set_font(default_font,8,8);
+
+const uint8_t default_font [760]=
+{     /* 32 0x20 ' ' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+
+    /* 33 0x21 '!' */
+    0x18, /* 00011000 */
+    0x3c, /* 00111100 */
+    0x3c, /* 00111100 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x00, /* 00000000 */
+    0x18, /* 00011000 */
+    0x00, /* 00000000 */
+
+    /* 34 0x22 '"' */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0x24, /* 00100100 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+
+    /* 35 0x23 '#' */
+    0x6c, /* 01101100 */
+    0x6c, /* 01101100 */
+    0xfe, /* 11111110 */
+    0x6c, /* 01101100 */
+    0xfe, /* 11111110 */
+    0x6c, /* 01101100 */
+    0x6c, /* 01101100 */
+    0x00, /* 00000000 */
+
+    /* 36 0x24 '$' */
+    0x18, /* 00011000 */
+    0x3e, /* 00111110 */
+    0x60, /* 01100000 */
+    0x3c, /* 00111100 */
+    0x06, /* 00000110 */
+    0x7c, /* 01111100 */
+    0x18, /* 00011000 */
+    0x00, /* 00000000 */
+
+    /* 37 0x25 '%' */
+    0x00, /* 00000000 */
+    0xc6, /* 11000110 */
+    0xcc, /* 11001100 */
+    0x18, /* 00011000 */
+    0x30, /* 00110000 */
+    0x66, /* 01100110 */
+    0xc6, /* 11000110 */
+    0x00, /* 00000000 */
+
+    /* 38 0x26 '&' */
+    0x38, /* 00111000 */
+    0x6c, /* 01101100 */
+    0x38, /* 00111000 */
+    0x76, /* 01110110 */
+    0xdc, /* 11011100 */
+    0xcc, /* 11001100 */
+    0x76, /* 01110110 */
+    0x00, /* 00000000 */
+
+    /* 39 0x27 ''' */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x30, /* 00110000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+
+    /* 40 0x28 '(' */
+    0x0c, /* 00001100 */
+    0x18, /* 00011000 */
+    0x30, /* 00110000 */
+    0x30, /* 00110000 */
+    0x30, /* 00110000 */
+    0x18, /* 00011000 */
+    0x0c, /* 00001100 */
+    0x00, /* 00000000 */
+
+    /* 41 0x29 ')' */
+    0x30, /* 00110000 */
+    0x18, /* 00011000 */
+    0x0c, /* 00001100 */
+    0x0c, /* 00001100 */
+    0x0c, /* 00001100 */
+    0x18, /* 00011000 */
+    0x30, /* 00110000 */
+    0x00, /* 00000000 */
+
+    /* 42 0x2a '*' */
+    0x00, /* 00000000 */
+    0x66, /* 01100110 */
+    0x3c, /* 00111100 */
+    0xff, /* 11111111 */
+    0x3c, /* 00111100 */
+    0x66, /* 01100110 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+
+    /* 43 0x2b '+' */
+    0x00, /* 00000000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x7e, /* 01111110 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+
+    /* 44 0x2c ',' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x30, /* 00110000 */
+
+    /* 45 0x2d '-' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x7e, /* 01111110 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+
+    /* 46 0x2e '.' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x00, /* 00000000 */
+
+    /* 47 0x2f '/' */
+    0x06, /* 00000110 */
+    0x0c, /* 00001100 */
+    0x18, /* 00011000 */
+    0x30, /* 00110000 */
+    0x60, /* 01100000 */
+    0xc0, /* 11000000 */
+    0x80, /* 10000000 */
+    0x00, /* 00000000 */
+
+    /* 48 0x30 '0' */
+    0x38, /* 00111000 */
+    0x6c, /* 01101100 */
+    0xc6, /* 11000110 */
+    0xd6, /* 11010110 */
+    0xc6, /* 11000110 */
+    0x6c, /* 01101100 */
+    0x38, /* 00111000 */
+    0x00, /* 00000000 */
+
+    /* 49 0x31 '1' */
+    0x18, /* 00011000 */
+    0x38, /* 00111000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x7e, /* 01111110 */
+    0x00, /* 00000000 */
+
+    /* 50 0x32 '2' */
+    0x7c, /* 01111100 */
+    0xc6, /* 11000110 */
+    0x06, /* 00000110 */
+    0x1c, /* 00011100 */
+    0x30, /* 00110000 */
+    0x66, /* 01100110 */
+    0xfe, /* 11111110 */
+    0x00, /* 00000000 */
+
+    /* 51 0x33 '3' */
+    0x7c, /* 01111100 */
+    0xc6, /* 11000110 */
+    0x06, /* 00000110 */
+    0x3c, /* 00111100 */
+    0x06, /* 00000110 */
+    0xc6, /* 11000110 */
+    0x7c, /* 01111100 */
+    0x00, /* 00000000 */
+
+    /* 52 0x34 '4' */
+    0x1c, /* 00011100 */
+    0x3c, /* 00111100 */
+    0x6c, /* 01101100 */
+    0xcc, /* 11001100 */
+    0xfe, /* 11111110 */
+    0x0c, /* 00001100 */
+    0x1e, /* 00011110 */
+    0x00, /* 00000000 */
+
+    /* 53 0x35 '5' */
+    0xfe, /* 11111110 */
+    0xc0, /* 11000000 */
+    0xc0, /* 11000000 */
+    0xfc, /* 11111100 */
+    0x06, /* 00000110 */
+    0xc6, /* 11000110 */
+    0x7c, /* 01111100 */
+    0x00, /* 00000000 */
+
+    /* 54 0x36 '6' */
+    0x38, /* 00111000 */
+    0x60, /* 01100000 */
+    0xc0, /* 11000000 */
+    0xfc, /* 11111100 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x7c, /* 01111100 */
+    0x00, /* 00000000 */
+
+    /* 55 0x37 '7' */
+    0xfe, /* 11111110 */
+    0xc6, /* 11000110 */
+    0x0c, /* 00001100 */
+    0x18, /* 00011000 */
+    0x30, /* 00110000 */
+    0x30, /* 00110000 */
+    0x30, /* 00110000 */
+    0x00, /* 00000000 */
+
+    /* 56 0x38 '8' */
+    0x7c, /* 01111100 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x7c, /* 01111100 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x7c, /* 01111100 */
+    0x00, /* 00000000 */
+
+    /* 57 0x39 '9' */
+    0x7c, /* 01111100 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x7e, /* 01111110 */
+    0x06, /* 00000110 */
+    0x0c, /* 00001100 */
+    0x78, /* 01111000 */
+    0x00, /* 00000000 */
+
+    /* 58 0x3a ':' */
+    0x00, /* 00000000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x00, /* 00000000 */
+
+    /* 59 0x3b ';' */
+    0x00, /* 00000000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x30, /* 00110000 */
+
+    /* 60 0x3c '<' */
+    0x06, /* 00000110 */
+    0x0c, /* 00001100 */
+    0x18, /* 00011000 */
+    0x30, /* 00110000 */
+    0x18, /* 00011000 */
+    0x0c, /* 00001100 */
+    0x06, /* 00000110 */
+    0x00, /* 00000000 */
+
+    /* 61 0x3d '=' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x7e, /* 01111110 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x7e, /* 01111110 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+
+    /* 62 0x3e '>' */
+    0x60, /* 01100000 */
+    0x30, /* 00110000 */
+    0x18, /* 00011000 */
+    0x0c, /* 00001100 */
+    0x18, /* 00011000 */
+    0x30, /* 00110000 */
+    0x60, /* 01100000 */
+    0x00, /* 00000000 */
+
+    /* 63 0x3f '?' */
+    0x7c, /* 01111100 */
+    0xc6, /* 11000110 */
+    0x0c, /* 00001100 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x00, /* 00000000 */
+    0x18, /* 00011000 */
+    0x00, /* 00000000 */
+
+    /* 64 0x40 '@' */
+    0x7c, /* 01111100 */
+    0xc6, /* 11000110 */
+    0xde, /* 11011110 */
+    0xde, /* 11011110 */
+    0xde, /* 11011110 */
+    0xc0, /* 11000000 */
+    0x78, /* 01111000 */
+    0x00, /* 00000000 */
+
+    /* 65 0x41 'A' */
+    0x38, /* 00111000 */
+    0x6c, /* 01101100 */
+    0xc6, /* 11000110 */
+    0xfe, /* 11111110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x00, /* 00000000 */
+
+    /* 66 0x42 'B' */
+    0xfc, /* 11111100 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0x7c, /* 01111100 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0xfc, /* 11111100 */
+    0x00, /* 00000000 */
+
+    /* 67 0x43 'C' */
+    0x3c, /* 00111100 */
+    0x66, /* 01100110 */
+    0xc0, /* 11000000 */
+    0xc0, /* 11000000 */
+    0xc0, /* 11000000 */
+    0x66, /* 01100110 */
+    0x3c, /* 00111100 */
+    0x00, /* 00000000 */
+
+    /* 68 0x44 'D' */
+    0xf8, /* 11111000 */
+    0x6c, /* 01101100 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0x6c, /* 01101100 */
+    0xf8, /* 11111000 */
+    0x00, /* 00000000 */
+
+    /* 69 0x45 'E' */
+    0xfe, /* 11111110 */
+    0x62, /* 01100010 */
+    0x68, /* 01101000 */
+    0x78, /* 01111000 */
+    0x68, /* 01101000 */
+    0x62, /* 01100010 */
+    0xfe, /* 11111110 */
+    0x00, /* 00000000 */
+
+    /* 70 0x46 'F' */
+    0xfe, /* 11111110 */
+    0x62, /* 01100010 */
+    0x68, /* 01101000 */
+    0x78, /* 01111000 */
+    0x68, /* 01101000 */
+    0x60, /* 01100000 */
+    0xf0, /* 11110000 */
+    0x00, /* 00000000 */
+
+    /* 71 0x47 'G' */
+    0x3c, /* 00111100 */
+    0x66, /* 01100110 */
+    0xc0, /* 11000000 */
+    0xc0, /* 11000000 */
+    0xce, /* 11001110 */
+    0x66, /* 01100110 */
+    0x3a, /* 00111010 */
+    0x00, /* 00000000 */
+
+    /* 72 0x48 'H' */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xfe, /* 11111110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x00, /* 00000000 */
+
+    /* 73 0x49 'I' */
+    0x3c, /* 00111100 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x3c, /* 00111100 */
+    0x00, /* 00000000 */
+
+    /* 74 0x4a 'J' */
+    0x1e, /* 00011110 */
+    0x0c, /* 00001100 */
+    0x0c, /* 00001100 */
+    0x0c, /* 00001100 */
+    0xcc, /* 11001100 */
+    0xcc, /* 11001100 */
+    0x78, /* 01111000 */
+    0x00, /* 00000000 */
+
+    /* 75 0x4b 'K' */
+    0xe6, /* 11100110 */
+    0x66, /* 01100110 */
+    0x6c, /* 01101100 */
+    0x78, /* 01111000 */
+    0x6c, /* 01101100 */
+    0x66, /* 01100110 */
+    0xe6, /* 11100110 */
+    0x00, /* 00000000 */
+
+    /* 76 0x4c 'L' */
+    0xf0, /* 11110000 */
+    0x60, /* 01100000 */
+    0x60, /* 01100000 */
+    0x60, /* 01100000 */
+    0x62, /* 01100010 */
+    0x66, /* 01100110 */
+    0xfe, /* 11111110 */
+    0x00, /* 00000000 */
+
+    /* 77 0x4d 'M' */
+    0xc6, /* 11000110 */
+    0xee, /* 11101110 */
+    0xfe, /* 11111110 */
+    0xfe, /* 11111110 */
+    0xd6, /* 11010110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x00, /* 00000000 */
+
+    /* 78 0x4e 'N' */
+    0xc6, /* 11000110 */
+    0xe6, /* 11100110 */
+    0xf6, /* 11110110 */
+    0xde, /* 11011110 */
+    0xce, /* 11001110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x00, /* 00000000 */
+
+    /* 79 0x4f 'O' */
+    0x7c, /* 01111100 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x7c, /* 01111100 */
+    0x00, /* 00000000 */
+
+    /* 80 0x50 'P' */
+    0xfc, /* 11111100 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0x7c, /* 01111100 */
+    0x60, /* 01100000 */
+    0x60, /* 01100000 */
+    0xf0, /* 11110000 */
+    0x00, /* 00000000 */
+
+    /* 81 0x51 'Q' */
+    0x7c, /* 01111100 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xce, /* 11001110 */
+    0x7c, /* 01111100 */
+    0x0e, /* 00001110 */
+
+    /* 82 0x52 'R' */
+    0xfc, /* 11111100 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0x7c, /* 01111100 */
+    0x6c, /* 01101100 */
+    0x66, /* 01100110 */
+    0xe6, /* 11100110 */
+    0x00, /* 00000000 */
+
+    /* 83 0x53 'S' */
+    0x3c, /* 00111100 */
+    0x66, /* 01100110 */
+    0x30, /* 00110000 */
+    0x18, /* 00011000 */
+    0x0c, /* 00001100 */
+    0x66, /* 01100110 */
+    0x3c, /* 00111100 */
+    0x00, /* 00000000 */
+
+    /* 84 0x54 'T' */
+    0x7e, /* 01111110 */
+    0x7e, /* 01111110 */
+    0x5a, /* 01011010 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x3c, /* 00111100 */
+    0x00, /* 00000000 */
+
+    /* 85 0x55 'U' */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x7c, /* 01111100 */
+    0x00, /* 00000000 */
+
+    /* 86 0x56 'V' */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x6c, /* 01101100 */
+    0x38, /* 00111000 */
+    0x00, /* 00000000 */
+
+    /* 87 0x57 'W' */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xd6, /* 11010110 */
+    0xd6, /* 11010110 */
+    0xfe, /* 11111110 */
+    0x6c, /* 01101100 */
+    0x00, /* 00000000 */
+
+    /* 88 0x58 'X' */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x6c, /* 01101100 */
+    0x38, /* 00111000 */
+    0x6c, /* 01101100 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x00, /* 00000000 */
+
+    /* 89 0x59 'Y' */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0x3c, /* 00111100 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x3c, /* 00111100 */
+    0x00, /* 00000000 */
+
+    /* 90 0x5a 'Z' */
+    0xfe, /* 11111110 */
+    0xc6, /* 11000110 */
+    0x8c, /* 10001100 */
+    0x18, /* 00011000 */
+    0x32, /* 00110010 */
+    0x66, /* 01100110 */
+    0xfe, /* 11111110 */
+    0x00, /* 00000000 */
+
+    /* 91 0x5b '[' */
+    0x3c, /* 00111100 */
+    0x30, /* 00110000 */
+    0x30, /* 00110000 */
+    0x30, /* 00110000 */
+    0x30, /* 00110000 */
+    0x30, /* 00110000 */
+    0x3c, /* 00111100 */
+    0x00, /* 00000000 */
+
+    /* 92 0x5c '\' */
+    0xc0, /* 11000000 */
+    0x60, /* 01100000 */
+    0x30, /* 00110000 */
+    0x18, /* 00011000 */
+    0x0c, /* 00001100 */
+    0x06, /* 00000110 */
+    0x02, /* 00000010 */
+    0x00, /* 00000000 */
+
+    /* 93 0x5d ']' */
+    0x3c, /* 00111100 */
+    0x0c, /* 00001100 */
+    0x0c, /* 00001100 */
+    0x0c, /* 00001100 */
+    0x0c, /* 00001100 */
+    0x0c, /* 00001100 */
+    0x3c, /* 00111100 */
+    0x00, /* 00000000 */
+
+    /* 94 0x5e '^' */
+    0x10, /* 00010000 */
+    0x38, /* 00111000 */
+    0x6c, /* 01101100 */
+    0xc6, /* 11000110 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+
+    /* 95 0x5f '_' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0xff, /* 11111111 */
+
+    /* 96 0x60 '`' */
+    0x30, /* 00110000 */
+    0x18, /* 00011000 */
+    0x0c, /* 00001100 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+
+    /* 97 0x61 'a' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x78, /* 01111000 */
+    0x0c, /* 00001100 */
+    0x7c, /* 01111100 */
+    0xcc, /* 11001100 */
+    0x76, /* 01110110 */
+    0x00, /* 00000000 */
+
+    /* 98 0x62 'b' */
+    0xe0, /* 11100000 */
+    0x60, /* 01100000 */
+    0x7c, /* 01111100 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0xdc, /* 11011100 */
+    0x00, /* 00000000 */
+
+    /* 99 0x63 'c' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x7c, /* 01111100 */
+    0xc6, /* 11000110 */
+    0xc0, /* 11000000 */
+    0xc6, /* 11000110 */
+    0x7c, /* 01111100 */
+    0x00, /* 00000000 */
+
+    /* 100 0x64 'd' */
+    0x1c, /* 00011100 */
+    0x0c, /* 00001100 */
+    0x7c, /* 01111100 */
+    0xcc, /* 11001100 */
+    0xcc, /* 11001100 */
+    0xcc, /* 11001100 */
+    0x76, /* 01110110 */
+    0x00, /* 00000000 */
+
+    /* 101 0x65 'e' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x7c, /* 01111100 */
+    0xc6, /* 11000110 */
+    0xfe, /* 11111110 */
+    0xc0, /* 11000000 */
+    0x7c, /* 01111100 */
+    0x00, /* 00000000 */
+
+    /* 102 0x66 'f' */
+    0x3c, /* 00111100 */
+    0x66, /* 01100110 */
+    0x60, /* 01100000 */
+    0xf8, /* 11111000 */
+    0x60, /* 01100000 */
+    0x60, /* 01100000 */
+    0xf0, /* 11110000 */
+    0x00, /* 00000000 */
+
+    /* 103 0x67 'g' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x76, /* 01110110 */
+    0xcc, /* 11001100 */
+    0xcc, /* 11001100 */
+    0x7c, /* 01111100 */
+    0x0c, /* 00001100 */
+    0xf8, /* 11111000 */
+
+    /* 104 0x68 'h' */
+    0xe0, /* 11100000 */
+    0x60, /* 01100000 */
+    0x6c, /* 01101100 */
+    0x76, /* 01110110 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0xe6, /* 11100110 */
+    0x00, /* 00000000 */
+
+    /* 105 0x69 'i' */
+    0x18, /* 00011000 */
+    0x00, /* 00000000 */
+    0x38, /* 00111000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x3c, /* 00111100 */
+    0x00, /* 00000000 */
+
+    /* 106 0x6a 'j' */
+    0x06, /* 00000110 */
+    0x00, /* 00000000 */
+    0x06, /* 00000110 */
+    0x06, /* 00000110 */
+    0x06, /* 00000110 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0x3c, /* 00111100 */
+
+    /* 107 0x6b 'k' */
+    0xe0, /* 11100000 */
+    0x60, /* 01100000 */
+    0x66, /* 01100110 */
+    0x6c, /* 01101100 */
+    0x78, /* 01111000 */
+    0x6c, /* 01101100 */
+    0xe6, /* 11100110 */
+    0x00, /* 00000000 */
+
+    /* 108 0x6c 'l' */
+    0x38, /* 00111000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x3c, /* 00111100 */
+    0x00, /* 00000000 */
+
+    /* 109 0x6d 'm' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0xec, /* 11101100 */
+    0xfe, /* 11111110 */
+    0xd6, /* 11010110 */
+    0xd6, /* 11010110 */
+    0xd6, /* 11010110 */
+    0x00, /* 00000000 */
+
+    /* 110 0x6e 'n' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0xdc, /* 11011100 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0x00, /* 00000000 */
+
+    /* 111 0x6f 'o' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x7c, /* 01111100 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x7c, /* 01111100 */
+    0x00, /* 00000000 */
+
+    /* 112 0x70 'p' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0xdc, /* 11011100 */
+    0x66, /* 01100110 */
+    0x66, /* 01100110 */
+    0x7c, /* 01111100 */
+    0x60, /* 01100000 */
+    0xf0, /* 11110000 */
+
+    /* 113 0x71 'q' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x76, /* 01110110 */
+    0xcc, /* 11001100 */
+    0xcc, /* 11001100 */
+    0x7c, /* 01111100 */
+    0x0c, /* 00001100 */
+    0x1e, /* 00011110 */
+
+    /* 114 0x72 'r' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0xdc, /* 11011100 */
+    0x76, /* 01110110 */
+    0x60, /* 01100000 */
+    0x60, /* 01100000 */
+    0xf0, /* 11110000 */
+    0x00, /* 00000000 */
+
+    /* 115 0x73 's' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x7e, /* 01111110 */
+    0xc0, /* 11000000 */
+    0x7c, /* 01111100 */
+    0x06, /* 00000110 */
+    0xfc, /* 11111100 */
+    0x00, /* 00000000 */
+
+    /* 116 0x74 't' */
+    0x30, /* 00110000 */
+    0x30, /* 00110000 */
+    0xfc, /* 11111100 */
+    0x30, /* 00110000 */
+    0x30, /* 00110000 */
+    0x36, /* 00110110 */
+    0x1c, /* 00011100 */
+    0x00, /* 00000000 */
+
+    /* 117 0x75 'u' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0xcc, /* 11001100 */
+    0xcc, /* 11001100 */
+    0xcc, /* 11001100 */
+    0xcc, /* 11001100 */
+    0x76, /* 01110110 */
+    0x00, /* 00000000 */
+
+    /* 118 0x76 'v' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x6c, /* 01101100 */
+    0x38, /* 00111000 */
+    0x00, /* 00000000 */
+
+    /* 119 0x77 'w' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0xc6, /* 11000110 */
+    0xd6, /* 11010110 */
+    0xd6, /* 11010110 */
+    0xfe, /* 11111110 */
+    0x6c, /* 01101100 */
+    0x00, /* 00000000 */
+
+    /* 120 0x78 'x' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0xc6, /* 11000110 */
+    0x6c, /* 01101100 */
+    0x38, /* 00111000 */
+    0x6c, /* 01101100 */
+    0xc6, /* 11000110 */
+    0x00, /* 00000000 */
+
+    /* 121 0x79 'y' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0xc6, /* 11000110 */
+    0x7e, /* 01111110 */
+    0x06, /* 00000110 */
+    0xfc, /* 11111100 */
+
+    /* 122 0x7a 'z' */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x7e, /* 01111110 */
+    0x4c, /* 01001100 */
+    0x18, /* 00011000 */
+    0x32, /* 00110010 */
+    0x7e, /* 01111110 */
+    0x00, /* 00000000 */
+
+    /* 123 0x7b '{' */
+    0x0e, /* 00001110 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x70, /* 01110000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x0e, /* 00001110 */
+    0x00, /* 00000000 */
+
+    /* 124 0x7c '|' */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x00, /* 00000000 */
+
+    /* 125 0x7d '}' */
+    0x70, /* 01110000 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x0e, /* 00001110 */
+    0x18, /* 00011000 */
+    0x18, /* 00011000 */
+    0x70, /* 01110000 */
+    0x00, /* 00000000 */
+
+    /* 126 0x7e '~' */
+    0x76, /* 01110110 */
+    0xdc, /* 11011100 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+    0x00, /* 00000000 */
+
+
+};
+