diff --git a/MicroView.cpp b/MicroView.cpp index af501e3..77c63bc 100644 --- a/MicroView.cpp +++ b/MicroView.cpp @@ -62,14 +62,6 @@ static uint8_t screenmemory [] = { void MICROVIEW::begin() { // default 5x7 font - /* - fontType=0; - fontWidth=pgm_read_byte(fontsPointer[fontType]+1); - fontHeight=pgm_read_byte(fontsPointer[fontType]+2); - fontStartChar=pgm_read_byte(fontsPointer[fontType]+3); - fontTotalChar=pgm_read_byte(fontsPointer[fontType]+4); - */ - setFontType(0); setFontColor(WHITE); setFontDrawMode(NORM); @@ -185,7 +177,6 @@ void MICROVIEW::setColumnAddress(uint8_t add) { void MICROVIEW::clear(uint8_t mode) { uint8_t page=6, col=0x40; if (mode==ALL) { - for (int i=0;i<8; i++) { setPageAddress(i); setColumnAddress(0); @@ -201,6 +192,30 @@ void MICROVIEW::clear(uint8_t mode) { } } +/* + Clear GDRAM inside the LCD controller - mode = ALL with c character. + Clear screen page buffer - mode = PAGE with c character. +*/ +void MICROVIEW::clear(uint8_t mode, uint8_t c) { + uint8_t page=6, col=0x40; + if (mode==ALL) { + for (int i=0;i<8; i++) { + setPageAddress(i); + setColumnAddress(0); + for (int j=0; j<0x80; j++) { + data(c); + } + } + } + else + { + memset(screenmemory,c,384); // (64 x 48) / 8 = 384 + display(); + } +} + + + void MICROVIEW::display(void) { uint8_t i, j; @@ -246,6 +261,7 @@ size_t MICROVIEW::write(uint8_t c) { return; if (mode==XOR) { + if (color==WHITE) screenmemory[x+ (y/8)*LCDWIDTH] ^= _BV((y%8)); } else { @@ -402,6 +418,14 @@ size_t MICROVIEW::write(uint8_t c) { } } + uint8_t MICROVIEW::getLCDHeight(void) { + return LCDHEIGHT; + } + + uint8_t MICROVIEW::getLCDWidth(void) { + return LCDWIDTH; + } + uint8_t MICROVIEW::getFontWidth(void) { return fontWidth; } @@ -431,11 +455,11 @@ size_t MICROVIEW::write(uint8_t c) { return -1; fontType=type; - fontWidth=pgm_read_byte(fontsPointer[fontType]+1); - fontHeight=pgm_read_byte(fontsPointer[fontType]+2); - fontStartChar=pgm_read_byte(fontsPointer[fontType]+3); - fontTotalChar=pgm_read_byte(fontsPointer[fontType]+4); - fontMapWidth=(pgm_read_byte(fontsPointer[fontType]+5)*100)+pgm_read_byte(fontsPointer[fontType]+6); // two bytes values into integer 16 + fontWidth=pgm_read_byte(fontsPointer[fontType]+0); + fontHeight=pgm_read_byte(fontsPointer[fontType]+1); + fontStartChar=pgm_read_byte(fontsPointer[fontType]+2); + fontTotalChar=pgm_read_byte(fontsPointer[fontType]+3); + fontMapWidth=(pgm_read_byte(fontsPointer[fontType]+4)*100)+pgm_read_byte(fontsPointer[fontType]+5); // two bytes values into integer 16 } @@ -452,14 +476,14 @@ size_t MICROVIEW::write(uint8_t c) { uint8_t rowsToDraw,row, tempC; uint8_t i,j,tempX; uint16_t charPerBitmapRow,charColPositionOnBitmap,charRowPositionOnBitmap,charBitmapStartPosition; - // TODO - char must be able to be drawn anywhere, not limited by line + // TODO - char must be able to XOR on background //if ((line >= LCDHEIGHT/fontHeight) || (x > (LCDWIDTH - fontWidth))) //return; if ((c(fontStartChar+fontTotalChar-1))) // no bitmap for the required c - return; + return; tempC=c-fontStartChar; diff --git a/MicroView.h b/MicroView.h index b0728db..4d6068c 100644 --- a/MicroView.h +++ b/MicroView.h @@ -21,8 +21,7 @@ #define LCDWIDTH 64 #define LCDHEIGHT 48 -#define FONTHEADERSIZE 7 - +#define FONTHEADERSIZE 6 #define NORM 0 #define XOR 1 @@ -30,8 +29,6 @@ #define PAGE 0 #define ALL 1 - - #define SETCONTRAST 0x81 #define DISPLAYALLONRESUME 0xA4 #define DISPLAYALLON 0xA5 @@ -84,6 +81,7 @@ public: // LCD Draw functions void clear(uint8_t mode); + void clear(uint8_t mode, uint8_t c); void invert(uint8_t i); void display(void); void setCursor(uint8_t x, uint8_t y); @@ -97,6 +95,8 @@ public: void circleFill(uint8_t x0, uint8_t y0, uint8_t r, uint8_t color, uint8_t mode); void drawChar(uint8_t x, uint8_t y, uint8_t c, uint8_t color, uint8_t mode); void drawBitmap(void); + uint8_t getLCDWidth(void); + uint8_t getLCDHeight(void); // Font functions uint8_t getFontWidth(void); diff --git a/README.md b/README.md index 7ce2f18..cb9e861 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,18 @@ Arduino library for MicroView. History ------- -v1.0b: 30th January 2014 by JP Liew +v1.01b: 30th January 2014 by JP Liew + - fixed font draw XOR mode bug. + - added analog clock demo. + +v1.00b: 30th January 2014 by JP Liew - Initial commit. Beta with minor bugs. +Required Libraries +------------------ +1. SPI.h + + Installation Instructions ------------------------- 1. Extract / Check out to Arduino's libraries folder. diff --git a/examples/MicroViewDemo/MicroViewDemo.ino b/examples/MicroViewDemo/MicroViewDemo.ino index 7028289..9917474 100644 --- a/examples/MicroViewDemo/MicroViewDemo.ino +++ b/examples/MicroViewDemo/MicroViewDemo.ino @@ -1,98 +1,167 @@ #include #include +#include + +#define PI 3.141592654 +#define clocksize 24 MICROVIEW mv; -uint8_t dly=5; +uint8_t dly=5; // This is the erase delay in milliseconds, if there is no delay, the draw/erase will be too fast to be seen. void setup() { - Serial.begin(115200); - Serial.println("start"); - mv.begin(); - mv.clear(ALL); + mv.begin(); // Begin of MicroView + mv.clear(ALL); // Erase hardware memory inside the OLED controller + mv.display(); // Display the content in the buffer memory, by default it is the MicroView logo + setTime(10,10,01,17,1,2014); + delay(500); + mv.clear(PAGE); // Erase the memory buffer, when next mv.display() is called, the OLED will be cleared. } void loop() { - int i; - uint8_t x0,y0,x1,y1; - - mv.setFontType(0); - mv.setCursor(0,40); - mv.print(" LINE "); - mv.display(); - delay(500); - - for (i=0; i<150;i++) { - x0=random(64); - x1=random(64); - y0=random(48); - y1=random(48); - - mv.line(x0,y0,x1,y1, WHITE, XOR); - mv.display(); - delay(dly); - mv.line(x0,y0,x1,y1, WHITE,XOR); - mv.display(); - } + int i; + static long counter=99999; + static long mSec=millis()+1000; + static uint8_t x0,y0,x1,y1; + static float degresshour,degressmin,degresssec,hourx,houry,minx,miny,secx,secy; + static boolean drawnFirst=false; - mv.setCursor(0,40); - mv.print("RECTANGLE "); - mv.display(); - delay(500); + mv.setFontType(0); // set font type 0, please see declaration in MicroView.cpp + mv.setCursor(27,0); // points cursor to x=27 y=0 + mv.print(12); + mv.setCursor(30,mv.getLCDHeight()-mv.getFontHeight()); + mv.print(6); + mv.setCursor(0,mv.getLCDHeight() /2-(mv.getFontHeight()/2)); + mv.print(9); + mv.setCursor(mv.getLCDWidth()-mv.getFontWidth(),mv.getLCDWidth()/2-(mv.getFontHeight()/2)); + mv.print(3); + mv.display(); // display the memory buffer drawn - x0=0;y0=0;x1=0;y1=0; - for (i=1; i<64;i++) { - y1=i; - if (y1>47) y1=47; - mv.rect(x0,y0,i,y1,WHITE,XOR); - mv.display(); - delay(dly); - mv.rect(x0,y0,i,y1,WHITE,XOR); - mv.display(); - } - - mv.setCursor(0,40); - mv.print(" CIRCLE "); - mv.display(); - delay(500); - - x0=32;y0=24; - for (i=0;i<32;i++) { - mv.circle(x0,y0,i,WHITE,XOR); - mv.display(); - delay(dly); - mv.circle(x0,y0,i,WHITE,XOR); - mv.display(); - delay(dly); - - } + while ((second() % 10 )!=0) { + if (mSec!=second()) { + if (drawnFirst) { + mv.line(32,24,32+hourx,24+houry,WHITE,XOR); + mv.line(32,24,32+minx,24+miny,WHITE,XOR); + mv.line(32,24,32+secx,24+secy,WHITE,XOR); + } + + degresshour = (((hour() * 360) / 12) + 270) * (PI / 180); + degressmin = (((minute() * 360) / 60) + 270) * (PI / 180); + degresssec = (((second() * 360) / 60) + 270) * (PI / 180); + + hourx = cos(degresshour) * (clocksize / 2.5); + houry = sin(degresshour) * (clocksize / 2.5); - delay(500); - - mv.clear(PAGE); - mv.setCursor(0,40); - mv.print(" Font 0 "); - mv.display(); + minx = cos(degressmin) * (clocksize / 1.4); + miny = sin(degressmin) * (clocksize / 1.4); - mv.setFontType(0); - mv.setCursor(0,0); - mv.print("01234567890ABCDabcd01234567890ABCDabcd"); - mv.display(); - delay(1500); + secx = cos(degresssec) * (clocksize / 1.1); + secy = sin(degresssec) * (clocksize / 1.1); + + + mv.line(32,24,32+hourx,24+houry,WHITE,XOR); + mv.line(32,24,32+minx,24+miny,WHITE,XOR); + mv.line(32,24,32+secx,24+secy,WHITE,XOR); + drawnFirst=true; + mv.display(); + + mSec=second(); + } + } + drawnFirst=false; + mv.clear(PAGE); + + mv.setFontType(0); + mv.setCursor(0,40); + mv.print(" LINE "); + mv.display(); + delay(500); + + for (i=0; i<150;i++) { + x0=random(64); + x1=random(64); + y0=random(48); + y1=random(48); + + mv.line(x0,y0,x1,y1, WHITE, XOR); // draw line from x0,y0 to x1,y1 using WHITE color and XOR draw mode + mv.display(); + delay(dly); + mv.line(x0,y0,x1,y1, WHITE,XOR); + mv.display(); + } + + mv.setCursor(0,40); + mv.print("RECTANGLE "); + mv.display(); + delay(500); + + x0=0;y0=0;x1=0;y1=0; + for (i=1; i<64;i++) { + y1=i; + if (y1>47) y1=47; + mv.rect(x0,y0,i,y1,WHITE,XOR); // draw rectangle from x0,y0 with width of i and height of y1 using WHITE color and XOR draw mode + mv.display(); + delay(dly); + mv.rect(x0,y0,i,y1,WHITE,XOR); + mv.display(); + } + + mv.setCursor(0,40); + mv.print(" CIRCLE "); + mv.display(); + delay(500); + + x0=32;y0=24; + for (i=0;i<32;i++) { + mv.circle(x0,y0,i,WHITE,XOR); // draw circle at x0,y0 with radius of i using WHITE color and XOR draw mode + mv.display(); + delay(dly); + mv.circle(x0,y0,i,WHITE,XOR); + mv.display(); + delay(dly); + + } + delay(500); + + mv.clear(PAGE); + mv.setCursor(0,40); + mv.print(" Font 0 "); + mv.display(); + + mv.setFontType(0); + mv.setCursor(0,0); + mv.print("01234567890ABCDabcd01234567890ABCDabcd"); + mv.display(); + delay(1500); - mv.clear(PAGE); - mv.setCursor(0,40); - mv.print(" Font 1 "); - mv.display(); + mv.clear(PAGE); + mv.setCursor(0,40); + mv.print(" Font 1 "); + mv.display(); - mv.setFontType(1); - mv.setCursor(0,0); - mv.print("0123ABCDabcd"); - mv.display(); - delay(1500); - mv.clear(PAGE); + mv.setFontType(1); + mv.setCursor(0,0); + mv.print("0123ABCDabcd"); + mv.display(); + delay(1500); + mv.clear(PAGE); + + counter=99999; + while (counter>99970) { + + if (millis()>=mSec) { + + mv.setFontType(2); + mv.setCursor(0,0); + mv.print(counter); + counter--; + mv.display(); + mSec=millis()+100; + } + } + mv.clear(PAGE); } diff --git a/font5x7.h b/font5x7.h index 5760d21..11f500e 100644 --- a/font5x7.h +++ b/font5x7.h @@ -5,8 +5,8 @@ // Standard ASCII 5x7 font static const unsigned char font5x7[] PROGMEM = { - // first row FONTTYPE, FONTWIDTH, FONTHEIGHT, ASCII START CHAR, TOTAL CHARACTERS, FONT MAP WIDTH - 0,5,8,0,255,12,75, + // first row defines - FONTWIDTH, FONTHEIGHT, ASCII START CHAR, TOTAL CHARACTERS, FONT MAP WIDTH HIGH, FONT MAP WIDTH LOW (2,56 meaning 256) + 5,8,0,255,12,75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, diff --git a/font8x16.h b/font8x16.h index d4e341b..727c70a 100644 --- a/font8x16.h +++ b/font8x16.h @@ -4,8 +4,8 @@ #include static const unsigned char font8x16[] PROGMEM = { - // first row FONTTYPE, FONTWIDTH, FONTHEIGHT, ASCII START CHAR, TOTAL CHARACTERS, FONT MAP WIDTH HIGH, FONT MAP WIDTH LOW (2,56 meaning 256) - 0,8,16,0,160,2,56, + // first row defines - FONTWIDTH, FONTHEIGHT, ASCII START CHAR, TOTAL CHARACTERS, FONT MAP WIDTH HIGH, FONT MAP WIDTH LOW (2,56 meaning 256) + 8,16,0,160,2,56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/fontlargenumber.h b/fontlargenumber.h index d9b130f..0849a83 100644 --- a/fontlargenumber.h +++ b/fontlargenumber.h @@ -4,57 +4,57 @@ #include static const unsigned char fontlargenumber[] PROGMEM = { - // first row FONTTYPE, FONTWIDTH, FONTHEIGHT, ASCII START CHAR, TOTAL CHARACTERS, FONT MAP WIDTH HIGH, FONT MAP WIDTH LOW (2,56 meaning 256) - 2,12,48,48,11,1,32, -0x00, 0xC0, 0xF8, 0x7C, 0x3E, 0x3E, 0xFC, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, -0x78, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7C, 0x3C, 0x3E, 0x3E, 0xFE, 0xFC, -0xE0, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x3E, 0x3E, 0x3E, 0xFE, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x3E, -0x3E, 0x3E, 0x3E, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0xFC, 0x3E, 0x3E, 0x3E, -0xFC, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0xFE, 0xFE, 0x00, 0x00, -0x00, 0x00, 0xC0, 0xF8, 0xFE, 0x3E, 0x7E, 0xFC, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFC, -0x7E, 0x3E, 0xFE, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xC0, 0x00, -0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x07, 0x03, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, -0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFC, -0x7F, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, -0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x3F, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, -0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFE, 0x1F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, -0xFC, 0xFF, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFE, 0x3F, 0x03, 0x00, 0xFF, 0xFF, -0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3E, 0x7E, 0xFC, 0xF8, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x00, 0xFF, 0xFF, 0x80, 0xF0, 0x7C, 0x7C, 0xF8, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x80, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x9F, 0xFF, 0xF8, 0xFE, 0x1F, -0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xFC, -0x7F, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFE, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xE7, 0xE0, -0xE0, 0xE0, 0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, -0xFE, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x00, -0x00, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFC, 0x3F, -0x03, 0x03, 0x1F, 0xFF, 0xFC, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x3E, 0x3E, 0x0F, 0x01, -0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x07, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, -0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x80, -0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x80, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1F, 0x3F, 0x7C, 0x7C, 0x3F, 0x1F, 0x03, 0x00, 0x00, 0x00, -0x00, 0x00, 0x7C, 0x7C, 0x7C, 0x7F, 0x7F, 0x7C, 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7C, -0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7E, 0x7C, 0x7C, 0x7E, 0x1F, 0x07, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, -0x00, 0x1F, 0x3E, 0x7C, 0x7C, 0x3E, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1F, -0x7F, 0x7C, 0x7C, 0x3F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1F, 0x3F, 0x7E, 0x7C, 0x7E, 0x3F, 0x1F, 0x01, 0x00, 0x00, -0x00, 0x00, 0x3E, 0x7C, 0x7C, 0x7E, 0x3F, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // first row defines - FONTWIDTH, FONTHEIGHT, ASCII START CHAR, TOTAL CHARACTERS, FONT MAP WIDTH HIGH, FONT MAP WIDTH LOW (2,56 meaning 256) + 12,48,48,11,1,32, + 0x00, 0xC0, 0xF8, 0x7C, 0x3E, 0x3E, 0xFC, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, + 0x78, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7C, 0x3C, 0x3E, 0x3E, 0xFE, 0xFC, + 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x3E, 0x3E, 0x3E, 0xFE, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x3E, + 0x3E, 0x3E, 0x3E, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0xFC, 0x3E, 0x3E, 0x3E, + 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0xFE, 0xFE, 0x00, 0x00, + 0x00, 0x00, 0xC0, 0xF8, 0xFE, 0x3E, 0x7E, 0xFC, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFC, + 0x7E, 0x3E, 0xFE, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xC0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xF0, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x03, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFC, + 0x7F, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3F, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFE, 0x1F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, + 0xFC, 0xFF, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFE, 0x3F, 0x03, 0x00, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3E, 0x7E, 0xFC, 0xF8, 0xE0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x80, 0xF0, 0x7C, 0x7C, 0xF8, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x9F, 0xFF, 0xF8, 0xFE, 0x1F, + 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xFC, + 0x7F, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFE, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xE7, 0xE0, + 0xE0, 0xE0, 0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, + 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFC, 0x3F, + 0x03, 0x03, 0x1F, 0xFF, 0xFC, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x3E, 0x3E, 0x0F, 0x01, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x80, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1F, 0x3F, 0x7C, 0x7C, 0x3F, 0x1F, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7C, 0x7C, 0x7C, 0x7F, 0x7F, 0x7C, 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7C, + 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7E, 0x7C, 0x7C, 0x7E, 0x1F, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1F, 0x3E, 0x7C, 0x7C, 0x3E, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1F, + 0x7F, 0x7C, 0x7C, 0x3F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1F, 0x3F, 0x7E, 0x7C, 0x7E, 0x3F, 0x1F, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x3E, 0x7C, 0x7C, 0x7E, 0x3F, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #endif