SEPS114A Driver
SEPS114A SPI Driver
class SPIPreInit : public SPI { public: SPIPreInit(PinName mosi, PinName miso, PinName clk) : SPI(mosi,miso,clk) { format(8,3); frequency(12000000); }; };
SPIPreInit gSpi(PB_15,NC,PB_13); PinName mosi(sda), PinName miso, PinName clk(scl) Adafruit_SEPS114A_Spi oled(gSpi,PB_14,PB_1,PB_2); PinName DC, PinName RST, PinName CS
You can print russian cyrilic
Revision 0:f7b7f71865d1, committed 2016-04-28
- Comitter:
- Dzhafarkhanov
- Date:
- Thu Apr 28 10:03:43 2016 +0000
- Child:
- 1:a37035f55af3
- Commit message:
- SEPS114a Driver;
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Adafruit_GFX.cpp Thu Apr 28 10:03:43 2016 +0000
@@ -0,0 +1,449 @@
+/***********************************
+This is a our graphics core library, for all our displays.
+We'll be adapting all the
+existing libaries to use this core to make updating, support
+and upgrading easier!
+
+Adafruit invests time and resources providing this open source code,
+please support Adafruit and open-source hardware by purchasing
+products from Adafruit!
+
+Written by Limor Fried/Ladyada for Adafruit Industries.
+BSD license, check license.txt for more information
+All text above must be included in any redistribution
+****************************************/
+
+/*
+ * Modified by Neal Horman 7/14/2012 for use in mbed
+ */
+
+#include "mbed.h"
+
+#include "Adafruit_GFX.h"
+#include "glcdfont.h"
+
+#if defined(GFX_WANT_ABSTRACTS)
+// draw a circle outline
+void Adafruit_GFX::drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color)
+{
+ int16_t f = 1 - r;
+ int16_t ddF_x = 1;
+ int16_t ddF_y = -2 * r;
+ int16_t x = 0;
+ int16_t y = r;
+
+ drawPixel(x0, y0+r, color);
+ drawPixel(x0, y0-r, color);
+ drawPixel(x0+r, y0, color);
+ drawPixel(x0-r, y0, color);
+
+ while (x<y)
+ {
+ if (f >= 0)
+ {
+ y--;
+ ddF_y += 2;
+ f += ddF_y;
+ }
+ x++;
+ ddF_x += 2;
+ f += ddF_x;
+
+ drawPixel(x0 + x, y0 + y, color);
+ drawPixel(x0 - x, y0 + y, color);
+ drawPixel(x0 + x, y0 - y, color);
+ drawPixel(x0 - x, y0 - y, color);
+ drawPixel(x0 + y, y0 + x, color);
+ drawPixel(x0 - y, y0 + x, color);
+ drawPixel(x0 + y, y0 - x, color);
+ drawPixel(x0 - y, y0 - x, color);
+ }
+}
+
+void Adafruit_GFX::drawCircleHelper( int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color)
+{
+ int16_t f = 1 - r;
+ int16_t ddF_x = 1;
+ int16_t ddF_y = -2 * r;
+ int16_t x = 0;
+ int16_t y = r;
+
+ while (x<y)
+ {
+ if (f >= 0)
+ {
+ y--;
+ ddF_y += 2;
+ f += ddF_y;
+ }
+ x++;
+ ddF_x += 2;
+ f += ddF_x;
+
+ if (cornername & 0x4)
+ {
+ drawPixel(x0 + x, y0 + y, color);
+ drawPixel(x0 + y, y0 + x, color);
+ }
+
+ if (cornername & 0x2)
+ {
+ drawPixel(x0 + x, y0 - y, color);
+ drawPixel(x0 + y, y0 - x, color);
+ }
+
+ if (cornername & 0x8)
+ {
+ drawPixel(x0 - y, y0 + x, color);
+ drawPixel(x0 - x, y0 + y, color);
+ }
+
+ if (cornername & 0x1)
+ {
+ drawPixel(x0 - y, y0 - x, color);
+ drawPixel(x0 - x, y0 - y, color);
+ }
+ }
+}
+
+void Adafruit_GFX::fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color)
+{
+ drawFastVLine(x0, y0-r, 2*r+1, color);
+ fillCircleHelper(x0, y0, r, 3, 0, color);
+}
+
+// used to do circles and roundrects!
+void Adafruit_GFX::fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color)
+{
+ int16_t f = 1 - r;
+ int16_t ddF_x = 1;
+ int16_t ddF_y = -2 * r;
+ int16_t x = 0;
+ int16_t y = r;
+
+ while (x<y)
+ {
+ if (f >= 0)
+ {
+ y--;
+ ddF_y += 2;
+ f += ddF_y;
+ }
+ x++;
+ ddF_x += 2;
+ f += ddF_x;
+
+ if (cornername & 0x1)
+ {
+ drawFastVLine(x0+x, y0-y, 2*y+1+delta, color);
+ drawFastVLine(x0+y, y0-x, 2*x+1+delta, color);
+ }
+
+ if (cornername & 0x2)
+ {
+ drawFastVLine(x0-x, y0-y, 2*y+1+delta, color);
+ drawFastVLine(x0-y, y0-x, 2*x+1+delta, color);
+ }
+ }
+}
+#endif
+
+#if defined(GFX_WANT_ABSTRACTS) || defined(GFX_SIZEABLE_TEXT)
+// bresenham's algorithm - thx wikpedia
+void Adafruit_GFX::drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color)
+{
+ int16_t steep = abs(y1 - y0) > abs(x1 - x0);
+
+ if (steep)
+ {
+ swap(x0, y0);
+ swap(x1, y1);
+ }
+
+ if (x0 > x1)
+ {
+ swap(x0, x1);
+ swap(y0, y1);
+ }
+
+ int16_t dx, dy;
+ dx = x1 - x0;
+ dy = abs(y1 - y0);
+
+ int16_t err = dx / 2;
+ int16_t ystep;
+
+ if (y0 < y1)
+ ystep = 1;
+ else
+ ystep = -1;
+
+ for (; x0<=x1; x0++)
+ {
+ if (steep)
+ drawPixel(y0, x0, color);
+ else
+ drawPixel(x0, y0, color);
+
+ err -= dy;
+ if (err < 0)
+ {
+ y0 += ystep;
+ err += dx;
+ }
+ }
+}
+
+void Adafruit_GFX::drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color)
+{
+ // stupidest version - update in subclasses if desired!
+ drawLine(x, y, x, y+h-1, color);
+}
+
+void Adafruit_GFX::fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)
+{
+ // stupidest version - update in subclasses if desired!
+ for (int16_t i=x; i<x+w; i++)
+ drawFastVLine(i, y, h, color);
+}
+#endif
+
+#if defined(GFX_WANT_ABSTRACTS)
+// draw a rectangle
+void Adafruit_GFX::drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)
+{
+ drawFastHLine(x, y, w, color);
+ drawFastHLine(x, y+h-1, w, color);
+ drawFastVLine(x, y, h, color);
+ drawFastVLine(x+w-1, y, h, color);
+}
+
+void Adafruit_GFX::drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color)
+{
+ // stupidest version - update in subclasses if desired!
+ drawLine(x, y, x+w-1, y, color);
+}
+
+void Adafruit_GFX::fillScreen(uint16_t color)
+{
+ fillRect(0, 0, _width, _height, color);
+}
+
+// draw a rounded rectangle!
+void Adafruit_GFX::drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color)
+{
+ // smarter version
+ drawFastHLine(x+r , y , w-2*r, color); // Top
+ drawFastHLine(x+r , y+h-1, w-2*r, color); // Bottom
+ drawFastVLine( x , y+r , h-2*r, color); // Left
+ drawFastVLine( x+w-1, y+r , h-2*r, color); // Right
+ // draw four corners
+ drawCircleHelper(x+r , y+r , r, 1, color);
+ drawCircleHelper(x+w-r-1, y+r , r, 2, color);
+ drawCircleHelper(x+w-r-1, y+h-r-1, r, 4, color);
+ drawCircleHelper(x+r , y+h-r-1, r, 8, color);
+}
+
+// fill a rounded rectangle!
+void Adafruit_GFX::fillRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color)
+{
+ // smarter version
+ fillRect(x+r, y, w-2*r, h, color);
+
+ // draw four corners
+ fillCircleHelper(x+w-r-1, y+r, r, 1, h-2*r-1, color);
+ fillCircleHelper(x+r , y+r, r, 2, h-2*r-1, color);
+}
+
+// draw a triangle!
+void Adafruit_GFX::drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color)
+{
+ drawLine(x0, y0, x1, y1, color);
+ drawLine(x1, y1, x2, y2, color);
+ drawLine(x2, y2, x0, y0, color);
+}
+
+// fill a triangle!
+void Adafruit_GFX::fillTriangle ( int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color)
+{
+ int16_t a, b, y, last;
+
+ // Sort coordinates by Y order (y2 >= y1 >= y0)
+ if (y0 > y1) {
+ swap(y0, y1); swap(x0, x1);
+ }
+ if (y1 > y2) {
+ swap(y2, y1); swap(x2, x1);
+ }
+ if (y0 > y1) {
+ swap(y0, y1); swap(x0, x1);
+ }
+
+ if(y0 == y2) { // Handle awkward all-on-same-line case as its own thing
+ a = b = x0;
+ if(x1 < a) a = x1;
+ else if(x1 > b) b = x1;
+ if(x2 < a) a = x2;
+ else if(x2 > b) b = x2;
+ drawFastHLine(a, y0, b-a+1, color);
+ return;
+ }
+
+ int16_t
+ dx01 = x1 - x0,
+ dy01 = y1 - y0,
+ dx02 = x2 - x0,
+ dy02 = y2 - y0,
+ dx12 = x2 - x1,
+ dy12 = y2 - y1;
+ int32_t
+ sa = 0,
+ sb = 0;
+
+ // For upper part of triangle, find scanline crossings for segments
+ // 0-1 and 0-2. If y1=y2 (flat-bottomed triangle), the scanline y1
+ // is included here (and second loop will be skipped, avoiding a /0
+ // error there), otherwise scanline y1 is skipped here and handled
+ // in the second loop...which also avoids a /0 error here if y0=y1
+ // (flat-topped triangle).
+ if(y1 == y2) last = y1; // Include y1 scanline
+ else last = y1-1; // Skip it
+
+ for(y=y0; y<=last; y++) {
+ a = x0 + sa / dy01;
+ b = x0 + sb / dy02;
+ sa += dx01;
+ sb += dx02;
+ /* longhand:
+ a = x0 + (x1 - x0) * (y - y0) / (y1 - y0);
+ b = x0 + (x2 - x0) * (y - y0) / (y2 - y0);
+ */
+ if(a > b) swap(a,b);
+ drawFastHLine(a, y, b-a+1, color);
+ }
+
+ // For lower part of triangle, find scanline crossings for segments
+ // 0-2 and 1-2. This loop is skipped if y1=y2.
+ sa = dx12 * (y - y1);
+ sb = dx02 * (y - y0);
+ for(; y<=y2; y++) {
+ a = x1 + sa / dy12;
+ b = x0 + sb / dy02;
+ sa += dx12;
+ sb += dx02;
+ /* longhand:
+ a = x1 + (x2 - x1) * (y - y1) / (y2 - y1);
+ b = x0 + (x2 - x0) * (y - y0) / (y2 - y0);
+ */
+ if(a > b) swap(a,b);
+ drawFastHLine(a, y, b-a+1, color);
+ }
+
+}
+
+void Adafruit_GFX::drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color)
+{
+ for (int16_t j=0; j<h; j++)
+ {
+ for (int16_t i=0; i<w; i++ )
+ {
+ if (bitmap[i + (j/8)*w] & _BV(j%8))
+ drawPixel(x+i, y+j, color);
+ }
+ }
+}
+#endif
+
+size_t Adafruit_GFX::writeChar(uint8_t c)
+{
+ if (( c == 0xD0 ) || ( c == 0xD1 )){ // Проверяем на соответствие utf8 и игнорируем если это начальный символ UTF8.
+ return;}
+ if (c == '\n')
+ {
+ cursor_y += textsize*8;
+ cursor_x = 0;
+ }
+ else if (c == '\r')
+ cursor_x = 0;
+ else
+ {
+ drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor, textsize);
+ cursor_x += textsize*6;
+ if (wrap && (cursor_x > (_width - textsize*6)))
+ {
+ cursor_y += textsize*8;
+ cursor_x = 0;
+ }
+ }
+ return 1;
+}
+
+// draw a character
+void Adafruit_GFX::drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size)
+{
+ if (( c == 0xD0 ) || ( c == 0xD1 )){ // Проверяем на соответствие utf8 и игнорируем если это начальный символ UTF8.
+ return;}
+ if(
+ (x >= _width) || // Clip right
+ (y >= _height) || // Clip bottom
+ ((x + 5 * size - 1) < 0) || // Clip left
+ ((y + 8 * size - 1) < 0) // Clip top
+ )
+ return;
+
+ for (int8_t i=0; i<6; i++ )
+ {
+ uint8_t line = 0;
+
+ if (i == 5)
+ line = 0x0;
+ else
+ line = font[(c*5)+i];
+
+ for (int8_t j = 0; j<8; j++)
+ {
+ if (line & 0x1)
+ {
+#if defined(GFX_WANT_ABSTRACTS) || defined(GFX_SIZEABLE_TEXT)
+ if (size == 1) // default size
+ drawPixel(x+i, y+j, color);
+ else // big size
+ fillRect(x+(i*size), y+(j*size), size, size, color);
+#else
+ drawPixel(x+i, y+j, color);
+#endif
+ }
+ else if (bg != color)
+ {
+#if defined(GFX_WANT_ABSTRACTS) || defined(GFX_SIZEABLE_TEXT)
+ if (size == 1) // default size
+ drawPixel(x+i, y+j, bg);
+ else // big size
+ fillRect(x+i*size, y+j*size, size, size, bg);
+#else
+ drawPixel(x+i, y+j, bg);
+#endif
+ }
+ line >>= 1;
+ }
+ }
+}
+
+void Adafruit_GFX::setRotation(uint8_t x)
+{
+ x %= 4; // cant be higher than 3
+ rotation = x;
+ switch (x)
+ {
+ case 0:
+ case 2:
+ _width = _rawWidth;
+ _height = _rawHeight;
+ break;
+ case 1:
+ case 3:
+ _width = _rawHeight;
+ _height = _rawWidth;
+ break;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Adafruit_GFX.h Thu Apr 28 10:03:43 2016 +0000
@@ -0,0 +1,177 @@
+/***********************************
+This is a our graphics core library, for all our displays.
+We'll be adapting all the
+existing libaries to use this core to make updating, support
+and upgrading easier!
+
+Adafruit invests time and resources providing this open source code,
+please support Adafruit and open-source hardware by purchasing
+products from Adafruit!
+
+Written by Limor Fried/Ladyada for Adafruit Industries.
+BSD license, check license.txt for more information
+All text above must be included in any redistribution
+****************************************/
+
+/*
+ * Modified by Neal Horman 7/14/2012 for use in mbed
+ */
+
+#ifndef _ADAFRUIT_GFX_H_
+#define _ADAFRUIT_GFX_H_
+
+#include "Adafruit_GFX_Config.h"
+
+static inline void swap(int16_t &a, int16_t &b)
+{
+ int16_t t = a;
+
+ a = b;
+ b = t;
+}
+
+#ifndef _BV
+#define _BV(bit) (1<<(bit))
+#endif
+
+/**
+ * This is a Text and Graphics element drawing class.
+ * These functions draw to the display buffer.
+ *
+
+ */
+class Adafruit_GFX : public Stream
+{
+ public:
+ Adafruit_GFX(int16_t w, int16_t h)
+ : _rawWidth(w)
+ , _rawHeight(h)
+ , _width(w)
+ , _height(h)
+ , cursor_x(0)
+ , cursor_y(0)
+ , textcolor(0xFFFF)
+ , textbgcolor(0xFFFF)
+ , textsize(1)
+ , rotation(0)
+ , wrap(true)
+ {};
+
+ /// Paint one BLACK or WHITE pixel in the display buffer
+ // this must be defined by the subclass
+ virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;
+ // this is optional
+ virtual void invertDisplay(bool i) {};
+
+ // Stream implementation - provides printf() interface
+ // You would otherwise be forced to use writeChar()
+ virtual int _putc(int value) { return writeChar(value); };
+ virtual int _getc() { return -1; };
+
+#ifdef GFX_WANT_ABSTRACTS
+ // these are 'generic' drawing functions, so we can share them!
+
+ /** Draw a Horizontal Line
+ * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
+ */
+ virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
+ /** Draw a rectangle
+ * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
+ */
+ virtual void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
+ /** Fill the entire display
+ * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
+ */
+ virtual void fillScreen(uint16_t color);
+
+ /** Draw a circle
+ * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
+ */
+ void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
+ void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color);
+
+ /** Draw and fill a circle
+ * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
+ */
+ void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
+ void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color);
+
+ /** Draw a triangle
+ * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
+ */
+ void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
+ /** Draw and fill a triangle
+ * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
+ */
+ void fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
+
+ /** Draw a rounded rectangle
+ * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
+ */
+ void drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);
+ /** Draw and fill a rounded rectangle
+ * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
+ */
+ void fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);
+ /** Draw a bitmap
+ * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
+ */
+ void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color);
+#endif
+
+#if defined(GFX_WANT_ABSTRACTS) || defined(GFX_SIZEABLE_TEXT)
+ /** Draw a line
+ * @note GFX_WANT_ABSTRACTS or GFX_SIZEABLE_TEXT must be defined in Adafruit_GFX_config.h
+ */
+ virtual void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
+ /** Draw a vertical line
+ * @note GFX_WANT_ABSTRACTS or GFX_SIZEABLE_TEXT must be defined in Adafruit_GFX_config.h
+ */
+ virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
+ /** Draw and fill a rectangle
+ * @note GFX_WANT_ABSTRACTS or GFX_SIZEABLE_TEXT must be defined in Adafruit_GFX_config.h
+ */
+ virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
+#endif
+
+ /// Draw a text character at a specified pixel location
+ void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size);
+ /// Draw a text character at the text cursor location
+ size_t writeChar(uint8_t);
+
+ /// Get the width of the display in pixels
+ inline int16_t width(void) { return _width; };
+ /// Get the height of the display in pixels
+ inline int16_t height(void) { return _height; };
+
+ /// Set the text cursor location, based on the size of the text
+ inline void setTextCursor(int16_t x, int16_t y) { cursor_x = x; cursor_y = y; };
+#if defined(GFX_WANT_ABSTRACTS) || defined(GFX_SIZEABLE_TEXT)
+ /** Set the size of the text to be drawn
+ * @note Make sure to enable either GFX_SIZEABLE_TEXT or GFX_WANT_ABSTRACTS
+ */
+ inline void setTextSize(uint8_t s) { textsize = (s > 0) ? s : 1; };
+#endif
+ /// Set the text foreground and background colors to be the same
+ inline void setTextColor(uint16_t c) { textcolor = c; textbgcolor = c; }
+ /// Set the text foreground and background colors independantly
+ inline void setTextColor(uint16_t c, uint16_t b) { textcolor = c; textbgcolor = b; };
+ /// Set text wraping mode true or false
+ inline void setTextWrap(bool w) { wrap = w; };
+
+ /// Set the display rotation, 1, 2, 3, or 4
+ void setRotation(uint8_t r);
+ /// Get the current rotation
+ inline uint8_t getRotation(void) { rotation %= 4; return rotation; };
+
+protected:
+ int16_t _rawWidth, _rawHeight; // this is the 'raw' display w/h - never changes
+ int16_t _width, _height; // dependent on rotation
+ int16_t cursor_x, cursor_y;
+ uint16_t textcolor, textbgcolor;
+ uint8_t textsize;
+ uint8_t rotation;
+ bool wrap; // If set, 'wrap' text at right edge of display
+};
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Adafruit_GFX_Config.h Thu Apr 28 10:03:43 2016 +0000 @@ -0,0 +1,13 @@ +#ifndef _ADAFRUIT_GFX_CONFIG_H_ +#define _ADAFRUIT_GFX_CONFIG_H_ + + + +// Uncomment this to enable all functionality +#define GFX_WANT_ABSTRACTS + +// Uncomment this to enable only runtime font scaling, without all the rest of the Abstracts +//#define GFX_SIZEABLE_TEXT + + +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Adafruit_SEPS114A.cpp Thu Apr 28 10:03:43 2016 +0000
@@ -0,0 +1,218 @@
+
+
+#include "mbed.h"
+#include "Adafruit_SEPS114A.h"
+
+
+#define SEPS114A_SOFT_RESET 0x01
+#define SEPS114A_DISPLAY_ON_OFF 0x02
+#define SEPS114A_ANALOG_CONTROL 0x0F //
+#define SEPS114A_STANDBY_ON_OFF 0x14
+#define SEPS114A_OSC_ADJUST 0x1A
+#define SEPS114A_ROW_SCAN_DIRECTION 0x09
+#define SEPS114A_DISPLAY_X1 0x30
+#define SEPS114A_DISPLAY_X2 0x31
+#define SEPS114A_DISPLAY_Y1 0x32
+#define SEPS114A_DISPLAY_Y2 0x33
+#define SEPS114A_DISPLAYSTART_X 0x38
+#define SEPS114A_DISPLAYSTART_Y 0x39
+#define SEPS114A_CPU_IF 0x0D
+#define SEPS114A_MEM_X1 0x34
+#define SEPS114A_MEM_X2 0x35
+#define SEPS114A_MEM_Y1 0x36
+#define SEPS114A_MEM_Y2 0x37
+#define SEPS114A_MEMORY_WRITE_READ 0x1D
+#define SEPS114A_DDRAM_DATA_ACCESS_PORT 0x08
+#define SEPS114A_DISCHARGE_TIME 0x18
+#define SEPS114A_PEAK_PULSE_DELAY 0x16
+#define SEPS114A_PEAK_PULSE_WIDTH_R 0x3A
+#define SEPS114A_PEAK_PULSE_WIDTH_G 0x3B
+#define SEPS114A_PEAK_PULSE_WIDTH_B 0x3C
+#define SEPS114A_PRECHARGE_CURRENT_R 0x3D
+#define SEPS114A_PRECHARGE_CURRENT_G 0x3E
+#define SEPS114A_PRECHARGE_CURRENT_B 0x3F
+#define SEPS114A_COLUMN_CURRENT_R 0x40
+#define SEPS114A_COLUMN_CURRENT_G 0x41
+#define SEPS114A_COLUMN_CURRENT_B 0x42
+#define SEPS114A_ROW_OVERLAP 0x48
+#define SEPS114A_SCAN_OFF_LEVEL 0x49
+#define SEPS114A_ROW_SCAN_ON_OFF 0x17
+#define SEPS114A_ROW_SCAN_MODE 0x13
+#define SEPS114A_SCREEN_SAVER_CONTEROL 0xD0
+#define SEPS114A_SS_SLEEP_TIMER 0xD1
+#define SEPS114A_SCREEN_SAVER_MODE 0xD2
+#define SEPS114A_SS_UPDATE_TIMER 0xD3
+#define SEPS114A_RGB_IF 0xE0
+#define SEPS114A_RGB_POL 0xE1
+#define SEPS114A_DISPLAY_MODE_CONTROL 0xE5
+
+
+
+void Adafruit_SEPS114A::set_region(int x, int y, int xs, int ys)
+{
+ // draw region
+ writeCommand(SEPS114A_MEM_X1,x);
+ writeCommand(SEPS114A_MEM_X2,x+xs-1);
+ writeCommand(SEPS114A_MEM_Y1,y);
+ writeCommand(SEPS114A_MEM_Y2,y+ys-1);
+ // start position
+ writeCommand(SEPS114A_DISPLAYSTART_X,x);
+ writeCommand(SEPS114A_DISPLAYSTART_Y,y);
+}
+
+void Adafruit_SEPS114A::begin(void)//oled init
+{
+
+
+ rst = 0;
+ // wait 10ms
+ wait_ms(10);
+ // bring out of reset
+ rst = 1;
+ // turn on VCC (13V?)
+ wait_ms(10);
+ /* Soft reser */
+ writeCommand(SEPS114A_SOFT_RESET,0x00);
+ /* Standby ON/OFF*/
+ writeCommand(SEPS114A_STANDBY_ON_OFF,0x01); // Standby on
+ wait_ms(5); // Wait for 5ms (1ms Delay Minimum)
+ writeCommand(SEPS114A_STANDBY_ON_OFF,0x00); // Standby off
+ wait_ms(5); // 1ms Delay Minimum (1ms Delay Minimum)
+ /* Display OFF */
+ writeCommand(SEPS114A_DISPLAY_ON_OFF,0x00);
+ /* Set Oscillator operation */
+ writeCommand(SEPS114A_ANALOG_CONTROL,0x40); // using external resistor and internal OSC
+ /* Set frame rate */
+ writeCommand(SEPS114A_OSC_ADJUST,0x03); // frame rate : 95Hz
+
+ /* Select the RGB data format and set the initial state of RGB interface port */
+ writeCommand(SEPS114A_RGB_IF,0x00); //0xE0 RGB 8bit interface
+ /* Set RGB polarity */
+ writeCommand(SEPS114A_RGB_POL,0x00);
+ /* Set display mode control */
+ writeCommand(SEPS114A_DISPLAY_MODE_CONTROL,0x80); // SWAP:BGR, Reduce current : Normal, DC[1:0] : Normal
+
+ /* Set MCU Interface */
+ writeCommand(SEPS114A_CPU_IF,0x00); // MPU External interface mode, 8bits
+ /* Set Memory Read/Write mode */
+ writeCommand(SEPS114A_MEMORY_WRITE_READ,0x00);
+ /* Set row scan direction */
+ // writeCommand(SEPS114A_ROW_SCAN_DIRECTION,0x00); // Column : 0 --> Max, Row : 0 Ѓ--> Max
+ writeCommand(SEPS114A_ROW_SCAN_DIRECTION,0x02); // Column : 0 --> Max, Row : 0 Ѓ--> Max
+ /* Set row scan mode */
+ writeCommand(SEPS114A_ROW_SCAN_MODE,0x00); // Alternate scan mode
+ /* Set column current */
+
+ // writeCommand(SEPS114A_COLUMN_CURRENT_R,0x32);
+ // writeCommand(SEPS114A_COLUMN_CURRENT_G,0x31);
+ // writeCommand(SEPS114A_COLUMN_CURRENT_B,0x31);
+ writeCommand(SEPS114A_COLUMN_CURRENT_R,0x6E);
+ writeCommand(SEPS114A_COLUMN_CURRENT_G,0x4F);
+ writeCommand(SEPS114A_COLUMN_CURRENT_B,0x77);
+
+ /* Set row overlap */
+ writeCommand(SEPS114A_ROW_OVERLAP,0x00); // Band gap only
+ /* Set discharge time */
+ writeCommand(SEPS114A_DISCHARGE_TIME,0x01); // Discharge time : normal discharge
+ /* Set peak pulse delay */
+ writeCommand(SEPS114A_PEAK_PULSE_DELAY,0x00);
+ /* Set peak pulse width */
+ writeCommand(SEPS114A_PEAK_PULSE_WIDTH_R,0x02);
+ writeCommand(SEPS114A_PEAK_PULSE_WIDTH_G,0x02);
+ writeCommand(SEPS114A_PEAK_PULSE_WIDTH_B,0x02);
+ /* Set precharge current */
+
+ writeCommand(SEPS114A_PRECHARGE_CURRENT_R,0x14);
+ writeCommand(SEPS114A_PRECHARGE_CURRENT_G,0x50);
+ writeCommand(SEPS114A_PRECHARGE_CURRENT_B,0x19);
+
+
+ /* Set row scan on/off */
+ writeCommand(SEPS114A_ROW_SCAN_ON_OFF,0x00); // Normal row scan
+ /* Set scan off level */
+ writeCommand(SEPS114A_SCAN_OFF_LEVEL,0x04); // VCC_C*0.75 //0x04
+
+ writeCommand(SEPS114A_MEM_X1,0x00);
+ writeCommand(SEPS114A_MEM_X2,0x5F);
+ writeCommand(SEPS114A_MEM_Y1,0x00);
+ writeCommand(SEPS114A_MEM_Y2,0x5F);
+
+ /* Set memory access point */
+
+ writeCommand(SEPS114A_DISPLAYSTART_X,0x00);
+ writeCommand(SEPS114A_DISPLAYSTART_Y,0x00);
+
+ // set_region(0, 0, 96, 96);
+ /* Set active display area of panel */
+ writeCommand(SEPS114A_DISPLAY_X1,0x00);
+ writeCommand(SEPS114A_DISPLAY_X2,0x5F);
+ writeCommand(SEPS114A_DISPLAY_Y1,0x00);
+ writeCommand(SEPS114A_DISPLAY_Y2,0x5F);
+
+ /* Display ON */
+ writeCommand(SEPS114A_DISPLAY_ON_OFF,0x01);
+}
+
+
+
+//Set memory area(address) to write a display data
+void Adafruit_SEPS114A::MemorySize(uint8_t X1, uint8_t X2, uint8_t Y1, uint8_t Y2){
+ writeCommand(SEPS114A_MEM_X1,X1);
+ writeCommand(SEPS114A_MEM_X2,X2);
+ writeCommand(SEPS114A_MEM_Y1,Y1);
+ writeCommand(SEPS114A_MEM_Y2,Y2);
+}
+
+uint16_t Adafruit_SEPS114A::Color565(uint8_t r, uint8_t g, uint8_t b) {
+ uint16_t c;
+ c = r >> 3;
+ c <<= 6;
+ c |= g >> 2;
+ c <<= 5;
+ c |= b >> 3;
+
+ return c;
+}
+
+
+// Set a single pixel
+void Adafruit_SEPS114A::drawPixel(int16_t x, int16_t y, uint16_t color)
+{
+
+ MemorySize( x, 1, y, 1);
+ DDRAM_access();
+ writeData(color >> 8) ;
+ writeData(color);
+}
+
+
+void Adafruit_SEPS114A::clearDisplay()
+{
+ int j;
+ MemorySize(0x00,0x5F,0x00,0x5F);
+ DDRAM_access();
+
+ for(j=0;j<9216;j++){ //
+ writeData(Black >> 8) ;
+ writeData(Black);
+ }
+}
+
+ void Adafruit_SEPS114A::setContrastControl(int brightness)
+{
+ int r, g, b;
+ r = 2 + 16*brightness;
+ g = 1 + 10*brightness;
+ b = 1 + (23*brightness)/2;
+ writeCommand(SEPS114A_COLUMN_CURRENT_R,r);
+ writeCommand(SEPS114A_COLUMN_CURRENT_G,g);
+ writeCommand(SEPS114A_COLUMN_CURRENT_B,b);
+}
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Adafruit_SEPS114A.h Thu Apr 28 10:03:43 2016 +0000
@@ -0,0 +1,159 @@
+
+
+
+//#ifndef _Adafruit_SEPS114A_H_
+//#define _Adafruit_SEPS114A_H_
+
+#include "mbed.h"
+#include "Adafruit_GFX.h"
+
+#include <vector>
+#include <algorithm>
+
+
+
+
+
+
+
+/* some 16bit RGB color definitions */
+enum Color{
+ Black = 0x0000, /* 0, 0, 0 */
+ Navy = 0x000F, /* 0, 0, 128 */
+ DarkGreen = 0x03E0, /* 0, 128, 0 */
+ DarkCyan = 0x03EF, /* 0, 128, 128 */
+ Maroon = 0x7800, /* 128, 0, 0 */
+ Purple = 0x780F, /* 128, 0, 128 */
+ Olive = 0x7BE0, /* 128, 128, 0 */
+ LightGrey = 0xC618, /* 192, 192, 192 */
+ DarkGrey = 0x7BEF, /* 128, 128, 128 */
+ Blue = 0x001F, /* 0, 0, 255 */
+ Green = 0x07E0, /* 0, 255, 0 */
+ Cyan = 0x07FF, /* 0, 255, 255 */
+ Red = 0xF800, /* 255, 0, 0 */
+ Magenta = 0xF81F, /* 255, 0, 255 */
+ Yellow = 0xFFE0, /* 255, 255, 0 */
+ White = 0xFFFF, /* 255, 255, 255 */
+ Orange = 0xFD20, /* 255, 165, 0 */
+ GreenYellow = 0xAFE5, /* 173, 255, 47 */
+ Pink = 0xF81F
+};
+
+
+// A DigitalOut sub-class that provides a constructed default state
+class DigitalOut2 : public DigitalOut
+{
+public:
+ DigitalOut2(PinName pin, bool active = false) : DigitalOut(pin) { write(active); };
+ DigitalOut2& operator= (int value) { write(value); return *this; };
+ DigitalOut2& operator= (DigitalOut2& rhs) { write(rhs.read()); return *this; };
+ operator int() { return read(); };
+};
+
+
+
+
+/** The pure base class for the SSD1351 display driver.
+ *
+
+ */
+class Adafruit_SEPS114A : public Adafruit_GFX
+{
+public:
+ Adafruit_SEPS114A(PinName RST, uint8_t rawHeight = 96, uint8_t rawWidth = 96)
+ : Adafruit_GFX(rawWidth,rawHeight)
+ , rst(RST,false)
+ {
+
+
+
+ };
+
+ void begin();
+
+ void clearDisplay();
+ void MemorySize(uint8_t X1, uint8_t X2, uint8_t Y1, uint8_t Y2);
+ void set_region(int x, int y, int xs, int ys);
+ uint16_t Color565(uint8_t r, uint8_t g, uint8_t b);
+
+
+ // These must be implemented in the derived transport driver
+ virtual void writeCommand(uint8_t reg_index,uint8_t reg_value) = 0;
+ virtual void writeData(uint32_t data_value) = 0;
+ virtual void DDRAM_access() = 0;
+ virtual void drawPixel(int16_t x, int16_t y, uint16_t color);
+ void setContrastControl(int brightness);
+
+protected:
+
+ DigitalOut2 rst;
+
+
+
+};
+
+
+/** This is the SPI SSD1351 display driver transport class
+ *
+ */
+class Adafruit_SEPS114A_Spi : public Adafruit_SEPS114A
+{
+public:
+ /** Create a SSD1351 SPI transport display driver instance with the specified DC, RST, and CS pins, as well as the display dimentions
+ *
+ * Required parameters
+ * @param spi - a reference to an initialized SPI object
+ * @param DC (Data/Command) pin name
+ * @param RST (Reset) pin name
+ * @param CS (Chip Select) pin name
+ *
+ * Optional parameters
+ * @param rawHeight - the vertical number of pixels for the display, defaults to 96
+ * @param rawWidth - the horizonal number of pixels for the display, defaults to 96
+ */
+ Adafruit_SEPS114A_Spi(SPI &spi, PinName DC, PinName RST, PinName CS, uint8_t rawHieght = 96, uint8_t rawWidth = 96)
+ : Adafruit_SEPS114A(RST, rawHieght, rawWidth)
+ , cs(CS,true)
+ , dc(DC,false)
+ , mspi(spi)
+ {
+ begin();
+ clearDisplay();
+ };
+
+ virtual void writeCommand(uint8_t reg_index,uint8_t reg_value)
+ {
+
+ //Select index addr
+ cs = 0;
+ dc = 0;
+ mspi.write(reg_index);
+ cs = 1;
+ //Write data to reg
+ cs = 0;
+ dc = 1;
+ mspi.write(reg_value);
+ cs = 1;
+ };
+
+ virtual void writeData(uint32_t data_value)
+ {
+ cs = 0;
+ dc = 1;
+ mspi.write(data_value);
+ cs = 1;
+ };
+ virtual void DDRAM_access()
+ {
+ cs = 0;
+ dc = 0;
+ mspi.write(0x08);
+ cs = 1;
+ };
+
+protected:
+
+ DigitalOut2 cs, dc;
+ SPI &mspi;
+};
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/glcdfont.h Thu Apr 28 10:03:43 2016 +0000
@@ -0,0 +1,285 @@
+/*********************************************************************
+This is a library for our Monochrome OLEDs based on SSD1306 drivers
+
+ Pick one up today in the adafruit shop!
+ ------> http://www.adafruit.com/category/63_98
+
+These displays use SPI to communicate, 4 or 5 pins are required to
+interface
+
+Adafruit invests time and resources providing this open source code,
+please support Adafruit and open-source hardware by purchasing
+products from Adafruit!
+
+Written by Limor Fried/Ladyada for Adafruit Industries.
+BSD license, check license.txt for more information
+All text above, and the splash screen must be included in any redistribution
+*********************************************************************/
+
+/*
+ * Modified by Neal Horman 7/14/2012 for use in LPC1768
+ */
+
+#ifndef FONT5X7_H
+#define FONT5X7_H
+
+// standard ascii 5x7 font
+
+static unsigned char font[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3E, 0x5B, 0x4F, 0x5B, 0x3E,
+ 0x3E, 0x6B, 0x4F, 0x6B, 0x3E,
+ 0x1C, 0x3E, 0x7C, 0x3E, 0x1C,
+ 0x18, 0x3C, 0x7E, 0x3C, 0x18,
+ 0x1C, 0x57, 0x7D, 0x57, 0x1C,
+ 0x1C, 0x5E, 0x7F, 0x5E, 0x1C,
+ 0x00, 0x18, 0x3C, 0x18, 0x00,
+ 0xFF, 0xE7, 0xC3, 0xE7, 0xFF,
+ 0x00, 0x18, 0x24, 0x18, 0x00,
+ 0xFF, 0xE7, 0xDB, 0xE7, 0xFF,
+ 0x30, 0x48, 0x3A, 0x06, 0x0E,
+ 0x26, 0x29, 0x79, 0x29, 0x26,
+ 0x40, 0x7F, 0x05, 0x05, 0x07,
+ 0x40, 0x7F, 0x05, 0x25, 0x3F,
+ 0x5A, 0x3C, 0xE7, 0x3C, 0x5A,
+ 0x7F, 0x3E, 0x1C, 0x1C, 0x08,
+ 0x08, 0x1C, 0x1C, 0x3E, 0x7F,
+ 0x14, 0x22, 0x7F, 0x22, 0x14,
+ 0x5F, 0x5F, 0x00, 0x5F, 0x5F,
+ 0x06, 0x09, 0x7F, 0x01, 0x7F,
+ 0x00, 0x66, 0x89, 0x95, 0x6A,
+ 0x60, 0x60, 0x60, 0x60, 0x60,
+ 0x94, 0xA2, 0xFF, 0xA2, 0x94,
+ 0x08, 0x04, 0x7E, 0x04, 0x08,
+ 0x10, 0x20, 0x7E, 0x20, 0x10,
+ 0x08, 0x08, 0x2A, 0x1C, 0x08,
+ 0x08, 0x1C, 0x2A, 0x08, 0x08,
+ 0x1E, 0x10, 0x10, 0x10, 0x10,
+ 0x0C, 0x1E, 0x0C, 0x1E, 0x0C,
+ 0x30, 0x38, 0x3E, 0x38, 0x30,
+ 0x06, 0x0E, 0x3E, 0x0E, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x5F, 0x00, 0x00, // ! 0x21
+ 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, 0x08, 0x07, 0x03, 0x00,
+ 0x00, 0x1C, 0x22, 0x41, 0x00,
+ 0x00, 0x41, 0x22, 0x1C, 0x00,
+ 0x2A, 0x1C, 0x7F, 0x1C, 0x2A,
+ 0x08, 0x08, 0x3E, 0x08, 0x08,
+ 0x00, 0x80, 0x70, 0x30, 0x00,
+ 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x20, 0x10, 0x08, 0x04, 0x02,
+ 0x3E, 0x51, 0x49, 0x45, 0x3E,
+ 0x00, 0x42, 0x7F, 0x40, 0x00,
+ 0x72, 0x49, 0x49, 0x49, 0x46,
+ 0x21, 0x41, 0x49, 0x4D, 0x33,
+ 0x18, 0x14, 0x12, 0x7F, 0x10,
+ 0x27, 0x45, 0x45, 0x45, 0x39,
+ 0x3C, 0x4A, 0x49, 0x49, 0x31,
+ 0x41, 0x21, 0x11, 0x09, 0x07,
+ 0x36, 0x49, 0x49, 0x49, 0x36,
+ 0x46, 0x49, 0x49, 0x29, 0x1E,
+ 0x00, 0x00, 0x14, 0x00, 0x00,
+ 0x00, 0x40, 0x34, 0x00, 0x00,
+ 0x00, 0x08, 0x14, 0x22, 0x41,
+ 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x00, 0x41, 0x22, 0x14, 0x08,
+ 0x02, 0x01, 0x59, 0x09, 0x06,
+ 0x3E, 0x41, 0x5D, 0x59, 0x4E,
+ 0x7C, 0x12, 0x11, 0x12, 0x7C,
+ 0x7F, 0x49, 0x49, 0x49, 0x36,
+ 0x3E, 0x41, 0x41, 0x41, 0x22,
+ 0x7F, 0x41, 0x41, 0x41, 0x3E,
+ 0x7F, 0x49, 0x49, 0x49, 0x41,
+ 0x7F, 0x09, 0x09, 0x09, 0x01,
+ 0x3E, 0x41, 0x41, 0x51, 0x73,
+ 0x7F, 0x08, 0x08, 0x08, 0x7F,
+ 0x00, 0x41, 0x7F, 0x41, 0x00,
+ 0x20, 0x40, 0x41, 0x3F, 0x01,
+ 0x7F, 0x08, 0x14, 0x22, 0x41,
+ 0x7F, 0x40, 0x40, 0x40, 0x40,
+ 0x7F, 0x02, 0x1C, 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,
+ 0x26, 0x49, 0x49, 0x49, 0x32,
+ 0x03, 0x01, 0x7F, 0x01, 0x03,
+ 0x3F, 0x40, 0x40, 0x40, 0x3F,
+ 0x1F, 0x20, 0x40, 0x20, 0x1F,
+ 0x3F, 0x40, 0x38, 0x40, 0x3F,
+ 0x63, 0x14, 0x08, 0x14, 0x63,
+ 0x03, 0x04, 0x78, 0x04, 0x03,
+ 0x61, 0x59, 0x49, 0x4D, 0x43,
+ 0x00, 0x7F, 0x41, 0x41, 0x41,
+ 0x02, 0x04, 0x08, 0x10, 0x20,
+ 0x00, 0x41, 0x41, 0x41, 0x7F,
+ 0x04, 0x02, 0x01, 0x02, 0x04,
+ 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x00, 0x03, 0x07, 0x08, 0x00,
+ 0x20, 0x54, 0x54, 0x78, 0x40,
+ 0x7F, 0x28, 0x44, 0x44, 0x38,
+ 0x38, 0x44, 0x44, 0x44, 0x28,
+ 0x38, 0x44, 0x44, 0x28, 0x7F,
+ 0x38, 0x54, 0x54, 0x54, 0x18,
+ 0x00, 0x08, 0x7E, 0x09, 0x02,
+ 0x18, 0xA4, 0xA4, 0x9C, 0x78,
+ 0x7F, 0x08, 0x04, 0x04, 0x78,
+ 0x00, 0x44, 0x7D, 0x40, 0x00,
+ 0x20, 0x40, 0x40, 0x3D, 0x00,
+ 0x7F, 0x10, 0x28, 0x44, 0x00,
+ 0x00, 0x41, 0x7F, 0x40, 0x00,
+ 0x7C, 0x04, 0x78, 0x04, 0x78,
+ 0x7C, 0x08, 0x04, 0x04, 0x78,
+ 0x38, 0x44, 0x44, 0x44, 0x38,
+ 0xFC, 0x18, 0x24, 0x24, 0x18,
+ 0x18, 0x24, 0x24, 0x18, 0xFC,
+ 0x7C, 0x08, 0x04, 0x04, 0x08,
+ 0x48, 0x54, 0x54, 0x54, 0x24,
+ 0x04, 0x04, 0x3F, 0x44, 0x24,
+ 0x3C, 0x40, 0x40, 0x20, 0x7C,
+ 0x1C, 0x20, 0x40, 0x20, 0x1C,
+ 0x3C, 0x40, 0x30, 0x40, 0x3C,
+ 0x44, 0x28, 0x10, 0x28, 0x44,
+ 0x4C, 0x90, 0x90, 0x90, 0x7C,
+ 0x44, 0x64, 0x54, 0x4C, 0x44, // z 0x7A
+ 0x00, 0x08, 0x36, 0x41, 0x00, // { 0x7B
+ 0x00, 0x00, 0x77, 0x00, 0x00, // | 0x7C
+ 0x00, 0x41, 0x36, 0x08, 0x00, // } 0x7D
+ 0x02, 0x01, 0x02, 0x04, 0x02,
+ 0x3C, 0x26, 0x23, 0x26, 0x3C,
+ 0x7C, 0x14, 0x14, 0x14, 0x08,//p 0x80
+ 0x38, 0x44, 0x44, 0x44, 0x20,//c 0x81
+ 0x04, 0x04, 0x7c, 0x04, 0x04,//т 0x82
+ 0x0C, 0x50, 0x50, 0x50, 0x3C,//у 0x83
+ 0x30, 0x48, 0xfc, 0x48, 0x30,//ф 0x84
+ 0x44, 0x28, 0x10, 0x28, 0x44,//x 0x85
+ 0x7c, 0x40, 0x40, 0x40, 0xfc,//ц 0x86
+ 0x0c, 0x10, 0x10, 0x10, 0x7c,//ч 0x87
+ 0x7c, 0x40, 0x7c, 0x40, 0x7c,//ш 0x88
+ 0x7c, 0x40, 0x7c, 0x40, 0xfc,//щ 0x89
+ 0x04, 0x7c, 0x50, 0x50, 0x20,//ъ 0x8A
+ 0x7c, 0x50, 0x50, 0x20, 0x7c,//ы 0x8B
+ 0x7c, 0x50, 0x50, 0x20, 0x00,//ь 0x8C
+ 0x28, 0x44, 0x54, 0x54, 0x38,//э 0x8D
+ 0x7c, 0x10, 0x38, 0x44, 0x38,//ю 0x8E
+ 0x08, 0x54, 0x34, 0x14, 0x7c,//я 0x8F
+ 0x7e, 0x11, 0x11, 0x11, 0x7e,//A 0x90
+ 0x7f, 0x49, 0x49, 0x49, 0x33,//Б 0x91
+ 0x7f, 0x49, 0x49, 0x49, 0x36,//В 0x92
+ 0x7f, 0x01, 0x01, 0x01, 0x03,//Г 0x93
+ 0xe0, 0x51, 0x4f, 0x41, 0xff,//Д 0x94
+ 0x7f, 0x49, 0x49, 0x49, 0x41,//E 0x95
+ 0x77, 0x08, 0x7f, 0x08, 0x77,/*Ж 0x96*/
+ 0x41, 0x49, 0x49, 0x49, 0x36,//З 0x97
+ 0x7f, 0x10, 0x08, 0x04, 0x7f,//И 0x98
+ 0x7c, 0x21, 0x12, 0x09, 0x7c,//Й 0x99
+ 0x7f, 0x08, 0x14, 0x22, 0x41,//K 0x9A
+ 0x20, 0x41, 0x3f, 0x01, 0x7f,//Л 0x9B
+ 0x7f, 0x02, 0x0c, 0x02, 0x7f,//M 0x9C
+ 0x7f, 0x08, 0x08, 0x08, 0x7f,//H 0x9D
+ 0x3e, 0x41, 0x41, 0x41, 0x3e,//O 0x9E
+ 0x7f, 0x01, 0x01, 0x01, 0x7f,//П 0x9F
+ 0x7f, 0x09, 0x09, 0x09, 0x06,//P 0xA0
+ 0x3e, 0x41, 0x41, 0x41, 0x22,//C 0xA1
+ 0x01, 0x01, 0x7f, 0x01, 0x01,//T 0xA2
+ 0x47, 0x28, 0x10, 0x08, 0x07,//У 0xA3
+ 0x1c, 0x22, 0x7f, 0x22, 0x1c,//Ф 0xA4
+ 0x63, 0x14, 0x08, 0x14, 0x63,//X 0xA5
+ 0x7f, 0x40, 0x40, 0x40, 0xff,//Ц 0xA6
+ 0x07, 0x08, 0x08, 0x08, 0x7f,//Ч 0xA7
+ 0x7f, 0x40, 0x7f, 0x40, 0x7f,//Ш 0xA8
+ 0x7f, 0x40, 0x7f, 0x40, 0xff,//Щ 0xA9
+ 0x01, 0x7f, 0x48, 0x48, 0x30,//Ъ 0xAA
+ 0x7f, 0x48, 0x30, 0x00, 0x7f,//Ы 0xAB
+ 0x00, 0x7f, 0x48, 0x48, 0x30,//Э 0xAC
+ 0x22, 0x41, 0x49, 0x49, 0x3e,//Ь 0xAD
+ 0x7f, 0x08, 0x3e, 0x41, 0x3e,//Ю 0xAE
+ 0x46, 0x29, 0x19, 0x09, 0x7f,//Я 0xAF
+ 0x20, 0x54, 0x54, 0x54, 0x78,//a 0xB0
+ 0x3c, 0x4a, 0x4a, 0x49, 0x31,//б 0xB1
+ 0x7c, 0x54, 0x54, 0x28, 0x00,//в 0xB2
+ 0x7c, 0x04, 0x04, 0x04, 0x0c,//г 0xB3
+ 0xe0, 0x54, 0x4c, 0x44, 0xfc,//д 0xB4
+ 0x38, 0x54, 0x54, 0x54, 0x18,//e 0xB5
+ 0x6c, 0x10, 0x7c, 0x10, 0x6c,//ж 0xB6
+ 0x44, 0x44, 0x54, 0x54, 0x28,//з 0xB7
+ 0x7c, 0x20, 0x10, 0x08, 0x7c,//и 0xB8
+ 0x7c, 0x41, 0x22, 0x11, 0x7c,//й 0xB9
+ 0x7c, 0x10, 0x28, 0x44, 0x00,//к 0xBA
+ 0x20, 0x44, 0x3c, 0x04, 0x7c,//л 0xBB
+ 0x7c, 0x08, 0x10, 0x08, 0x7c,//м 0xBC
+ 0x7c, 0x10, 0x10, 0x10, 0x7c,//н 0xBD
+ 0x38, 0x44, 0x44, 0x44, 0x38,//o 0xBE
+ 0x7c, 0x04, 0x04, 0x04, 0x7c, //п 0xBF
+ 0x10, 0x10, 0x10, 0x1F, 0x10,
+ 0x10, 0x10, 0x10, 0xF0, 0x10,
+ 0x00, 0x00, 0x00, 0xFF, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0xFF, 0x10,
+ 0x00, 0x00, 0x00, 0xFF, 0x14,
+ 0x00, 0x00, 0xFF, 0x00, 0xFF,
+ 0x00, 0x00, 0x1F, 0x10, 0x17,
+ 0x00, 0x00, 0xFC, 0x04, 0xF4,
+ 0x14, 0x14, 0x17, 0x10, 0x17,
+ 0x14, 0x14, 0xF4, 0x04, 0xF4,
+ 0x00, 0x00, 0xFF, 0x00, 0xF7,
+ 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0xF7, 0x00, 0xF7,
+ 0x14, 0x14, 0x14, 0x17, 0x14,
+ 0x10, 0x10, 0x1F, 0x10, 0x1F,
+ 0x14, 0x14, 0x14, 0xF4, 0x14,
+ 0x10, 0x10, 0xF0, 0x10, 0xF0,
+ 0x00, 0x00, 0x1F, 0x10, 0x1F,
+ 0x00, 0x00, 0x00, 0x1F, 0x14,
+ 0x00, 0x00, 0x00, 0xFC, 0x14,
+ 0x00, 0x00, 0xF0, 0x10, 0xF0,
+ 0x10, 0x10, 0xFF, 0x10, 0xFF,
+ 0x14, 0x14, 0x14, 0xFF, 0x14,
+ 0x10, 0x10, 0x10, 0x1F, 0x00,
+ 0x00, 0x00, 0x00, 0xF0, 0x10,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+ 0x38, 0x44, 0x44, 0x38, 0x44,
+ 0x7C, 0x2A, 0x2A, 0x3E, 0x14,
+ 0x7E, 0x02, 0x02, 0x06, 0x06,
+ 0x02, 0x7E, 0x02, 0x7E, 0x02,
+ 0x63, 0x55, 0x49, 0x41, 0x63,
+ 0x38, 0x44, 0x44, 0x3C, 0x04,
+ 0x40, 0x7E, 0x20, 0x1E, 0x20,
+ 0x06, 0x02, 0x7E, 0x02, 0x02,
+ 0x99, 0xA5, 0xE7, 0xA5, 0x99,
+ 0x1C, 0x2A, 0x49, 0x2A, 0x1C,
+ 0x4C, 0x72, 0x01, 0x72, 0x4C,
+ 0x30, 0x4A, 0x4D, 0x4D, 0x30,
+ 0x30, 0x48, 0x78, 0x48, 0x30,
+ 0xBC, 0x62, 0x5A, 0x46, 0x3D,
+ 0x3E, 0x49, 0x49, 0x49, 0x00,
+ 0x7E, 0x01, 0x01, 0x01, 0x7E,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x44, 0x44, 0x5F, 0x44, 0x44,
+ 0x40, 0x51, 0x4A, 0x44, 0x40,
+ 0x40, 0x44, 0x4A, 0x51, 0x40,
+ 0x00, 0x00, 0xFF, 0x01, 0x03,
+ 0xE0, 0x80, 0xFF, 0x00, 0x00,
+ 0x08, 0x08, 0x6B, 0x6B, 0x08,
+ 0x36, 0x12, 0x36, 0x24, 0x36,
+ 0x06, 0x0F, 0x09, 0x0F, 0x06,
+ 0x00, 0x00, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x00,
+ 0x30, 0x40, 0xFF, 0x01, 0x01,
+ 0x00, 0x1F, 0x01, 0x01, 0x1E,
+ 0x00, 0x19, 0x1D, 0x17, 0x12,
+ 0x00, 0x3C, 0x3C, 0x3C, 0x3C,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+#endif