From 759240c51af1f845f784ced70fde5fdf4f19fdf3 Mon Sep 17 00:00:00 2001 From: Kropochev Alexander Date: Mon, 19 Feb 2018 23:25:16 +0500 Subject: [PATCH] Added cyrillic font --- Max72xxPanel.cpp | 217 +++++++++------- Max72xxPanel.h | 67 ++--- README.md | 6 +- README.pdf | Bin 39884 -> 46129 bytes examples/Ticker/{Ticker.pde => Ticker.ino} | 10 +- examples/Ticker/utf8rus.ino | 33 +++ glcdfont.c | 273 +++++++++++++++++++++ 7 files changed, 482 insertions(+), 124 deletions(-) mode change 100644 => 100755 Max72xxPanel.cpp mode change 100644 => 100755 Max72xxPanel.h rename examples/Ticker/{Ticker.pde => Ticker.ino} (88%) create mode 100644 examples/Ticker/utf8rus.ino create mode 100644 glcdfont.c diff --git a/Max72xxPanel.cpp b/Max72xxPanel.cpp old mode 100644 new mode 100755 index 1b54521..bb2d268 --- a/Max72xxPanel.cpp +++ b/Max72xxPanel.cpp @@ -16,6 +16,7 @@ #include #include "Max72xxPanel.h" +#include "glcdfont.c" #include // The opcodes for the MAX7221 and MAX7219 @@ -40,15 +41,15 @@ Max72xxPanel::Max72xxPanel(byte csPin, byte hDisplays, byte vDisplays) : Adafrui byte displays = hDisplays * vDisplays; Max72xxPanel::hDisplays = hDisplays; - Max72xxPanel::bitmapSize = displays << 3; + Max72xxPanel::bitmapSize = displays << 3; Max72xxPanel::bitmap = (byte*)malloc(bitmapSize); Max72xxPanel::matrixRotation = (byte*)malloc(displays); Max72xxPanel::matrixPosition = (byte*)malloc(displays); for ( byte display = 0; display < displays; display++ ) { - matrixPosition[display] = display; - matrixRotation[display] = 0; + matrixPosition[display] = display; + matrixRotation[display] = 0; } SPI.begin(); @@ -76,15 +77,15 @@ Max72xxPanel::Max72xxPanel(byte csPin, byte hDisplays, byte vDisplays) : Adafrui } void Max72xxPanel::setPosition(byte display, byte x, byte y) { - matrixPosition[x + hDisplays * y] = display; + matrixPosition[x + hDisplays * y] = display; } void Max72xxPanel::setRotation(byte display, byte rotation) { - matrixRotation[display] = rotation; + matrixRotation[display] = rotation; } void Max72xxPanel::setRotation(uint8_t rotation) { - Adafruit_GFX::setRotation(rotation); + Adafruit_GFX::setRotation(rotation); } void Max72xxPanel::shutdown(boolean b) { @@ -100,95 +101,131 @@ void Max72xxPanel::fillScreen(uint16_t color) { } void Max72xxPanel::drawPixel(int16_t xx, int16_t yy, uint16_t color) { - // Operating in bytes is faster and takes less code to run. We don't - // need values above 200, so switch from 16 bit ints to 8 bit unsigned - // ints (bytes). - int8_t x = xx; - byte y = yy; - byte tmp; - - if ( rotation ) { - // Implement Adafruit's rotation. - if ( rotation >= 2 ) { // rotation == 2 || rotation == 3 - x = _width - 1 - x; - } - - if ( rotation == 1 || rotation == 2 ) { // rotation == 1 || rotation == 2 - y = _height - 1 - y; - } - - if ( rotation & 1 ) { // rotation == 1 || rotation == 3 - tmp = x; x = y; y = tmp; - } - } - - if ( x < 0 || x >= WIDTH || y < 0 || y >= HEIGHT ) { - // Ignore pixels outside the canvas. - return; - } - - // Translate the x, y coordinate according to the layout of the - // displays. They can be ordered and rotated (0, 90, 180, 270). - - byte display = matrixPosition[(x >> 3) + hDisplays * (y >> 3)]; - x &= 0b111; - y &= 0b111; - - byte r = matrixRotation[display]; - if ( r >= 2 ) { // 180 or 270 degrees - x = 7 - x; - } - if ( r == 1 || r == 2 ) { // 90 or 180 degrees - y = 7 - y; - } - if ( r & 1 ) { // 90 or 270 degrees - tmp = x; x = y; y = tmp; - } - - byte d = display / hDisplays; - x += (display - d * hDisplays) << 3; // x += (display % hDisplays) * 8 - y += d << 3; // y += (display / hDisplays) * 8 - - // Update the color bit in our bitmap buffer. - - byte *ptr = bitmap + x + WIDTH * (y >> 3); - byte val = 1 << (y & 0b111); - - if ( color ) { - *ptr |= val; - } - else { - *ptr &= ~val; - } + // Operating in bytes is faster and takes less code to run. We don't + // need values above 200, so switch from 16 bit ints to 8 bit unsigned + // ints (bytes). + int8_t x = xx; + byte y = yy; + byte tmp; + + if ( rotation ) { + // Implement Adafruit's rotation. + if ( rotation >= 2 ) { // rotation == 2 || rotation == 3 + x = _width - 1 - x; + } + + if ( rotation == 1 || rotation == 2 ) { // rotation == 1 || rotation == 2 + y = _height - 1 - y; + } + + if ( rotation & 1 ) { // rotation == 1 || rotation == 3 + tmp = x; x = y; y = tmp; + } + } + + if ( x < 0 || x >= WIDTH || y < 0 || y >= HEIGHT ) { + // Ignore pixels outside the canvas. + return; + } + + // Translate the x, y coordinate according to the layout of the + // displays. They can be ordered and rotated (0, 90, 180, 270). + + byte display = matrixPosition[(x >> 3) + hDisplays * (y >> 3)]; + x &= 0b111; + y &= 0b111; + + byte r = matrixRotation[display]; + if ( r >= 2 ) { // 180 or 270 degrees + x = 7 - x; + } + if ( r == 1 || r == 2 ) { // 90 or 180 degrees + y = 7 - y; + } + if ( r & 1 ) { // 90 or 270 degrees + tmp = x; x = y; y = tmp; + } + + byte d = display / hDisplays; + x += (display - d * hDisplays) << 3; // x += (display % hDisplays) * 8 + y += d << 3; // y += (display / hDisplays) * 8 + + // Update the color bit in our bitmap buffer. + + byte *ptr = bitmap + x + WIDTH * (y >> 3); + byte val = 1 << (y & 0b111); + + if ( color ) { + *ptr |= val; + } + else { + *ptr &= ~val; + } +} + +// Draw a character +void Max72xxPanel::drawChar(int16_t x, int16_t y, unsigned char c, + uint16_t color, uint16_t bg, uint8_t size) { + + if((x >= _width) || // Clip right + (y >= _height) || // Clip bottom + ((x + 6 * size - 1) < 0) || // Clip left + ((y + 8 * size - 1) < 0)) // Clip top + return; + + if(!_cp437 && (c >= 176)) c++; // Handle 'classic' charset behavior + + startWrite(); + for(int8_t i=0; i<5; i++ ) { // Char bitmap = 5 columns + uint8_t line = pgm_read_byte(&font[c * 5 + i]); + for(int8_t j=0; j<8; j++, line >>= 1) { + if(line & 1) { + if(size == 1) + writePixel(x+i, y+j, color); + else + writeFillRect(x+i*size, y+j*size, size, size, color); + } else if(bg != color) { + if(size == 1) + writePixel(x+i, y+j, bg); + else + writeFillRect(x+i*size, y+j*size, size, size, bg); + } + } + } + if(bg != color) { // If opaque, draw vertical line for last column + if(size == 1) writeFastVLine(x+5, y, 8, bg); + else writeFillRect(x+5*size, y, size, 8*size, bg); + } + endWrite(); } void Max72xxPanel::write() { - // Send the bitmap buffer to the displays. + // Send the bitmap buffer to the displays. - for ( byte row = OP_DIGIT7; row >= OP_DIGIT0; row-- ) { - spiTransfer(row); - } + for ( byte row = OP_DIGIT7; row >= OP_DIGIT0; row-- ) { + spiTransfer(row); + } } void Max72xxPanel::spiTransfer(byte opcode, byte data) { - // If opcode > OP_DIGIT7, send the opcode and data to all displays. - // If opcode <= OP_DIGIT7, display the column with data in our buffer for all displays. - // We do not support (nor need) to use the OP_NOOP opcode. - - // Enable the line - digitalWrite(SPI_CS, LOW); - - // Now shift out the data, two bytes per display. The first byte is the opcode, - // the second byte the data. - byte end = opcode - OP_DIGIT0; - byte start = bitmapSize + end; - do { - start -= 8; - SPI.transfer(opcode); - SPI.transfer(opcode <= OP_DIGIT7 ? bitmap[start] : data); - } - while ( start > end ); - - // Latch the data onto the display(s) - digitalWrite(SPI_CS, HIGH); + // If opcode > OP_DIGIT7, send the opcode and data to all displays. + // If opcode <= OP_DIGIT7, display the column with data in our buffer for all displays. + // We do not support (nor need) to use the OP_NOOP opcode. + + // Enable the line + digitalWrite(SPI_CS, LOW); + + // Now shift out the data, two bytes per display. The first byte is the opcode, + // the second byte the data. + byte end = opcode - OP_DIGIT0; + byte start = bitmapSize + end; + do { + start -= 8; + SPI.transfer(opcode); + SPI.transfer(opcode <= OP_DIGIT7 ? bitmap[start] : data); + } + while ( start > end ); + + // Latch the data onto the display(s) + digitalWrite(SPI_CS, HIGH); } diff --git a/Max72xxPanel.h b/Max72xxPanel.h old mode 100644 new mode 100755 index e7a0f65..f6f43c8 --- a/Max72xxPanel.h +++ b/Max72xxPanel.h @@ -35,34 +35,34 @@ class Max72xxPanel : public Adafruit_GFX { /* * Create a new controler * Parameters: - * csPin pin for selecting the device - * hDisplays number of displays horizontally - * vDisplays number of displays vertically + * csPin pin for selecting the device + * hDisplays number of displays horizontally + * vDisplays number of displays vertically */ Max72xxPanel(byte csPin, byte hDisplays=1, byte vDisplays=1); - /* - * Define how the displays are ordered. The first display (0) - * is the one closest to the Arduino. - */ - void setPosition(byte display, byte x, byte y); - - /* - * Define if and how the displays are rotated. The first display - * (0) is the one closest to the Arduino. rotation can be: - * 0: no rotation - * 1: 90 degrees clockwise - * 2: 180 degrees - * 3: 90 degrees counter clockwise - */ - void setRotation(byte display, byte rotation); - - /* - * Implementation of Adafruit's setRotation(). Probably, you don't - * need this function as you can achieve the same result by using - * the previous two functions. - */ - void setRotation(byte rotation); + /* + * Define how the displays are ordered. The first display (0) + * is the one closest to the Arduino. + */ + void setPosition(byte display, byte x, byte y); + + /* + * Define if and how the displays are rotated. The first display + * (0) is the one closest to the Arduino. rotation can be: + * 0: no rotation + * 1: 90 degrees clockwise + * 2: 180 degrees + * 3: 90 degrees counter clockwise + */ + void setRotation(byte display, byte rotation); + + /* + * Implementation of Adafruit's setRotation(). Probably, you don't + * need this function as you can achieve the same result by using + * the previous two functions. + */ + void setRotation(byte rotation); /* * Draw a pixel on your canvas. Note that for performance reasons, @@ -71,6 +71,12 @@ class Max72xxPanel : public Adafruit_GFX { */ void drawPixel(int16_t x, int16_t y, uint16_t color); + /* + * Draw a character + */ + void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, + uint16_t bg, uint8_t size); + /* * As we can do this much faster then setting all the pixels one by * one, we have a dedicated function to clear the screen. @@ -81,15 +87,15 @@ class Max72xxPanel : public Adafruit_GFX { /* * Set the shutdown (power saving) mode for the device * Paramaters: - * status If true the device goes into power-down mode. Set to false - * for normal operation. + * status If true the device goes into power-down mode. Set to false + * for normal operation. */ void shutdown(boolean status); /* * Set the brightness of the display. * Paramaters: - * intensity the brightness of the display. (0..15) + * intensity the brightness of the display. (0..15) */ void setIntensity(byte intensity); @@ -100,7 +106,8 @@ class Max72xxPanel : public Adafruit_GFX { void write(); private: - byte SPI_CS; /* SPI chip selection */ + /* SPI chip selection */ + byte SPI_CS; /* Send out a single command to the device */ void spiTransfer(byte opcode, byte data=0); @@ -114,7 +121,7 @@ class Max72xxPanel : public Adafruit_GFX { byte *matrixRotation; }; -#endif // Max72xxPanel_h +#endif // Max72xxPanel_h diff --git a/README.md b/README.md index 60b8234..e5d2184 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ This is a plugin for Adafruit's core graphics library GFX, providing basic graph Written by Mark Ruys, , 2013. +Cyrillic font added by Alexander Kropochev, , 2018. Installation ------------ @@ -21,6 +22,7 @@ Features - Uses the [SPI library][spi] to address the display(s) connected in cascade. - Low memory footprint. - Fast, no use of NOOP's. +- Cyrillic font. Usage ----- @@ -30,10 +32,10 @@ Read [overview][gfx-docs] for instructions how to use Adafruit_GFX. Check out ou At YouTube, you'll find a [ticker tape][tickertape] and [snake] demo. -[download]: https://github.com/markruys/arduino-Max72xxPanel/archive/master.zip "Download Max72xxPanel library" +[download]: https://github.com/kropochev/arduino-Max72xxPanel/archive/master.zip "Download Max72xxPanel library" [gfx-download]: https://github.com/adafruit/Adafruit-GFX-Library "Download Adafruit GFX Graphics Library" [gfx-docs]: http://learn.adafruit.com/adafruit-gfx-graphics-library/overview "Documentation Adafruit GFX Graphics Library" -[examples]: https://github.com/markruys/arduino-Max72xxPanel/tree/master/examples "Show Max72xxPanel examples" +[examples]: https://github.com/kropochev/arduino-Max72xxPanel/tree/master/examples "Show Max72xxPanel examples" [hardware]: https://www.google.com/search?q=MAX7219+Red+Dot+Matrix+Module "For kits, google MAX7219 Red Dot Matrix Module" [spi]: http://arduino.cc/en/Reference/SPI "SPI library" [tickertape]: http://www.youtube.com/watch?v=a8T7ZFeaf1A "Max72xxPanel Arduino library demo (ticker tape)" diff --git a/README.pdf b/README.pdf index 615b38618e4784c1dd7a0f79383fea98147451bd..22597e5583db311916476c1a1bcef99cb3ecd0a1 100644 GIT binary patch delta 38401 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 // ... // matrix.setRotation(0, 2); // The first display is position upside down -// matrix.setRotation(3, 2); // The same hold for the last display +// matrix.setRotation(3, 2); // The same hold for the last displa + + // Enable Code Page 437-compatible charset. + matrix.cp437(true); + + // Recode russian fonts from UTF-8 to Windows-1251 + tape = utf8rus(tape); } void loop() { diff --git a/examples/Ticker/utf8rus.ino b/examples/Ticker/utf8rus.ino new file mode 100644 index 0000000..37f53f2 --- /dev/null +++ b/examples/Ticker/utf8rus.ino @@ -0,0 +1,33 @@ +/* Recode russian fonts from UTF-8 to Windows-1251 */ +String utf8rus(String source) +{ + int i,k; + String target; + unsigned char n; + char m[2] = { '0', '\0' }; + + k = source.length(); i = 0; + + while (i < k) { + n = source[i]; i++; + + if (n >= 0xC0) { + switch (n) { + case 0xD0: { + n = source[i]; i++; + if (n == 0x81) { n = 0xA8; break; } + if (n >= 0x90 && n <= 0xBF) n = n + 0x30; + break; + } + case 0xD1: { + n = source[i]; i++; + if (n == 0x91) { n = 0xB8; break; } + if (n >= 0x80 && n <= 0x8F) n = n + 0x70; + break; + } + } + } + m[0] = n; target = target + String(m); + } +return target; +} diff --git a/glcdfont.c b/glcdfont.c new file mode 100644 index 0000000..23d1cc2 --- /dev/null +++ b/glcdfont.c @@ -0,0 +1,273 @@ +#ifndef FONT5X7_H +#define FONT5X7_H + +#ifdef __AVR__ + #include + #include +#elif defined(ESP8266) + #include +#else + #define PROGMEM +#endif + +// Standard ASCII 5x7 font + +static const unsigned char font[] PROGMEM = { +0x00, 0x00, 0x00, 0x00, 0x00, +0x3E, 0x55, 0x51, 0x55, 0x3E, +0x3E, 0x6B, 0x6F, 0x6B, 0x3E, +0x0C, 0x1E, 0x3C, 0x1E, 0x0C, +0x08, 0x1C, 0x3E, 0x1C, 0x08, +0x1C, 0x4A, 0x7F, 0x4A, 0x1C, +0x18, 0x5C, 0x7F, 0x5C, 0x18, +0x00, 0x1C, 0x1C, 0x1C, 0x00, +0x7F, 0x63, 0x63, 0x63, 0x7F, +0x00, 0x1C, 0x14, 0x1C, 0x00, +0x7F, 0x63, 0x6B, 0x63, 0x7F, +0x30, 0x48, 0x4D, 0x33, 0x07, +0x06, 0x29, 0x79, 0x29, 0x06, +0x20, 0x50, 0x3F, 0x02, 0x0C, +0x60, 0x7F, 0x05, 0x35, 0x3F, +0x2A, 0x1C, 0x77, 0x1C, 0x2A, +0x00, 0x7F, 0x3E, 0x1C, 0x08, +0x08, 0x1C, 0x3E, 0x7F, 0x00, +0x14, 0x22, 0x7F, 0x22, 0x14, +0x00, 0x5F, 0x00, 0x5F, 0x00, +0x06, 0x09, 0x7F, 0x01, 0x7F, +0x4A, 0x55, 0x55, 0x55, 0x29, +0x60, 0x60, 0x60, 0x60, 0x60, +0x54, 0x62, 0x7F, 0x62, 0x54, +0x08, 0x04, 0x7E, 0x04, 0x08, +0x08, 0x10, 0x3F, 0x10, 0x08, +0x08, 0x08, 0x2A, 0x1C, 0x08, +0x08, 0x1C, 0x2A, 0x08, 0x08, +0x1C, 0x10, 0x10, 0x10, 0x10, +0x1C, 0x3E, 0x08, 0x3E, 0x1C, +0x30, 0x3C, 0x3F, 0x3C, 0x30, +0x06, 0x1E, 0x7E, 0x1E, 0x06, +0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x5F, 0x00, 0x00, +0x00, 0x07, 0x00, 0x07, 0x00, +0x14, 0x7F, 0x14, 0x7F, 0x14, +0x24, 0x2A, 0x7F, 0x2A, 0x12, +0x23, 0x13, 0x08, 0x64, 0x62, +0x36, 0x49, 0x56, 0x20, 0x50, +0x00, 0x00, 0x07, 0x00, 0x00, +0x00, 0x1C, 0x22, 0x41, 0x00, +0x00, 0x41, 0x22, 0x1C, 0x00, +0x14, 0x08, 0x3E, 0x08, 0x14, +0x08, 0x08, 0x3E, 0x08, 0x08, +0x00, 0xA0, 0x60, 0x00, 0x00, +0x08, 0x08, 0x08, 0x08, 0x08, +0x00, 0x60, 0x60, 0x00, 0x00, +0x20, 0x10, 0x08, 0x04, 0x02, +0x3E, 0x51, 0x49, 0x45, 0x3E, +0x44, 0x42, 0x7F, 0x40, 0x40, +0x42, 0x61, 0x51, 0x49, 0x46, +0x21, 0x41, 0x45, 0x4B, 0x31, +0x18, 0x14, 0x12, 0x7F, 0x10, +0x27, 0x45, 0x45, 0x45, 0x39, +0x3C, 0x4A, 0x49, 0x49, 0x30, +0x01, 0x71, 0x09, 0x05, 0x03, +0x36, 0x49, 0x49, 0x49, 0x36, +0x06, 0x49, 0x49, 0x29, 0x1E, +0x00, 0x6C, 0x6C, 0x00, 0x00, +0x00, 0xAC, 0x6C, 0x00, 0x00, +0x08, 0x14, 0x22, 0x41, 0x00, +0x14, 0x14, 0x14, 0x14, 0x14, +0x00, 0x41, 0x22, 0x14, 0x08, +0x02, 0x01, 0x51, 0x09, 0x06, +0x3E, 0x41, 0x5D, 0x55, 0x5E, +0x7C, 0x12, 0x11, 0x12, 0x7C, +0x7F, 0x49, 0x49, 0x49, 0x36, +0x3E, 0x41, 0x41, 0x41, 0x22, +0x7F, 0x41, 0x41, 0x22, 0x1C, +0x7F, 0x49, 0x49, 0x49, 0x41, +0x7F, 0x09, 0x09, 0x09, 0x01, +0x3E, 0x41, 0x49, 0x49, 0x7A, +0x7F, 0x08, 0x08, 0x08, 0x7F, +0x00, 0x41, 0x7F, 0x41, 0x00, +0x20, 0x40, 0x41, 0x3F, 0x01, +0x7F, 0x08, 0x14, 0x22, 0x41, +0x7F, 0x40, 0x40, 0x40, 0x60, +0x7F, 0x02, 0x0C, 0x02, 0x7F, +0x7F, 0x04, 0x08, 0x10, 0x7F, +0x3E, 0x41, 0x41, 0x41, 0x3E, +0x7F, 0x09, 0x09, 0x09, 0x06, +0x3E, 0x41, 0x51, 0x21, 0x5E, +0x7F, 0x09, 0x19, 0x29, 0x46, +0x46, 0x49, 0x49, 0x49, 0x31, +0x03, 0x01, 0x7F, 0x01, 0x03, +0x3F, 0x40, 0x40, 0x40, 0x3F, +0x1F, 0x20, 0x40, 0x20, 0x1F, +0x3F, 0x40, 0x3C, 0x40, 0x3F, +0x63, 0x14, 0x08, 0x14, 0x63, +0x07, 0x08, 0x70, 0x08, 0x07, +0x61, 0x51, 0x49, 0x45, 0x43, +0x00, 0x7F, 0x41, 0x41, 0x00, +0x02, 0x04, 0x08, 0x10, 0x20, +0x00, 0x41, 0x41, 0x7F, 0x00, +0x04, 0x02, 0x01, 0x02, 0x04, +0x40, 0x40, 0x40, 0x40, 0x40, +0x00, 0x01, 0x02, 0x04, 0x00, +0x20, 0x54, 0x54, 0x54, 0x78, +0x7F, 0x48, 0x44, 0x44, 0x38, +0x38, 0x44, 0x44, 0x44, 0x48, +0x38, 0x44, 0x44, 0x48, 0x7F, +0x38, 0x54, 0x54, 0x54, 0x18, +0x08, 0x7E, 0x09, 0x01, 0x02, +0x08, 0x54, 0x54, 0x58, 0x3C, +0x7F, 0x08, 0x04, 0x04, 0x78, +0x00, 0x44, 0x7D, 0x40, 0x00, +0x20, 0x40, 0x44, 0x3D, 0x00, +0x7F, 0x10, 0x10, 0x28, 0x44, +0x00, 0x41, 0x7F, 0x40, 0x00, +0x7C, 0x04, 0x78, 0x04, 0x78, +0x7C, 0x08, 0x04, 0x04, 0x78, +0x38, 0x44, 0x44, 0x44, 0x38, +0x7C, 0x14, 0x14, 0x14, 0x08, +0x08, 0x14, 0x14, 0x0C, 0x7C, +0x7C, 0x08, 0x04, 0x04, 0x08, +0x48, 0x54, 0x54, 0x54, 0x24, +0x04, 0x3F, 0x44, 0x40, 0x20, +0x3C, 0x40, 0x40, 0x20, 0x7C, +0x1C, 0x20, 0x40, 0x20, 0x1C, +0x3C, 0x40, 0x38, 0x40, 0x3C, +0x44, 0x28, 0x10, 0x28, 0x44, +0x0C, 0x50, 0x50, 0x50, 0x3C, +0x44, 0x64, 0x54, 0x4C, 0x44, +0x00, 0x08, 0x36, 0x41, 0x00, +0x00, 0x00, 0x7F, 0x00, 0x00, +0x00, 0x41, 0x36, 0x08, 0x00, +0x02, 0x01, 0x02, 0x04, 0x02, +0x70, 0x48, 0x44, 0x48, 0x70, +0x00, 0x0E, 0x11, 0x0E, 0x00, +0x00, 0x12, 0x1F, 0x10, 0x00, +0x00, 0x12, 0x19, 0x16, 0x00, +0x00, 0x11, 0x15, 0x0B, 0x00, +0x00, 0x07, 0x04, 0x1F, 0x00, +0x00, 0x17, 0x15, 0x09, 0x00, +0x00, 0x0E, 0x15, 0x09, 0x00, +0x00, 0x01, 0x1D, 0x03, 0x00, +0x00, 0x0A, 0x15, 0x0A, 0x00, +0x00, 0x12, 0x15, 0x0E, 0x00, +0x00, 0x04, 0x04, 0x04, 0x00, +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +0x3E, 0x00, 0x00, 0x00, 0x00, +0x3E, 0x3E, 0x00, 0x00, 0x00, +0x3E, 0x3E, 0x00, 0x3E, 0x00, +0x3E, 0x3E, 0x00, 0x3E, 0x3E, +0x80, 0x80, 0x80, 0x80, 0x80, +0xC0, 0xC0, 0xC0, 0xC0, 0xC0, +0xD0, 0xD0, 0xD0, 0xD0, 0xD0, +0xD8, 0xD8, 0xD8, 0xD8, 0xD8, +0xDA, 0xDA, 0xDA, 0xDA, 0xDA, +0xDB, 0xDB, 0xDB, 0xDB, 0xDB, +0x40, 0x00, 0x40, 0x00, 0x40, +0x60, 0x00, 0x40, 0x00, 0x40, +0x60, 0x00, 0x70, 0x00, 0x40, +0x60, 0x00, 0x70, 0x00, 0x78, +0x7C, 0x00, 0x40, 0x00, 0x40, +0x7C, 0x00, 0x7E, 0x00, 0x40, +0x7C, 0x00, 0x7E, 0x00, 0x7F, +0x1C, 0x77, 0x41, 0x41, 0x41, +0x41, 0x41, 0x41, 0x41, 0x41, +0x41, 0x41, 0x41, 0x7F, 0x00, +0x1C, 0x77, 0x41, 0x5D, 0x5D, +0x41, 0x41, 0x41, 0x5D, 0x5D, +0x5D, 0x5D, 0x41, 0x5D, 0x5D, +0x5D, 0x5D, 0x41, 0x7F, 0x00, +0x22, 0x1C, 0x14, 0x1C, 0x22, +0x00, 0x08, 0x1C, 0x08, 0x00, +0x00, 0x00, 0x77, 0x00, 0x00, +0x46, 0x5D, 0x55, 0x5D, 0x31, +0x7C, 0x55, 0x54, 0x55, 0x44, +0x08, 0x08, 0x2A, 0x08, 0x08, +0x00, 0x14, 0x08, 0x14, 0x00, +0x08, 0x14, 0x22, 0x08, 0x14, +0x7F, 0x41, 0x71, 0x31, 0x1F, +0x03, 0x05, 0x7F, 0x05, 0x03, +0x22, 0x14, 0x7F, 0x55, 0x22, +0x02, 0x55, 0x7D, 0x05, 0x02, +0x06, 0x09, 0x09, 0x06, 0x00, +0x44, 0x44, 0x5F, 0x44, 0x44, +0x1C, 0x14, 0x1C, 0x22, 0x7F, +0x20, 0x3E, 0x61, 0x3E, 0x20, +0x20, 0x50, 0x3F, 0x02, 0x0C, +0x80, 0x7C, 0x20, 0x3C, 0x40, +0x44, 0x3C, 0x04, 0x7C, 0x44, +0x00, 0x00, 0x08, 0x00, 0x00, +0x38, 0x55, 0x54, 0x55, 0x18, +0x7E, 0x08, 0x10, 0x7F, 0x01, +0x08, 0x10, 0x08, 0x04, 0x02, +0x14, 0x08, 0x22, 0x14, 0x08, +0x0E, 0x06, 0x0A, 0x10, 0x20, +0x20, 0x10, 0x0A, 0x06, 0x0E, +0x38, 0x30, 0x28, 0x04, 0x02, +0x02, 0x04, 0x28, 0x30, 0x38, +0x7E, 0x11, 0x11, 0x11, 0x7E, +0x7F, 0x49, 0x49, 0x49, 0x31, +0x7F, 0x49, 0x49, 0x49, 0x36, +0x7F, 0x01, 0x01, 0x01, 0x03, +0xC0, 0x7F, 0x41, 0x7F, 0xC0, +0x7F, 0x49, 0x49, 0x49, 0x41, +0x77, 0x08, 0x7F, 0x08, 0x77, +0x41, 0x49, 0x49, 0x49, 0x36, +0x7F, 0x10, 0x08, 0x04, 0x7F, +0x7C, 0x21, 0x12, 0x09, 0x7C, +0x7F, 0x08, 0x14, 0x22, 0x41, +0x40, 0x3E, 0x01, 0x01, 0x7F, +0x7F, 0x02, 0x0C, 0x02, 0x7F, +0x7F, 0x08, 0x08, 0x08, 0x7F, +0x3E, 0x41, 0x41, 0x41, 0x3E, +0x7F, 0x01, 0x01, 0x01, 0x7F, +0x7F, 0x09, 0x09, 0x09, 0x06, +0x3E, 0x41, 0x41, 0x41, 0x22, +0x01, 0x01, 0x7F, 0x01, 0x01, +0x07, 0x48, 0x48, 0x48, 0x3F, +0x0E, 0x11, 0x7F, 0x11, 0x0E, +0x63, 0x14, 0x08, 0x14, 0x63, +0x7F, 0x40, 0x40, 0x7F, 0xC0, +0x07, 0x08, 0x08, 0x08, 0x7F, +0x7F, 0x40, 0x7F, 0x40, 0x7F, +0x7F, 0x40, 0x7F, 0x40, 0xFF, +0x01, 0x7F, 0x48, 0x48, 0x30, +0x7F, 0x48, 0x48, 0x30, 0x7F, +0x7F, 0x48, 0x48, 0x48, 0x30, +0x22, 0x41, 0x49, 0x49, 0x3E, +0x7F, 0x08, 0x3E, 0x41, 0x3E, +0x46, 0x29, 0x19, 0x09, 0x7F, +0x20, 0x54, 0x54, 0x54, 0x78, +0x3C, 0x4A, 0x4A, 0x49, 0x31, +0x7C, 0x54, 0x54, 0x54, 0x28, +0x7C, 0x04, 0x04, 0x04, 0x0C, +0xC0, 0x78, 0x44, 0x7C, 0xC0, +0x38, 0x54, 0x54, 0x54, 0x18, +0x6C, 0x10, 0x7C, 0x10, 0x6C, +0x44, 0x54, 0x54, 0x54, 0x28, +0x7C, 0x20, 0x10, 0x08, 0x7C, +0x7C, 0x40, 0x26, 0x10, 0x7C, +0x7C, 0x10, 0x10, 0x28, 0x44, +0x40, 0x38, 0x04, 0x04, 0x7C, +0x7C, 0x08, 0x10, 0x08, 0x7C, +0x7C, 0x10, 0x10, 0x10, 0x7C, +0x38, 0x44, 0x44, 0x44, 0x38, +0x7C, 0x04, 0x04, 0x04, 0x7C, +0x7C, 0x14, 0x14, 0x14, 0x08, +0x38, 0x44, 0x44, 0x44, 0x48, +0x04, 0x04, 0x7C, 0x04, 0x04, +0x0C, 0x50, 0x50, 0x50, 0x3C, +0x18, 0x24, 0xFC, 0x24, 0x18, +0x44, 0x28, 0x10, 0x28, 0x44, +0x7C, 0x40, 0x40, 0x7C, 0xC0, +0x0C, 0x10, 0x10, 0x10, 0x7C, +0x7C, 0x40, 0x7C, 0x40, 0x7C, +0x7C, 0x40, 0x7C, 0x40, 0xFC, +0x04, 0x7C, 0x50, 0x50, 0x20, +0x7C, 0x50, 0x50, 0x20, 0x7C, +0x7C, 0x50, 0x50, 0x50, 0x20, +0x28, 0x44, 0x54, 0x54, 0x38, +0x7C, 0x10, 0x38, 0x44, 0x38, +0x48, 0x34, 0x14, 0x14, 0x7C +}; +#endif // FONT5X7_H