oled displey
Revision 0:cd4a2add97a0, committed 2019-07-23
- Comitter:
- docent
- Date:
- Tue Jul 23 12:32:26 2019 +0000
- Commit message:
- for my students
Changed in this revision
diff -r 000000000000 -r cd4a2add97a0 TroykaOLED.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TroykaOLED.cpp Tue Jul 23 12:32:26 2019 +0000 @@ -0,0 +1,836 @@ +/****************************************************************************/ +// Function: Cpp file for TroykaOLED +// Hardware: SSD1306 +// Arduino IDE: Arduino-1.8.5 +// Author: Igor Dementiev +// Date: NOV 10,2018 +// Version: v1.0.0 +// by www.amperka.ru +/****************************************************************************/ + +#include "TroykaOLED.h" +#define pgm_read_byte * //my +TroykaOLED::TroykaOLED (I2C *i2c,uint8_t i2cAddress, uint8_t width, uint8_t height): + _wire(i2c) +{ + _i2cAddress = i2cAddress; + _width = width; + _height = height; + _bufferDisplay = new uint8_t[_width * _height / 8]; + _stateInvert = false; + _stateAutoUpdate = true; + _stateImageBG = true; + _codingName = TXT_UTF8; +} + +void TroykaOLED::begin() { + _font.width=0; + _font.height=0; + _font.firstSymbol=0; + _font.sumSymbol=0; + _font.invert=false; + _font.background= true; + _font.setFont= false; +// _wire = wire; + // инициируем I²C +// _wire->begin(); + + // выключаем дисплей + _sendCommand(SSD1306_DISPLAY_OFF); + // устанавливаем частоту обновления дисплея в значение 0x80 (по умолчанию) + _sendCommand(SSD1306_SET_DISPLAY_CLOCK); + _sendCommand(0x80); + // устанавливаем multiplex ratio (коэффициент мультиплексирования COM выводов) в значение 0x3F (по умолчанию) + _sendCommand(SSD1306_SET_MULTIPLEX_RATIO); + _sendCommand(0x3F); + // устанавливаем смещение дисплея в 0 (без смещения) + _sendCommand(SSD1306_SET_DISPLAY_OFFSET); + _sendCommand(0x00); + // устанавливаем смещение ОЗУ в значение 0 (без смещения) + _sendCommand(SSD1306_SET_START_LINE | 0); + // настраиваем схему питания (0x14 - включить внутренний DC-DC преобразователь, 0x10 - отключить внутренний DC/DC) + _sendCommand(SSD1306_CHARGE_DCDC_PUMP); + _sendCommand(0x14); + // устанавливаем режим автоматической адресации (0x00-горизонтальная, 0x01-вертикальная, 0x10-страничная) + _sendCommand(SSD1306_ADDR_MODE); + _sendCommand(0x00); + // устанавливаем режим строчной развертки (слева/направо) + _sendCommand(SSD1306_SET_REMAP_L_TO_R); + // устанавливаем режим кадровой развертки (сверху/вниз) + _sendCommand(SSD1306_SET_REMAP_T_TO_D); + // устанавливаем аппаратную конфигурация COM выводов в значение 0x12 (по умолчанию) + _sendCommand(SSD1306_SET_COM_PINS); + _sendCommand(0x12); + // устанавливаем контрастность в значение 0xCF (допустимы значения от 0x00 до 0xFF) + _sendCommand(SSD1306_SET_CONTRAST); + _sendCommand(0xFF); + // настраиваем схему DC/DC преобразователя (0xF1 - Vcc снимается с DC/DC преобразователя, 0x22 - Vcc подается извне) + _sendCommand(SSD1306_SET_PRECHARGE_PERIOD); + _sendCommand(0xF1); + // устанавливаем питание светодиодов VcomH в значение выше чем по умолчанию: 0x30 + // это увеличит яркость дисплея + // допустимые значения: 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70 + _sendCommand(SSD1306_SET_VCOM_DESELECT); + _sendCommand(0x40); + // разрешаем отображать содержимое RAM памяти + _sendCommand(SSD1306_RAM_ON); + // отключаем инверсию + _sendCommand(SSD1306_INVERT_OFF); + // включаем дисплей + _sendCommand(SSD1306_DISPLAY_ON); + // чистим экран + clearDisplay(); +} + +void TroykaOLED::update() { + _sendBuffer(); +} + +void TroykaOLED::autoUpdate(bool stateAutoUpdate) { + _stateAutoUpdate = stateAutoUpdate; +} + +void TroykaOLED::setBrigtness(uint8_t brigtness) { + _sendCommand(SSD1306_SET_CONTRAST); + _sendCommand(brigtness); +} + +void TroykaOLED::clearDisplay() { + memset(_bufferDisplay, 0, _width * _height / 8); + + if(_stateAutoUpdate) { + _sendBuffer(); + } +} + +void TroykaOLED::invertDisplay(bool stateInvert) { + if(stateInvert) { + _stateInvert = true; + _sendCommand(SSD1306_INVERT_ON); + } else { + _stateInvert = false; + _sendCommand(SSD1306_INVERT_OFF); + } +} + +void TroykaOLED::invertText (bool stateInvertText) { + _font.invert = stateInvertText; +} + +void TroykaOLED::bgText (bool stateTextBG) { + _font.background = stateTextBG; +} + +void TroykaOLED::bgImage (bool stateImageBG) { + _stateImageBG = stateImageBG; +} + +void TroykaOLED::setFont(const uint8_t* fontData) { + // сохраняем указатель на первый байт массива в области памяти программ + _font.fontData = fontData; + // сохраняем ширину символов выбранного шрифта читая её из 0 байта массива по указателю fontData + _font.width = pgm_read_byte(&fontData[0]); + // сохраняем высоту символов выбранного шрифта читая её из 1 байта массива по указателю fontData + _font.height = pgm_read_byte(&fontData[1]); + // сохраняем код первого симола выбран. шрифта читая его из 2 байта массива по указателю fontData + _font.firstSymbol = pgm_read_byte(&fontData[2]); + // сохраняем количество символов в выбр шрифте читая их из 3 байта массива по указателю fontData + _font.sumSymbol = pgm_read_byte(&fontData[3]); + // устанавливаем флаг выбора шрифта + _font.setFont = true; + // определяем позицию бита указывающего количество пустых интервалов в массиве шрифта. + uint16_t i = (uint16_t) _font.sumSymbol * _font.width * _font.height / 8 + 0x04; + // определяем количество пустых интервалов в массиве шрифта. + uint16_t j = pgm_read_byte(&fontData[i]); + // указываем что первый пустой интервал в массиве шрифта находится после символа с кодом (0xFF) и состоит из 0 символов + _font.startSpace[0] = 0xFF; + _font.sumSpace[0] = 0; + // указываем что второй пустой интервал в массиве шрифта находится после символа с кодом (0xFF) и состоит из 0 символов + _font.startSpace[1] = 0xFF; + _font.sumSpace[1] = 0; + // указываем что третий пустой интервал в массиве шрифта находится после символа с кодом (0xFF) и состоит из 0 символов + _font.startSpace[2] = 0xFF; + _font.sumSpace[2] = 0; + // если количество пустых интервалов больше 0 + // сохраняем начало первого пустого интервала символов и размер первого пустого интервала символов + if (j > 0) { + _font.startSpace[0] = pgm_read_byte(&fontData[i + 1]); + _font.sumSpace[0] = pgm_read_byte(&fontData[i + 2]); + } + // если количество пустых интервалов больше 1 + // сохраняем начало второго пустого интервала символов и размер второго пустого интервала символов + if (j > 1) { + _font.startSpace[1] = pgm_read_byte(&fontData[i + 3]); + _font.sumSpace[1] = pgm_read_byte(&fontData[i + 4]); + } + // если количество пустых интервалов больше 2 + // сохраняем начало третьего пустого интервала символов и размер третьего пустого интервала символов + if (j > 2) { + _font.startSpace[2] = pgm_read_byte(&fontData[i + 5]); + _font.sumSpace[2] = pgm_read_byte(&fontData[i + 6]); + } +} + +void TroykaOLED::setCoding(uint8_t codingName) { + _codingName = codingName; +} + +void TroykaOLED::setCursor(int numX, int numY) { + if(numX < _width) { + _numX = numX; + } + if(numY < _height) { + _numY = numY; + } +} + +void TroykaOLED::print(char* data, int x, int y) { + _print(_codingCP866(data), x, y); +} +/* +void TroykaOLED::print(String str, int x, int y) { + char data[str.length() + 1]; + str.toCharArray(data, str.length() + 1); + _print(_codingCP866(data), x, y); +} +*/ +void TroykaOLED::print(const char* str, int x, int y) { + char data[strlen(str) + 1]; + for (uint8_t i = 0; i <= strlen(str); i++) { + data[i] = str[i]; + } + _print(_codingCP866(data), x, y); +} + +void TroykaOLED::print(int8_t num, int x, int y, uint8_t base) { + print(int32_t(num), x, y, base); +} + +void TroykaOLED::print(uint8_t num, int x, int y, uint8_t base) { + print(uint32_t(num), x, y, base); +} + +void TroykaOLED::print(int16_t num, int x, int y, uint8_t base) { + print(int32_t(num), x, y, base); +} + +void TroykaOLED::print(uint16_t num, int x, int y, uint8_t base) { + print(uint32_t(num), x, y, base); +} + +void TroykaOLED::print(int32_t num, int x, int y, uint8_t base) { + // определяем количество разрядов числа + // i = количество разрядов + 2, j = множитель кратный основанию системы счисления + int8_t i = 2; + int32_t j = 1; + while (num / j) { + j *= base; + i++; + } + // создаём строку k из i символов и добавляем символ(ы) конца строки + char k[i]; + i--; + k[i] = 0; + i--; + if(num > 0) { + k[i] = 0; + i--; + } + // создаём строку k из i символов и добавляем символ(ы) конца строки + uint32_t n = num < 0 ? num*-1 : num; + while (i) { + k[i]=_itoa(n % base); + n /= base; i--; + } + // заполняем строку k + if (num >= 0) { + k[i]=_itoa(n % base); + } else { + k[i]='-'; + } + // добавляем первый символ (либо первая цифра, либо знак минус) + // выводим строку k + print(k, x, y); +} + +void TroykaOLED::print(uint32_t num, int x, int y, uint8_t base) { + // определяем количество разрядов числа + // i = количество разрядов + 1, j = множитель кратный основанию системы счисления + int8_t i = 1; + uint32_t j = 1; + while (num / j) { + j *= base; + i++; + } + if (num == 0) { + i++; + } + // определяем строку k из i символов и заполняем её + char k[i]; + i--; + k[i] = 0; + + while(i) { + k[i - 1] = _itoa(num % base); + num /= base; + i--; + } + // выводим строку k + print(k, x, y); +} + +void TroykaOLED::print(double num, int x, int y, uint8_t sum) { + uint32_t i = 1, j = 0, k = 0; + j = sum; + while (j) { + i *= 10; + j--; + } + // выводим целую часть числа + print(int32_t(num), x, y); + // если требуется вывести хоть один знак после запятой, то ... + if (sum) { + // выводим символ разделителя + print("."); + // получаем целое число, которое требуется вывести после запятой + j = num * i * (num < 0 ? -1 : 1); + j %= i; + k = j; + // если полученное целое число равно нулю, то выводим sum раз символ «0» + if (j == 0) { + while(sum) { + print("0"); + sum--; + } + } else { + // иначе, если в полученном целом числе меньше разрядов чем требуется + // заполняем эти разряды выводя символ «0», после чего выводим само число + while (j * 10 < i) { + print("0"); + j *= 10; + } + print(k); + } + } +} + +void TroykaOLED::drawPixel(int x, int y, uint8_t color) { + _drawPixel(x, y, color); + if(_stateAutoUpdate) { + _sendBuffer(); + } + _numX = x; + _numY = y; +} + +void TroykaOLED::drawLine(int x1, int y1, int x2, int y2, uint8_t color) { + _drawLine(x1, y1, x2, y2, color); + if(_stateAutoUpdate) { + _sendBuffer(); + } + _numX = x2; + _numY = y2; +} + +void TroykaOLED::drawLine(int x2, int y2, uint8_t color) { + drawLine(_numX, _numY, x2, y2, color); +} + +void TroykaOLED::drawRect(int x1, int y1, int x2, int y2, bool fill, uint8_t color) { + if (fill) { + if (x1 < x2) { + for (int x = x1; x <= x2; x++) { + _drawLine(x,y1,x,y2,color); + } + } else { + for (int x = x1; x >= x2; x--) { + _drawLine(x,y1,x,y2,color); + } + } + } else { + _drawLine(x1, y1, x2, y1, color); + _drawLine(x2, y2, x2, y1, color); + _drawLine(x2, y2, x1, y2, color); + _drawLine(x1, y1, x1, y2, color); + } + if(_stateAutoUpdate) { + _sendBuffer(); + } + _numX = x2; + _numY = y2; +} + +void TroykaOLED::drawCircle(int x, int y, uint8_t r, bool fill, uint8_t color) { + // x1,y1 - положительные координаты точек круга с центром 00 + // p - отрицательная парабола + int x1 = 0, y1 = r, p = 1 - r; + // цикл будет выполняться пока координата x не станет чуть меньше y + // прочертит дугу от 0 до 45° - это 1/8 часть круга + while (x1 < y1 + 1) { + if (fill) { + // прорисовываем горизонтальные линии вверху круга (между точками 3 и 1 дуг) + _drawLine(x - x1, y - y1, x + x1, y - y1, color); + // прорисовываем горизонтальные линии внизу круга (между точками 4 и 2 дуг) + _drawLine(x - x1, y + y1, x + x1, y + y1, color); + // прорисовываем горизонтальные линии выше середины круга (между точками 7 и 5 дуг) + _drawLine(x - y1, y - x1, x + y1, y - x1, color); + // прорисовываем горизонтальные линии выше середины круга (между точками 8 и 6 дуг) + _drawLine(x - y1, y + x1, x + y1, y + x1, color); + } else { + // 1 дуга 0° - 45° (построенная в соответствии с уравнением) + _drawPixel(x + x1, y - y1, color); + // 2 дуга 180° - 135° (1 дуга отражённая по вертикали) + _drawPixel(x + x1, y + y1, color); + // 3 дуга 360° - 315° (1 дуга отражённая по горизонтали) + _drawPixel(x - x1, y - y1, color); + // 4 дуга 180° - 225° (2 дуга отражённая по горизонтали) + _drawPixel(x - x1, y + y1, color); + // 5 дуга 90° - 45° (2 дуга повёрнутая на -90°) + _drawPixel(x + y1, y - x1, color); + // 6 дуга 90° - 135° (1 дуга повёрнутая на +90°) + _drawPixel(x + y1, y + x1, color); + // 7 дуга 270° - 315° (1 дуга повёрнутая на -90°) + _drawPixel(x - y1, y - x1, color); + // 8 дуга 270° - 225° (2 дуга повёрнутая на +90°) + _drawPixel(x - y1, y + x1, color); + } + // если парабола p вышла в положительный диапазон + if(p >= 0) { + // сдвигаем её вниз на y1 * 2 (каждый такой сдвиг провоцирет смещение точки y1 первой дуги вниз) + y1--; + p -= y1 * 2; + } + // с каждым проходом цикла, смещаем точку x1 первой дуги влево и находим новую координату параболы p + p++; + x1++; + p += x1 * 2; + } + if(_stateAutoUpdate) { + _sendBuffer(); + } + _numX = x; + _numY = y; +} + +bool TroykaOLED::bitRead(uint8_t data, uint8_t bit) +{ + uint8_t b; + b=(data>>bit)&1; + if(b) + return true; + else + return false; +} + +void TroykaOLED::drawImage(const uint8_t* image, int x, int y, uint8_t mem) { + uint8_t w = getImageWidth(image, mem); + uint8_t h = getImageHeight(image, mem); + bool color; + // колонка с которой требуется начать вывод изображения ... + switch(x) { + // определяем начальную колонку для выравнивания по левому краю + case OLED_LEFT: + _numX = 0; + break; + // определяем начальную колонку для выравнивания по центру + case OLED_CENTER: + _numX = (_width - w) / 2; + break; + // определяем начальную колонку для выравнивания по правому краю + case OLED_RIGHT: + _numX = _width - w; + break; + // начальной колонкой останется та, на которой был закончен вывод предыдущего текста или изображения + case OLED_THIS: + _numX = _numX; + break; + // начальная колонка определена пользователем + default: + _numX = x; + break; + } + // строка с которой требуется начать вывод изображения ... + switch(y) { + // определяем начальную строку для выравнивания по верхнему краю + case OLED_TOP: + _numY = h - 1; + break; + // определяем начальную строку для выравнивания по центру + case OLED_CENTER: + _numY = (_height - h) / 2; + break; + // определяем начальную строку для выравнивания по нижнему краю + case OLED_BOTTOM: + _numY = _height - 1; + break; + // начальной строкой останется та, на которой выведен предыдущий текст или изображение + case OLED_THIS: + _numY = _numY; + break; + // начальная строка определена пользователем + default: + _numY = y; + break; + } + // проходим по страницам изображения... + for (uint8_t p = 0; p < h; p++) { + // проходим по колонкам изображения... + for (uint8_t k = 0; k < w; k++) { + // если массив изображения находится в памяти ОЗУ + if (mem == IMG_RAM) { + // получаем цвет очередного пикселя из p % 8 бита + // 2 + (p / 8 * w) + k байта, массива image + color = bitRead(image[2 + (p / 8 * w) + k], p % 8); + } else if (mem == IMG_ROM) { + // если массив изображения находится в памяти ПЗУ + // получаем цвет очередного пикселя из p % 8 бита + // 2 + (p / 8 * w) + k байта, массива image + color = bitRead(pgm_read_byte(&image[2 + (p / 8 * w) + k]), p % 8); + } + // если у изображения есть фон или цвет пикселя белый + if (_stateImageBG || color) { + // прорисовываем пиксель в координате (_numX + k, _numY + p) + _drawPixel( _numX + k, _numY + p, color); + } + } + } + // добавляем ширину изображения к координате _numX + _numX += w; + if(_stateAutoUpdate) { + _sendBuffer(); + } +} + +bool TroykaOLED::getPixel(int x, int y) { + if(x < 0 || x > _height - 1 || y < 0 || y > _width - 1) { + return 0; + } + // определяем номер байта массива _bufferDisplay в котором находится пиксель + uint16_t numByte = (y / 8 * 128) + x; + // определяем номер бита в найденном байте, который соответсвует искомому пикселю + uint8_t numBit = y % 8; + // возвращаем цвет пикселя из бита numBit элемента numByte массива _bufferDisplay + return bitRead(_bufferDisplay[numByte], numBit); +} + +uint8_t TroykaOLED::getImageWidth(const uint8_t* image, uint8_t mem) { + // возвращаем ширину изображения + return (mem == IMG_RAM) ? image[0] : pgm_read_byte(&image[0]); +} + +uint8_t TroykaOLED::getImageHeight(const uint8_t* image, uint8_t mem) { + // возвращаем высоту изображения + return (mem == IMG_RAM) ? image[1] : pgm_read_byte(&image[1]); +} + +void TroykaOLED::_print(char* data, int x, int y) { + // если шрифт не выбран или его высота не кратна 8 пикселям, то выходим из функции + if (_font.setFont == false || _font.height % 8 > 0) { + return; + } + // определяем количество колонок которое занимают выводимые символы + uint16_t len = strlen(data) * _font.width; + if (len > _width) { + len = _width / _font.width * _font.width; + } + // объявляем переменную для хранения номера байта в массиве шрифта + uint16_t num; + // объявляем переменные для хранения координат точек + int x1, y1; + // объявляем переменную для хранения цвета точек + bool c; + // колонка с которой требуется начать вывод текста ... + switch (x) { + // определяем начальную колонку для выравнивания по левому краю. + case OLED_LEFT: + _numX = 0; + break; + // определяем начальную колонку для выравнивания по центру + case OLED_CENTER: + _numX = (_width - len) / 2; + break; + // определяем начальную колонку для выравнивания по правому краю + case OLED_RIGHT: + _numX = _width - len; + break; + // начальной колонкой останется та, на которой был закончен вывод предыдущего текста или изображения + case OLED_THIS: + _numX = _numX; + break; + // начальная колонка определена пользователем + default: + _numX = x; + break; + } + // строка с которой требуется начать вывод текста ... + switch (y) { + // определяем начальную строку для выравнивания по верхнему краю + case OLED_TOP: + _numY = _font.height - 1; + break; + // определяем начальную строку для выравнивания по центру + case OLED_CENTER: + _numY = (_height - _font.height) / 2 + _font.height; + break; + // определяем начальную строку для выравнивания по нижнему краю + case OLED_BOTTOM: + _numY = _height; + break; + // начальной строкой останется та, на которой выведен предыдущий текст или изображение + case OLED_THIS: + _numY = _numY; + break; + // начальная строка определена пользователем + default: + _numY = y; + break; + } + // пересчитываем количество колонок которое занимают выводимые символы, с учётом начальной позиции + if (_numX + len > _width) { + len = (_width - _numX) / _font.width * _font.width; + } + // проходим по страницам символов... + for (int8_t p = 0; p < _font.height / 8; p++) { + // проходим по выводимым символам... + for (uint8_t n = 0; n < (len / _font.width); n++) { + // присваиваем переменной num код выводимого символа + num = uint8_t(data[n]); + // если в массиве символов, до кода текущего символа, имеется пустой интервал + // уменьшаем код текущего символа на количество символов в пустом интервале + if(_font.startSpace[0] < num) { + num -= _font.sumSpace[0]; + } + // если в массиве символов, до кода текущего символа, имеется пустой интервал + // уменьшаем код текущего символа на количество символов в пустом интервале + if (_font.startSpace[1] < num) { + num -= _font.sumSpace[1]; + } + // если в массиве символов, до кода текущего символа, имеется пустой интервал + // то уменьшаем код текущего символа на количество символов в пустом интервале + if (_font.startSpace[2] < num) { + num -= _font.sumSpace[2]; + } + // вычитаем код первого символа (с которого начинается массив шрифта) + num -= _font.firstSymbol; + // умножаем полученное значение на ширину символа (количество колонок) + num *= _font.width; + // умножаем полученное значение на высоту символа (количество страниц) + num *= _font.height / 8; + // добавляем количество колонок данного символа, которые уже были выведены на предыдущих страницах + num += p * _font.width; + // добавляем количество байт в начале массива шрифта, которые не являются байтами символов + num += 0x04; + // проходим по байтам очередного символа + for (uint8_t k = 0; k < _font.width; k++) { + // проходим по байтам очередного символа + for (uint8_t b = 0; b < 8; b++) { + // начальная колонка всего текста + (количество выведенных символов * ширина символов) + номер байта текущего символа + x1 = _numX + n * _font.width + k; + // нижняя строка текста - высота симолов + количество уже выведенных страниц + номер бита байта текущего символа + 1 + y1 = _numY + p * 8 + b; + // цвет точки символа: 1-белый, 0-чёрный + c = bitRead( pgm_read_byte(&_font.fontData[num + k]), b); + // если цвет текста требуется инвертировать + if (_font.invert) { + // если установлен фон текста или точка стоит на букве (а не на фоне) + if (_font.background || c) { + // выводим инвертированную точку + _drawPixel(x1, y1, !c); + } + } else { + // если цвет текста не требуется инвертировать + // если установлен фон текста или точка стоит на букве (а не на фоне) + if (_font.background || c) { + // выводим не инвертированную точку + _drawPixel(x1, y1, c); + } + } + } + } + } + } + if(_stateAutoUpdate) { + _sendBuffer(); + } + // сохраняем координату окончания текста. + _numX += len; +} + +// параметр: одна цифра от 0 до 15 +// преобразуем цифры 0-9 в символ с кодом 48-57, а цифры 10-15 в символ с кодом 65-71 +char TroykaOLED::_itoa(uint8_t num) { + return char(num + (num < 10 ? 48 : 55)); +} + +char* TroykaOLED::_codingCP866(char* StrIn) { + // определяем строку для вывода результата + char* StrOut = StrIn; + // переменненые для хранения номера сивола в строках StrIn и StrOut + uint8_t numIn = 0, numOut = 0; + // переменненые для хранения текущего кода символа в строках StrIn и StrOut + uint8_t charThis = StrIn[0], charNext = StrIn[1]; + switch (_codingName) { + // преобразуем текст из кодировки UTF-8: + case TXT_UTF8: + while (charThis > 0 && numIn < 0xFF ) { + // если код текущего символа равен 208, а за ним следует символ с кодом 144...191 + // значит это буква «А»...«п» требующая преобразования к коду 128...175 + if (charThis == 0xD0 && charNext >= 0x90 && charNext <= 0xBF) { + StrOut[numOut] = charNext - 0x10; + numIn++; + } else if (charThis == 0xD0 && charNext == 0x81) { + // если код текущего символа равен 208, а за ним следует символ с кодом 129 + // значит это буква «Ё» требующая преобразования к коду 240 + StrOut[numOut] = 0xF0; numIn++; + } else if (charThis == 0xD1 && charNext >= 0x80 && charNext <= 0x8F) { + // если код текущего символа равен 209, а за ним следует символ с кодом 128...143 + // значит это буква «р»...«я» требующая преобразования к коду 224...239 + StrOut[numOut] = charNext + 0x60; numIn++; + } else if (charThis == 0xD1 && charNext == 0x91) { + // если код текущего символа равен 209, а за ним следует символ с кодом 145 + // значит это буква «ё» требующая преобразования к коду 241 + StrOut[numOut] = 0xF1; + numIn++; + } else { + // иначе не меняем символ + StrOut[numOut] = charThis; + } + // переходим к следующему символу + numIn++; + numOut++; + charThis = StrIn[numIn]; + charNext = StrIn[numIn + 1]; + // добавляем символ конца строки и возвращаем строку StrOut + } + StrOut[numOut] = '\0'; + break; + //преобразуем текст из кодировки WINDOWS-1251: + case TXT_WIN1251: + // если код текущего символа строки StrIn больше 0 и номер текушего символа строки StrIn меньше 255 + while (charThis > 0 && numIn < 0xFF) { + // если код текущего символа равен 192...239 + // значит это буква «А»...«п» требующая преобразования к коду 128...175 + if (charThis >= 0xC0 && charThis <= 0xEF) { + StrOut[numOut] = charThis - 0x40; + } else if (charThis >= 0xF0 && charThis <= 0xFF) { + // если код текущего символа равен 240...255 + // значит это буква «р»...«я» требующая преобразования к коду 224...239 + StrOut[numOut] = charThis - 0x10; + } else if (charThis == 0xA8) { + // если код текущего символа равен 168, значит это буква «Ё» требующая преобразования к коду 240 + StrOut[numOut] = 0xF0; + }else if (charThis == 0xB8) { + // если код текущего символа равен 184, значит это буква «ё» требующая преобразования к коду 241 + StrOut[numOut] = 0xF1; + } else { + // иначе не меняем символ + StrOut[numOut] = charThis; + } + // переходим к следующему символу + numIn++; + numOut++; + charThis = StrIn[numIn]; + // добавляем символ конца строки + } + StrOut[numOut] = '\0'; + break; + } + // возвращаем строку StrOut + return StrOut; +} + +void TroykaOLED::_drawPixel(int x, int y, uint8_t color) { + if(x < 0 || x > _width - 1 || y < 0 || y > _height - 1) { + return; + } + // определяем номер страницы в которой должен находиться пиксель + uint8_t p = y / 8; + // определяем номер байта массива _bufferDisplay в котором требуется прорисовать пиксель + uint16_t numByte = (p * 128 ) + x; + // определяем номер бита в найденном байте, который соответсвует рисуемому пикселю + uint8_t numBit = y % 8; + switch (color) { + case WHITE: + _bufferDisplay[numByte] |= 1 << numBit; + break; + case BLACK: + _bufferDisplay[numByte] &= ~(1 << numBit); + break; + case INVERSE: + _bufferDisplay[numByte] ^= 1 << numBit; + break; + } +} + +void TroykaOLED::_drawLine(int x1, int y1, int x2, int y2, uint8_t color) { + int x3 = x2 - x1; + int y3 = y2 - y1; + // рисуем линию по линейному уровнению (y-y1)/(y2-y1) = (x-x1)/(x2-x1) + // определяем где больше расстояние (по оси x или y) + // по той оси проходим в цикле, для поиска точек на другой оси + if (abs(x3) > abs(y3)) { + if (x1 < x2) { + for (int x = x1; x <= x2; x++) { + _drawPixel(x,((x - x1) * y3 / x3 + y1), color); + } + } else { + for (int x = x1; x >= x2; x--) { + _drawPixel(x,((x - x1) * y3 / x3 + y1), color); + } + } + } else { + if (y1 < y2) { + for (int y = y1; y <= y2; y++) { + _drawPixel(((y - y1) * x3 / y3 + x1), y, color); + } + } else { + for (int y = y1; y >= y2; y--) { + _drawPixel(((y - y1) * x3 / y3 + x1), y, color); + } + } + } +} + +// отправка байта команды +/* +void TroykaOLED::_sendCommand(uint8_t command){ + _wire->beginTransmission(_i2cAddress); + _wire->write(0x80); + _wire->write(command); + _wire->endTransmission(); +} +*/ +void TroykaOLED::_sendCommand(uint8_t command) +{ + char data_write[2]; + data_write[0]=0x80; + data_write[1]=command; + _wire->write(_i2cAddress,data_write, 2,0); +} +// отправка буфера (массива _bufferDisplay) в дисплей +void TroykaOLED::_sendBuffer() { + _sendCommand(SSD1306_ADDR_PAGE); + _sendCommand(0); + _sendCommand(_height / 8 - 1); + _sendCommand(SSD1306_ADDR_COLUMN); + _sendCommand(0); + _sendCommand(_width - 1); + char data_write[17]; //my + data_write[0]=0x40; + for (int i = 0; i < _width * _height / 8; i++){ + for (uint8_t x = 0; x < 16; x++) { + data_write[x+1]=_bufferDisplay[i++]; + } +/* + _wire->beginTransmission(_i2cAddress); + _wire->write(0x40); + for (uint8_t x = 0; x < 16; x++) { + _wire->write(_bufferDisplay[i++]); + } + i--; + _wire->endTransmission(); +*/ + i--; + _wire->write(_i2cAddress,data_write, 17,0); + } +} \ No newline at end of file
diff -r 000000000000 -r cd4a2add97a0 TroykaOLED.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TroykaOLED.h Tue Jul 23 12:32:26 2019 +0000 @@ -0,0 +1,214 @@ +#ifndef TROYKA_OLED_H +#define TROYKA_OLED_H + +#include "mbed.h" +//#include <Wire.h> +#include "defaultFonts.h" +#include "defaultImages.h" + +#define DEC 10 //my +// адрес дисплея +#define SSD1306_ADDRESS 0x78 //0x3C +// установка контрастности, за данной командой должен быть отправлен байт контрастности от 00 до FF (по умолчанию 0x7F) +#define SSD1306_SET_CONTRAST 0x81 +// включить изображение +#define SSD1306_RAM_ON 0xA4 +// выключить изображение +#define SSD1306_RAM_OFF 0xA5 +// пиксель установленный в 1 будет светиться +#define SSD1306_INVERT_OFF 0xA6 +// пиксель установленный в 1 будет выключен +#define SSD1306_INVERT_ON 0xA7 +// выключить дисплей +#define SSD1306_DISPLAY_OFF 0xAE +// включить дисплей +#define SSD1306_DISPLAY_ON 0xAF +// пустая команда +#define SSD1306_NOP 0xE3 + +// включить прокрутку +#define SSD1306_SCROLL_ON 0x2F +// выключить прокрутку +#define SSD1306_SCROLL_OFF 0x2E +// настройка непрерывной горизонтальной прокрутки вправо. За данной командой должны быть отправлены 6 байт настроек +#define SSD1306_SCROLL_HORIZONTAL_RIGHT 0x26 +// настройка непрерывной горизонтальной прокрутки влево. За данной командой должны быть отправлены 6 байт настроек +#define SSD1306_SCROLL_HORIZONTAL_LEFT 0x27 +// настройка непрерывной диагональной прокрутки вправо. За данной командой должны быть отправлены 5 байт настроек +#define SSD1306_SCROLL_DIAGONAL_RIGHT 0x29 +// настройка непрерывной диагональной прокрутки влево. За данной командой должны быть отправлены 5 байт настроек +#define SSD1306_SCROLL_DIAGONAL_LEFT 0x2A +// настройка непрерывной вертикальной прокрутки. За данной командой должны быть отправлены 2 байта настроек +#define SSD1306_SCROLL_VERTICAL 0xA3 + +// установка младшей части адреса колонки на странице +// у данной команды младщие четыре бита должны быть изменены на младшие биты адреса +// комадна предназначена только для режима страничной адресации +#define SSD1306_ADDR_COLUMN_LBS 0x00 +// установка старшей части адреса колонки на странице +// у данной команды младщие четыре бита должны быть изменены на старшие биты адреса +// комадна предназначена только для режима страничной адресации +#define SSD1306_ADDR_COLUMN_MBS 0x10 +// выбор режима адресации +// за данной командой должен быть отправлен байт младшие биты которого определяют режим: +// 00-горизонтальная (с переходом на новую страницу (строку)) +// 01-вертикальная (с переходом на новую колонку) +// 10-страничная (только по выбранной странице) +#define SSD1306_ADDR_MODE 0x20 +// установка адреса колонки +// за данной командой должны быть отправлены два байта: начальный адрес и конечный адрес +// так можно определить размер экрана в колонках по ширине +#define SSD1306_ADDR_COLUMN 0x21 +// установка адреса страницы +// за данной командой должны быть отправлены два байта: начальный адрес и конечный адрес +// так можно определить размер экрана в строках по высоте +#define SSD1306_ADDR_PAGE 0x22 +// установка номера страницы которая будет выбрана для режима страничной адресации +// у данной команды младщие три бита должны быть изменены на номер страницы +// комадна предназначена только для режима страничной адресации +#define SSD1306_ADDR_ONE_PAGE 0xB0 + +// установить начальный адрес ОЗУ (смещение памяти) +// у данной команды младщие шесть битов должны быть изменены на начальный адрес ОЗУ +#define SSD1306_SET_START_LINE 0x40 +// установить режим строчной развёртки справа-налево +#define SSD1306_SET_REMAP_R_TO_L 0xA0 +// установить режим строчной развёртки слева-направо +#define SSD1306_SET_REMAP_L_TO_R 0xA1 +// установить multiplex ratio (количество используемых выводов COM для вывода данных на дисплей) +// за данной командой должен быть отправлен один байт с указанием количества COM выводов (от 15 до 63) +#define SSD1306_SET_MULTIPLEX_RATIO 0xA8 +// установить режим кадровой развёртки снизу-верх +#define SSD1306_SET_REMAP_D_TO_T 0xC0 +// установить режим кадровой развёртки сверху-вниз +#define SSD1306_SET_REMAP_T_TO_D 0xC8 +// установить смещение дисплея +// за данной командой должен быть отправлен один байт с указанием вертикального сдвига чтения выходов COM (от 0 до 63). +#define SSD1306_SET_DISPLAY_OFFSET 0xD3 +// установить тип аппаратной конфигурации COM выводов +// за данной командой должен быть отправлен один байт, у которого: +// четвёртый бит: 0-последовательная / 1-альтернативная +// пятый бит: 0-отключить COM Left/Right remap / 1-включить COM Left/Right remap +#define SSD1306_SET_COM_PINS 0xDA + +// установить частоту обновления дисплея +// за данной командой должен быть отправлен один байт, старшие четыре бита которого определяют частоту, а младшие делитель +#define SSD1306_SET_DISPLAY_CLOCK 0xD5 +// установить фазы DC/DC преобразователя +// за данной командой должен быть отправлен один байт, старшие четыре бита которого определяют период, а младшие период +#define SSD1306_SET_PRECHARGE_PERIOD 0xD9 +// установить VcomH (влияет на яркость) +// за данной командой должен быть отправлен один байт, старшие четыре бита которого определяют напряжение +// пример: 0000 - VcomH=0.65Vcc, 0010 - VcomH=0.77Vcc, 0011 - VcomH=0.83Vcc и т.д. +#define SSD1306_SET_VCOM_DESELECT 0xDB +// управление DC/DC преобразователем +// за данной командой должен быть отправлен один байт: +// 0x10 - отключить (VCC подается извне), 0x14 - запустить внутренний DC/DC +#define SSD1306_CHARGE_DCDC_PUMP 0x8D + +// положение бита DC в командном байте +// этот бит указывает что следующим байтом будет: 0-команда или 1-данные +#define SSD1306_SHIFT_DC 0x06 +// положение бита CO в командном байте +// этот бит указывает что после следующего байта (команды или данных) будет следовать (если будет): 0-байт данных или 1-новый командный байт +#define SSD1306_SHIFT_CO 0x07 +// (CO=0, DC=0) => 0x00 контрольный байт после которого следует байт команды +#define SSD1306_COMMAND (0 << SSD1306_SHIFT_CO) | (0 << SSD1306_SHIFT_DC) +// (CO=0, DC=1) => 0x40 контрольный байт после которого следует байт данных +#define SSD1306_DATA (0 << SSD1306_SHIFT_CO) | (1 << SSD1306_SHIFT_DC) + +#define OLED_TOP 250 +#define OLED_BOTTOM 251 +#define OLED_LEFT 252 +#define OLED_RIGHT 253 +#define OLED_CENTER 254 +#define OLED_THIS 255 + +#define IMG_RAM 0 +#define IMG_ROM 1 + +#define TXT_CP866 0 +#define TXT_UTF8 1 +#define TXT_WIN1251 2 + +#define BLACK 0 +#define WHITE 1 +#define INVERSE 2 + +class TroykaOLED { +public: + TroykaOLED (I2C *i2c,uint8_t address = SSD1306_ADDRESS, uint8_t width = 128, uint8_t heigth = 64); + void begin();// = &Wire); + void update(); + void autoUpdate(bool stateAutoUpdate = true); + void setBrigtness(uint8_t brigtness); + void clearDisplay(); + void invertDisplay(bool stateInvert = true); + void invertText(bool stateInvertText = true); + void bgText(bool stateTextBG = true); + void bgImage(bool stateImageBG = true); + void setFont(const uint8_t* fontData); + void setCoding(uint8_t codingName = false); + void setCursor(int numX, int numY); + void print(char* s, int x = OLED_THIS, int y = OLED_THIS); + void print(const char* s, int x = OLED_THIS, int y = OLED_THIS); + //void print(String s , int x = OLED_THIS, int y = OLED_THIS); + void print(int8_t n, int x = OLED_THIS, int y = OLED_THIS, uint8_t base = DEC); + void print(uint8_t n, int x = OLED_THIS, int y = OLED_THIS, uint8_t base = DEC); + void print(int16_t n, int x = OLED_THIS, int y = OLED_THIS, uint8_t base = DEC); + void print(uint16_t n, int x = OLED_THIS, int y = OLED_THIS, uint8_t base = DEC); + void print(int32_t n, int x = OLED_THIS, int y = OLED_THIS, uint8_t base = DEC); + void print(uint32_t n, int x = OLED_THIS, int y = OLED_THIS, uint8_t base = DEC); + void print(double n, int x = OLED_THIS, int y = OLED_THIS, uint8_t digits = 2); + void drawPixel(int x, int y, uint8_t color = WHITE); + void drawLine(int x1, int y1, int x2, int y2, uint8_t color = WHITE); + void drawLine(int x2, int y2, uint8_t color = WHITE); + void drawRect(int x1, int y1, int x2, int y2, bool fill = false, uint8_t color = WHITE); + void drawCircle(int x, int y, uint8_t r, bool fill = false, uint8_t color = WHITE); + void drawImage(const uint8_t* image, int x = OLED_THIS, int y = OLED_THIS, uint8_t mem = IMG_ROM); + bool getPixel(int x, int y); + uint8_t getWidth() { return _width; } + uint8_t getHeigth() { return _height; } + uint8_t getFontWidth() { return _font.width; } + uint8_t getFontHeight() { return _font.height; } + uint8_t getImageWidth(const uint8_t* image, uint8_t mem = IMG_ROM); + uint8_t getImageHeight(const uint8_t* image, uint8_t mem = IMG_ROM); + +private: + //TwoWire* _wire; + I2C *_wire; + uint8_t _i2cAddress; + uint8_t _width; + uint8_t _height; + uint8_t _numX; + uint8_t _numY; + uint8_t _codingName; + bool _stateInvert; + bool _stateAutoUpdate; + bool _stateImageBG; + uint8_t *_bufferDisplay; + struct { + const uint8_t* fontData; + uint8_t width;// = 0; + uint8_t height;// = 0; + uint8_t firstSymbol;// = 0; + uint8_t sumSymbol;// = 0; + uint8_t startSpace[3]; + uint8_t sumSpace[3]; + bool invert;// = false; + bool background;// = true; + bool setFont;// = false; + } _font; + + bool bitRead(uint8_t data, uint8_t bit);//my + void _drawPixel(int x, int y, uint8_t color = WHITE); + void _drawLine(int x1, int y1, int x2, int y2, uint8_t color = WHITE); + void _print(char*, int x, int y); + char _itoa(uint8_t num); + char* _codingCP866(char* data); + void _sendCommand(uint8_t command); + void _sendData(uint8_t* data, uint8_t sum); + void _sendBuffer(); +}; + +#endif // TROYKA_OLED_H
diff -r 000000000000 -r cd4a2add97a0 defaultFonts.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/defaultFonts.h Tue Jul 23 12:32:26 2019 +0000 @@ -0,0 +1,658 @@ +// ширина символов, высота символов, код первого символа и количество символов +const uint8_t font6x8[] = { + 0x06, 0x08, 0x20, 0x5F, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // пробел + 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, // ! + 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, // " + 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, // # + 0x00, 0x24, 0x2A, 0x7F, 0x2A, 0x12, // $ + 0x00, 0x23, 0x13, 0x08, 0x64, 0x62, // % + 0x00, 0x36, 0x49, 0x55, 0x22, 0x50, // & + 0x00, 0x00, 0x05, 0x03, 0x00, 0x00, // ' + 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, // ( + 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, // ) + 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, // * + 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, // + + 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00, // , + 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, // - + 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, // . + 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, // / + + 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0 + 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, // 1 + 0x00, 0x42, 0x61, 0x51, 0x49, 0x46, // 2 + 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31, // 3 + 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, // 4 + 0x00, 0x27, 0x45, 0x45, 0x45, 0x39, // 5 + 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, // 6 + 0x00, 0x01, 0x71, 0x09, 0x05, 0x03, // 7 + 0x00, 0x36, 0x49, 0x49, 0x49, 0x36, // 8 + 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, // 9 + 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, // : + 0x00, 0x00, 0x56, 0x36, 0x00, 0x00, // ; + 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, // < + 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, // = + 0x00, 0x00, 0x41, 0x22, 0x14, 0x08, // > + 0x00, 0x02, 0x01, 0x51, 0x09, 0x06, // ? + + 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E, // @ + 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, // A + 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, // B + 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, // C + 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C, // D + 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, // E + 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, // F + 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A, // G + 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, // H + 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00, // I + 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, // J + 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, // K + 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, // L + 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F, // M + 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, // N + 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, // O + + 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, // P + 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, // Q + 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, // R + 0x00, 0x46, 0x49, 0x49, 0x49, 0x31, // S + 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, // T + 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, // U + 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, // V + 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, // W + 0x00, 0x63, 0x14, 0x08, 0x14, 0x63, // X + 0x00, 0x07, 0x08, 0x70, 0x08, 0x07, // Y + 0x00, 0x61, 0x51, 0x49, 0x45, 0x43, // Z + 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00, // [ + 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, // обратный слеш + 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00, // ] + 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, // ^ + 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, // _ + + 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, // ` + 0x00, 0x20, 0x54, 0x54, 0x54, 0x78, // a + 0x00, 0x7F, 0x28, 0x44, 0x44, 0x38, // b + 0x00, 0x38, 0x44, 0x44, 0x44, 0x20, // c + 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F, // d + 0x00, 0x38, 0x54, 0x54, 0x54, 0x18, // e + 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02, // f + 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, // g + 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, // h + 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00, // i + 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00, // j + 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, // k + 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, // l + 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, // m + 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78, // n + 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, // o + + 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18, // p + 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC, // q + 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08, // r + 0x00, 0x48, 0x54, 0x54, 0x54, 0x20, // s + 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20, // t + 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C, // u + 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, // v + 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, // w + 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, // x + 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C, // y + 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, // z + 0x00, 0x00, 0x10, 0x7C, 0x82, 0x00, // { + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, // | + 0x00, 0x00, 0x82, 0x7C, 0x10, 0x00, // } + 0x00, 0x00, 0x06, 0x09, 0x09, 0x06, // ~ + 0 +}; + +// ширина символов, высота символов, код первого символа и количество символов +const uint8_t fontRus6x8[] = { + 0x06, 0x08, 0x20, 0xB0, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // пробел + 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, // ! + 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, // " + 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, // # + 0x00, 0x24, 0x2A, 0x7F, 0x2A, 0x12, // $ + 0x00, 0x23, 0x13, 0x08, 0x64, 0x62, // % + 0x00, 0x36, 0x49, 0x55, 0x22, 0x50, // & + 0x00, 0x00, 0x05, 0x03, 0x00, 0x00, // ' + 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, // ( + 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, // ) + 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, // * + 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, // + + 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00, // , + 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, // - + 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, // . + 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, // / + + 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0 + 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, // 1 + 0x00, 0x42, 0x61, 0x51, 0x49, 0x46, // 2 + 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31, // 3 + 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, // 4 + 0x00, 0x27, 0x45, 0x45, 0x45, 0x39, // 5 + 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, // 6 + 0x00, 0x01, 0x71, 0x09, 0x05, 0x03, // 7 + 0x00, 0x36, 0x49, 0x49, 0x49, 0x36, // 8 + 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, // 9 + 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, // : + 0x00, 0x00, 0x56, 0x36, 0x00, 0x00, // ; + 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, // < + 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, // = + 0x00, 0x00, 0x41, 0x22, 0x14, 0x08, // > + 0x00, 0x02, 0x01, 0x51, 0x09, 0x06, // ? + + 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E, // @ + 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, // A + 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, // B + 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, // C + 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C, // D + 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, // E + 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, // F + 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A, // G + 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, // H + 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00, // I + 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, // J + 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, // K + 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, // L + 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F, // M + 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, // N + 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, // O + + 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, // P + 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, // Q + 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, // R + 0x00, 0x46, 0x49, 0x49, 0x49, 0x31, // S + 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, // T + 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, // U + 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, // V + 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, // W + 0x00, 0x63, 0x14, 0x08, 0x14, 0x63, // X + 0x00, 0x07, 0x08, 0x70, 0x08, 0x07, // Y + 0x00, 0x61, 0x51, 0x49, 0x45, 0x43, // Z + 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00, // [ + 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, // обратный слеш + 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00, // ] + 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, // ^ + 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, // _ + + 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, // ` + 0x00, 0x20, 0x54, 0x54, 0x78, 0x40, // a + 0x00, 0x7F, 0x28, 0x44, 0x44, 0x38, // b + 0x00, 0x38, 0x44, 0x44, 0x44, 0x20, // c + 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F, // d + 0x00, 0x38, 0x54, 0x54, 0x54, 0x18, // e + 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02, // f + 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, // g + 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, // h + 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00, // i + 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00, // j + 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, // k + 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, // l + 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, // m + 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78, // n + 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, // o + + 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18, // p + 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC, // q + 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08, // r + 0x00, 0x48, 0x54, 0x54, 0x54, 0x20, // s + 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20, // t + 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C, // u + 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, // v + 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, // w + 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, // x + 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C, // y + 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, // z + 0x00, 0x00, 0x10, 0x7C, 0x82, 0x00, // { + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, // | + 0x00, 0x00, 0x82, 0x7C, 0x10, 0x00, // } + 0x00, 0x10, 0x08, 0x10, 0x20, 0x10, // ~ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ⌂ + + 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, // А + 0x00, 0x7F, 0x49, 0x49, 0x49, 0x31, // Б + 0x00, 0x7F, 0x45, 0x45, 0x45, 0x3A, // В + 0x00, 0x7F, 0x01, 0x01, 0x01, 0x03, // Г + 0x00, 0x60, 0x3F, 0x21, 0x3F, 0x60, // Д + 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, // Е + 0x00, 0x73, 0x0C, 0x7F, 0x0C, 0x73, // Ж + 0x00, 0x22, 0x41, 0x49, 0x49, 0x36, // З + 0x00, 0x7F, 0x10, 0x08, 0x04, 0x7F, // И + 0x00, 0x7E, 0x20, 0x11, 0x08, 0x7E, // Й + 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, // К + 0x00, 0x40, 0x3F, 0x01, 0x01, 0x7F, // Л + 0x00, 0x7F, 0x06, 0x08, 0x06, 0x7F, // М + 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, // Н + 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, // О + 0x00, 0x7F, 0x01, 0x01, 0x01, 0x7F, // П + + 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, // Р + 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, // С + 0x00, 0x03, 0x01, 0x7F, 0x01, 0x03, // Т + 0x00, 0x61, 0x26, 0x18, 0x06, 0x01, // У + 0x00, 0x1C, 0x22, 0x7F, 0x22, 0x1C, // Ф + 0x00, 0x63, 0x14, 0x08, 0x14, 0x63, // Х + 0x00, 0x3F, 0x20, 0x20, 0x3F, 0x60, // Ц + 0x00, 0x07, 0x08, 0x08, 0x08, 0x7F, // Ч + 0x00, 0x7F, 0x40, 0x7F, 0x40, 0x7F, // Ш + 0x00, 0x3F, 0x20, 0x3F, 0x20, 0x7F, // Щ + 0x00, 0x01, 0x7F, 0x48, 0x48, 0x30, // Ъ + 0x00, 0x7F, 0x48, 0x78, 0x00, 0x7F, // Ы + 0x00, 0x7F, 0x48, 0x48, 0x30, 0x00, // Ь + 0x00, 0x41, 0x49, 0x49, 0x2A, 0x1C, // Э + 0x00, 0x7F, 0x10, 0x3E, 0x41, 0x3E, // Ю + 0x00, 0x66, 0x19, 0x09, 0x09, 0x7F, // Я + + 0x00, 0x20, 0x54, 0x54, 0x78, 0x40, // а + 0x00, 0x3E, 0x49, 0x45, 0x45, 0x38, // б + 0x00, 0x7C, 0x54, 0x54, 0x58, 0x20, // в + 0x00, 0x7C, 0x04, 0x04, 0x0C, 0x00, // г + 0x00, 0x38, 0x45, 0x45, 0x49, 0x3E, // д + 0x00, 0x38, 0x54, 0x54, 0x54, 0x18, // е + 0x00, 0x4C, 0x30, 0x7C, 0x30, 0x4C, // ж + 0x00, 0x28, 0x44, 0x54, 0x28, 0x00, // з + 0x00, 0x7C, 0x20, 0x10, 0x7C, 0x00, // и + 0x00, 0x7C, 0x21, 0x11, 0x7C, 0x00, // й + 0x00, 0x7C, 0x10, 0x28, 0x44, 0x00, // к + 0x00, 0x40, 0x3C, 0x04, 0x04, 0x7C, // л + 0x00, 0x7C, 0x08, 0x10, 0x08, 0x7C, // м + 0x00, 0x7C, 0x10, 0x10, 0x7C, 0x00, // н + 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, // о + 0x00, 0x7C, 0x04, 0x04, 0x7C, 0x00, // п + + 0x00, 0xFC, 0x28, 0x44, 0x44, 0x38, // р + 0x00, 0x38, 0x44, 0x44, 0x44, 0x28, // с + 0x00, 0x04, 0x04, 0x7C, 0x04, 0x04, // т + 0x00, 0x4C, 0x50, 0x50, 0x50, 0x3C, // у + 0x00, 0x38, 0x44, 0xFE, 0x44, 0x38, // ф + 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, // х + 0x00, 0x7C, 0x40, 0x40, 0x7C, 0xC0, // ц + 0x00, 0x1C, 0x10, 0x10, 0x7C, 0x00, // ч + 0x00, 0x7C, 0x40, 0x7C, 0x40, 0x7C, // ш + 0x00, 0x7C, 0x40, 0x7C, 0x40, 0xFC, // щ + 0x00, 0x04, 0x7C, 0x50, 0x70, 0x00, // ъ + 0x00, 0x7C, 0x50, 0x70, 0x00, 0x7C, // ы + 0x00, 0x00, 0x7C, 0x50, 0x70, 0x00, // ь + 0x00, 0x28, 0x44, 0x54, 0x38, 0x00, // э + 0x00, 0x7C, 0x10, 0x38, 0x44, 0x38, // ю + 0x00, 0x08, 0x54, 0x34, 0x14, 0x7C, // я + + 0x00, 0x7E, 0x4B, 0x4A, 0x4B, 0x42, // Ё + 0x00, 0x38, 0x55, 0x54, 0x55, 0x18, // ё + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Є + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // є + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Ї + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ї + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Ў + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ў + 0x00, 0x00, 0x06, 0x09, 0x09, 0x06, // ° + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ∙ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // · + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // √ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // № + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ¤ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ■ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // + 0x01, 0xAF, 0x30 +}; + +// ширина символов, высота символов, код первого символа и количество символов +const uint8_t font12x10[] = { + 0x0C,0x10,0x20,0x5F, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // пробел + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, // ! + 0x00, 0x00, 0x00, 0x16, 0x0E, 0x00, 0x00, 0x16, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // " + 0x00, 0x00, 0x60, 0xE0, 0xF8, 0x7E, 0x6E, 0xE0, 0xF8, 0x7E, 0x6E, 0x00, 0x00, 0x76, 0x7E, 0x1F, 0x07, 0x76, 0x7E, 0x1F, 0x07, 0x06, 0x00, 0x00, // # + 0x00, 0x78, 0xFC, 0xCE, 0x86, 0xFF, 0xFF, 0x86, 0x9E, 0x1C, 0x18, 0x00, 0x00, 0x18, 0x38, 0x79, 0x61, 0xFF, 0xFF, 0x61, 0x73, 0x3F, 0x1E, 0x00, // $ + 0x00, 0x3C, 0x7E, 0x66, 0x7E, 0xBC, 0xE0, 0x78, 0x1E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x60, 0x78, 0x1E, 0x07, 0x3D, 0x7E, 0x66, 0x7E, 0x3C, 0x00, // % + 0x00, 0x00, 0x00, 0x80, 0x80, 0xFC, 0xFE, 0xE6, 0xE6, 0x7E, 0x3C, 0x00, 0x00, 0x1E, 0x3F, 0x73, 0x61, 0x61, 0x71, 0x7F, 0x3F, 0x7C, 0x6C, 0x00, // & + 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ' + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC, 0x0E, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x3F, 0x70, 0xC0, 0x00, 0x00, 0x00, 0x00, // ( + 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0xFC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x70, 0x3F, 0x0F, 0x00, 0x00, 0x00, 0x00, // ) + 0x00, 0x00, 0x00, 0x08, 0x78, 0x3C, 0x3C, 0x78, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // * + 0x00, 0x00, 0x80, 0x80, 0x80, 0xF0, 0xF0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x0F, 0x0F, 0x01, 0x01, 0x01, 0x00, 0x00, // + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, // , + 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, // - + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, // . + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x78, 0x1E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x60, 0x78, 0x1E, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // / + + 0x00, 0xF8, 0xFC, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, // 0 + 0x00, 0x00, 0x00, 0x30, 0x38, 0x1C, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, // 1 + 0x00, 0x18, 0x1C, 0x1E, 0x06, 0x06, 0x06, 0x86, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x78, 0x7C, 0x7E, 0x66, 0x67, 0x63, 0x63, 0x61, 0x70, 0x70, 0x00, // 2 + 0x00, 0x0E, 0x0E, 0x06, 0x06, 0xC6, 0xE6, 0xF6, 0xFE, 0x9E, 0x0E, 0x00, 0x00, 0x18, 0x38, 0x78, 0x60, 0x60, 0x60, 0x60, 0x71, 0x3F, 0x1F, 0x00, // 3 + 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x66, 0x7F, 0x7F, 0x66, 0x00, // 4 + 0x00, 0xFE, 0xFE, 0xE6, 0x66, 0x66, 0x66, 0x66, 0xE6, 0xCE, 0x8E, 0x00, 0x00, 0x18, 0x38, 0x78, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, // 5 + 0x00, 0xF8, 0xFC, 0xCE, 0xC6, 0xC6, 0xC6, 0xC6, 0xDE, 0x9C, 0x18, 0x00, 0x00, 0x1F, 0x3F, 0x71, 0x60, 0x60, 0x60, 0x60, 0x71, 0x3F, 0x1F, 0x00, // 6 + 0x00, 0x1E, 0x1E, 0x06, 0x06, 0x06, 0x06, 0x86, 0xE6, 0x7E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x78, 0x1E, 0x07, 0x01, 0x00, 0x00, 0x00, // 7 + 0x00, 0x78, 0xFC, 0xCE, 0x86, 0x86, 0x86, 0x86, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x1E, 0x3F, 0x73, 0x61, 0x61, 0x61, 0x61, 0x73, 0x3F, 0x1E, 0x00, // 8 + 0x00, 0xF8, 0xFC, 0x8E, 0x06, 0x06, 0x06, 0x06, 0x8E, 0xFC, 0xF8, 0x00, 0x00, 0x18, 0x39, 0x7B, 0x63, 0x63, 0x63, 0x63, 0x73, 0x3F, 0x1F, 0x00, // 9 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, // : + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, // ; + 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xE0, 0x60, 0x70, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07, 0x06, 0x0E, 0x0C, 0x0C, 0x00, 0x00, // < + 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, // = + 0x00, 0x00, 0x30, 0x30, 0x70, 0x60, 0xE0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x0E, 0x06, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, // > + 0x00, 0x18, 0x1C, 0x1E, 0x06, 0x06, 0x86, 0x86, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x6F, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, // ? + + 0x00, 0xF8, 0xFC, 0x0E, 0xE6, 0xF6, 0x36, 0xF6, 0xF6, 0x0E, 0xFC, 0xF8, 0x00, 0x1F, 0x3F, 0x70, 0x67, 0x6F, 0x6C, 0x6F, 0x67, 0x6C, 0x2F, 0x07, //@ + 0x00, 0x00, 0xF0, 0xFC, 0x1E, 0x06, 0x06, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x03, 0x03, 0x63, 0x7F, 0x7F, 0x60, 0x00, //A + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x86, 0x86, 0x86, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x61, 0x61, 0x61, 0x73, 0x3F, 0x1E, 0x00, //B + 0x00, 0xF8, 0xFC, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x1C, 0x18, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x60, 0x78, 0x38, 0x18, 0x00, //C + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, //D + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x86, 0x86, 0xC6, 0xC6, 0x0E, 0x0E, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x61, 0x61, 0x63, 0x63, 0x70, 0x70, 0x00, //E + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x86, 0xC6, 0xC6, 0x06, 0x0E, 0x0E, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, //F + 0x00, 0xF8, 0xFC, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x1C, 0x18, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x63, 0x63, 0x73, 0x3F, 0x1F, 0x00, //G + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x80, 0x80, 0x86, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x01, 0x01, 0x61, 0x7F, 0x7F, 0x60, 0x00, //H + 0x00, 0x00, 0x00, 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, 0x00, //I + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x18, 0x38, 0x78, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, 0x00, //J + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x80, 0xC0, 0xF6, 0x7E, 0x1E, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x01, 0x03, 0x6F, 0x7E, 0x78, 0x60, 0x00, //K + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, 0x70, 0x00, //L + 0x00, 0x06, 0xFE, 0xFE, 0x78, 0xE0, 0xE0, 0x78, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x01, 0x01, 0x60, 0x7F, 0x7F, 0x60, 0x00, //M + 0x00, 0x06, 0xFE, 0xFE, 0x78, 0xE0, 0x80, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x01, 0x07, 0x1E, 0x7F, 0x7F, 0x60, 0x00, //N + 0x00, 0xF8, 0xFC, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, //O + + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x8E, 0xFC, 0xF8, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, // P + 0x00, 0xF8, 0xFC, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x6C, 0x7C, 0x38, 0x7F, 0x6F, 0x00, // Q + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x8E, 0xFC, 0xF8, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x03, 0x03, 0x6F, 0x7F, 0x79, 0x60, 0x00, // R + 0x00, 0x78, 0xFC, 0xCE, 0x86, 0x86, 0x86, 0x86, 0x9E, 0x1C, 0x18, 0x00, 0x00, 0x18, 0x38, 0x79, 0x61, 0x61, 0x61, 0x61, 0x73, 0x3F, 0x1E, 0x00, // S + 0x00, 0x0E, 0x0E, 0x06, 0x06, 0xFE, 0xFE, 0x06, 0x06, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, 0x00, // T + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, 0x00, // U + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x03, 0x0F, 0x3E, 0x78, 0x78, 0x3E, 0x0F, 0x03, 0x00, 0x00, // V + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x80, 0x80, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x7F, 0x78, 0x1F, 0x1F, 0x78, 0x7F, 0x1F, 0x00, 0x00, // W + 0x00, 0x06, 0x1E, 0x7E, 0xF6, 0xC0, 0xC0, 0xF6, 0x7E, 0x1E, 0x06, 0x00, 0x00, 0x60, 0x78, 0x7E, 0x6F, 0x03, 0x03, 0x6F, 0x7E, 0x78, 0x60, 0x00, // X + 0x00, 0x06, 0x7E, 0xFE, 0xC6, 0x00, 0x00, 0xC6, 0xFE, 0x7E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x63, 0x7F, 0x7F, 0x63, 0x01, 0x00, 0x00, 0x00, // Y + 0x00, 0x0E, 0x0E, 0x06, 0x06, 0x86, 0xC6, 0xE6, 0x76, 0x3E, 0x1E, 0x00, 0x00, 0x78, 0x7C, 0x6E, 0x67, 0x63, 0x61, 0x60, 0x60, 0x70, 0x70, 0x00, // Z + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, // [ + 0x00, 0x00, 0x06, 0x1E, 0x78, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1E, 0x78, 0x60, 0x00, 0x00, // обратный слеш + 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, // ] + 0x00, 0x00, 0x00, 0x30, 0x3C, 0x1E, 0x1E, 0x3C, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ^ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, // _ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ` + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x1C, 0x3E, 0x77, 0x63, 0x63, 0x63, 0x33, 0x7F, 0x7F, 0x60, 0x00, // a + 0x00, 0x06, 0xFE, 0xFE, 0x66, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x30, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, // b + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x30, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x60, 0x78, 0x38, 0x18, 0x00, // c + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x66, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x30, 0x7F, 0x7F, 0x60, 0x00, // d + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x1F, 0x3F, 0x76, 0x66, 0x66, 0x66, 0x66, 0x76, 0x37, 0x17, 0x00, // e + 0x00, 0x00, 0x00, 0x60, 0xFC, 0xFE, 0x66, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // f + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x60, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x33, 0x77, 0xEE, 0xCC, 0xCC, 0xCC, 0xEE, 0x7F, 0x3F, 0x00, 0x00, // g + 0x00, 0x06, 0xFE, 0xFE, 0x66, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, // h + 0x00, 0x00, 0x00, 0x00, 0x30, 0xF6, 0xF6, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, 0x00, // i + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xF6, 0xF6, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, // j + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x80, 0xF0, 0xF0, 0x70, 0x30, 0x30, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x07, 0x0F, 0x7C, 0x78, 0x70, 0x60, 0x00, // k + 0x00, 0x00, 0x00, 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, 0x00, // l + 0x30, 0xF0, 0xE0, 0x30, 0x30, 0xF0, 0xE0, 0x30, 0x30, 0xF0, 0xE0, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x7F, 0x7F, 0x00, 0x60, 0x7F, 0x7F, 0x60, // m + 0x00, 0x30, 0xF0, 0xF0, 0x60, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, // n + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, // o + + 0x00, 0x30, 0xF0, 0xF0, 0x60, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xD8, 0x30, 0x30, 0x30, 0x38, 0x1F, 0x0F, 0x00, // p + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x60, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x0F, 0x1F, 0x38, 0x30, 0x30, 0x30, 0xD8, 0xFF, 0xFF, 0xC0, 0x00, // q + 0x00, 0x00, 0x30, 0xF0, 0xF0, 0x60, 0x30, 0x30, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // r + 0x00, 0xE0, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x70, 0x70, 0x60, 0x00, 0x00, 0x19, 0x3B, 0x7B, 0x63, 0x63, 0x63, 0x63, 0x77, 0x3E, 0x1C, 0x00, // s + 0x00, 0x00, 0x00, 0x30, 0xFE, 0xFE, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7F, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, // t + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x30, 0x7F, 0x7F, 0x60, 0x00, // u + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1F, 0x78, 0x78, 0x1F, 0x07, 0x00, 0x00, 0x00, // v + 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x03, 0x1F, 0x7C, 0x70, 0x1E, 0x1E, 0x70, 0x7C, 0x1F, 0x03, 0x00, // w + 0x00, 0x00, 0x30, 0x70, 0xF0, 0x80, 0x80, 0xF0, 0x70, 0x30, 0x00, 0x00, 0x00, 0x00, 0x60, 0x70, 0x7D, 0x0F, 0x0F, 0x7D, 0x70, 0x60, 0x00, 0x00, // x + 0x00, 0x00, 0x30, 0xF0, 0xC0, 0x00, 0x00, 0xC0, 0xF0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x73, 0x3F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, // y + 0x00, 0x00, 0x70, 0x70, 0x30, 0x30, 0xB0, 0xF0, 0xF0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x78, 0x7C, 0x6E, 0x67, 0x63, 0x61, 0x70, 0x70, 0x00, 0x00, // z + 0x00, 0x00, 0x80, 0xC0, 0xFC, 0x7E, 0x07, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x3F, 0x7E, 0xE0, 0xC0, 0xC0, 0x00, 0x00, 0x00, // { + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, // | + 0x00, 0x00, 0x00, 0x03, 0x03, 0x07, 0x7E, 0xFC, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xE0, 0x7E, 0x3F, 0x03, 0x01, 0x00, 0x00, // } + 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, // ~ + 0 +}; + +// ширина символов, высота символов, код первого символа и количество символов +const uint8_t fontRus12x10[] = { + 0x0C, 0x10, 0x20,0xB0, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // пробел + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, // ! + 0x00, 0x00, 0x00, 0x16, 0x0E, 0x00, 0x00, 0x16, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // " + 0x00, 0x00, 0x60, 0xE0, 0xF8, 0x7E, 0x6E, 0xE0, 0xF8, 0x7E, 0x6E, 0x00, 0x00, 0x76, 0x7E, 0x1F, 0x07, 0x76, 0x7E, 0x1F, 0x07, 0x06, 0x00, 0x00, // # + 0x00, 0x78, 0xFC, 0xCE, 0x86, 0xFF, 0xFF, 0x86, 0x9E, 0x1C, 0x18, 0x00, 0x00, 0x18, 0x38, 0x79, 0x61, 0xFF, 0xFF, 0x61, 0x73, 0x3F, 0x1E, 0x00, // $ + 0x00, 0x3C, 0x7E, 0x66, 0x7E, 0xBC, 0xE0, 0x78, 0x1E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x60, 0x78, 0x1E, 0x07, 0x3D, 0x7E, 0x66, 0x7E, 0x3C, 0x00, // % + 0x00, 0x00, 0x00, 0x80, 0x80, 0xFC, 0xFE, 0xE6, 0xE6, 0x7E, 0x3C, 0x00, 0x00, 0x1E, 0x3F, 0x73, 0x61, 0x61, 0x71, 0x7F, 0x3F, 0x7C, 0x6C, 0x00, // & + 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ' + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC, 0x0E, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x3F, 0x70, 0xC0, 0x00, 0x00, 0x00, 0x00, // ( + 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0xFC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x70, 0x3F, 0x0F, 0x00, 0x00, 0x00, 0x00, // ) + 0x00, 0x00, 0x00, 0x08, 0x78, 0x3C, 0x3C, 0x78, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // * + 0x00, 0x00, 0x80, 0x80, 0x80, 0xF0, 0xF0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x0F, 0x0F, 0x01, 0x01, 0x01, 0x00, 0x00, // + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, // , + 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, // - + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, // . + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x78, 0x1E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x60, 0x78, 0x1E, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // / + + 0x00, 0xF8, 0xFC, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, // 0 + 0x00, 0x00, 0x00, 0x30, 0x38, 0x1C, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, // 1 + 0x00, 0x18, 0x1C, 0x1E, 0x06, 0x06, 0x06, 0x86, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x78, 0x7C, 0x7E, 0x66, 0x67, 0x63, 0x63, 0x61, 0x70, 0x70, 0x00, // 2 + 0x00, 0x0E, 0x0E, 0x06, 0x06, 0xC6, 0xE6, 0xF6, 0xFE, 0x9E, 0x0E, 0x00, 0x00, 0x18, 0x38, 0x78, 0x60, 0x60, 0x60, 0x60, 0x71, 0x3F, 0x1F, 0x00, // 3 + 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x66, 0x7F, 0x7F, 0x66, 0x00, // 4 + 0x00, 0xFE, 0xFE, 0xE6, 0x66, 0x66, 0x66, 0x66, 0xE6, 0xCE, 0x8E, 0x00, 0x00, 0x18, 0x38, 0x78, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, // 5 + 0x00, 0xF8, 0xFC, 0xCE, 0xC6, 0xC6, 0xC6, 0xC6, 0xDE, 0x9C, 0x18, 0x00, 0x00, 0x1F, 0x3F, 0x71, 0x60, 0x60, 0x60, 0x60, 0x71, 0x3F, 0x1F, 0x00, // 6 + 0x00, 0x1E, 0x1E, 0x06, 0x06, 0x06, 0x06, 0x86, 0xE6, 0x7E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x78, 0x1E, 0x07, 0x01, 0x00, 0x00, 0x00, // 7 + 0x00, 0x78, 0xFC, 0xCE, 0x86, 0x86, 0x86, 0x86, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x1E, 0x3F, 0x73, 0x61, 0x61, 0x61, 0x61, 0x73, 0x3F, 0x1E, 0x00, // 8 + 0x00, 0xF8, 0xFC, 0x8E, 0x06, 0x06, 0x06, 0x06, 0x8E, 0xFC, 0xF8, 0x00, 0x00, 0x18, 0x39, 0x7B, 0x63, 0x63, 0x63, 0x63, 0x73, 0x3F, 0x1F, 0x00, // 9 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, // : + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, // ; + 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xE0, 0x60, 0x70, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07, 0x06, 0x0E, 0x0C, 0x0C, 0x00, 0x00, // < + 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, // = + 0x00, 0x00, 0x30, 0x30, 0x70, 0x60, 0xE0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x0E, 0x06, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, // > + 0x00, 0x18, 0x1C, 0x1E, 0x06, 0x06, 0x86, 0x86, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x6F, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, // ? + + 0x00, 0xF8, 0xFC, 0x0E, 0xE6, 0xF6, 0x36, 0xF6, 0xF6, 0x0E, 0xFC, 0xF8, 0x00, 0x1F, 0x3F, 0x70, 0x67, 0x6F, 0x6C, 0x6F, 0x67, 0x6C, 0x2F, 0x07, // @ + 0x00, 0x00, 0xF0, 0xFC, 0x1E, 0x06, 0x06, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x03, 0x03, 0x63, 0x7F, 0x7F, 0x60, 0x00, // A + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x86, 0x86, 0x86, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x61, 0x61, 0x61, 0x73, 0x3F, 0x1E, 0x00, // B + 0x00, 0xF8, 0xFC, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x1C, 0x18, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x60, 0x78, 0x38, 0x18, 0x00, // C + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, // D + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x86, 0x86, 0xC6, 0xC6, 0x0E, 0x0E, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x61, 0x61, 0x63, 0x63, 0x70, 0x70, 0x00, // E + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x86, 0xC6, 0xC6, 0x06, 0x0E, 0x0E, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, // F + 0x00, 0xF8, 0xFC, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x1C, 0x18, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x63, 0x63, 0x73, 0x3F, 0x1F, 0x00, // G + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x80, 0x80, 0x86, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x01, 0x01, 0x61, 0x7F, 0x7F, 0x60, 0x00, // H + 0x00, 0x00, 0x00, 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, 0x00, // I + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x18, 0x38, 0x78, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, 0x00, // J + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x80, 0xC0, 0xF6, 0x7E, 0x1E, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x01, 0x03, 0x6F, 0x7E, 0x78, 0x60, 0x00, // K + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, 0x70, 0x00, // L + 0x00, 0x06, 0xFE, 0xFE, 0x78, 0xE0, 0xE0, 0x78, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x01, 0x01, 0x60, 0x7F, 0x7F, 0x60, 0x00, // M + 0x00, 0x06, 0xFE, 0xFE, 0x78, 0xE0, 0x80, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x01, 0x07, 0x1E, 0x7F, 0x7F, 0x60, 0x00, // N + 0x00, 0xF8, 0xFC, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, // O + + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x8E, 0xFC, 0xF8, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, // P + 0x00, 0xF8, 0xFC, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x6C, 0x7C, 0x38, 0x7F, 0x6F, 0x00, // Q + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x8E, 0xFC, 0xF8, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x03, 0x03, 0x6F, 0x7F, 0x79, 0x60, 0x00, // R + 0x00, 0x78, 0xFC, 0xCE, 0x86, 0x86, 0x86, 0x86, 0x9E, 0x1C, 0x18, 0x00, 0x00, 0x18, 0x38, 0x79, 0x61, 0x61, 0x61, 0x61, 0x73, 0x3F, 0x1E, 0x00, // S + 0x00, 0x0E, 0x0E, 0x06, 0x06, 0xFE, 0xFE, 0x06, 0x06, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, 0x00, // T + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, 0x00, // U + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x03, 0x0F, 0x3E, 0x78, 0x78, 0x3E, 0x0F, 0x03, 0x00, 0x00, // V + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x80, 0x80, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x7F, 0x78, 0x1F, 0x1F, 0x78, 0x7F, 0x1F, 0x00, 0x00, // W + 0x00, 0x06, 0x1E, 0x7E, 0xF6, 0xC0, 0xC0, 0xF6, 0x7E, 0x1E, 0x06, 0x00, 0x00, 0x60, 0x78, 0x7E, 0x6F, 0x03, 0x03, 0x6F, 0x7E, 0x78, 0x60, 0x00, // X + 0x00, 0x06, 0x7E, 0xFE, 0xC6, 0x00, 0x00, 0xC6, 0xFE, 0x7E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x63, 0x7F, 0x7F, 0x63, 0x01, 0x00, 0x00, 0x00, // Y + 0x00, 0x0E, 0x0E, 0x06, 0x06, 0x86, 0xC6, 0xE6, 0x76, 0x3E, 0x1E, 0x00, 0x00, 0x78, 0x7C, 0x6E, 0x67, 0x63, 0x61, 0x60, 0x60, 0x70, 0x70, 0x00, // Z + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, // [ + 0x00, 0x00, 0x06, 0x1E, 0x78, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1E, 0x78, 0x60, 0x00, 0x00, // обратный слеш + 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, // ] + 0x00, 0x00, 0x00, 0x30, 0x3C, 0x1E, 0x1E, 0x3C, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ^ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, // _ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ` + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x1C, 0x3E, 0x77, 0x63, 0x63, 0x63, 0x33, 0x7F, 0x7F, 0x60, 0x00, // a + 0x00, 0x06, 0xFE, 0xFE, 0x66, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x30, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, // b + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x30, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x60, 0x78, 0x38, 0x18, 0x00, // c + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x66, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x30, 0x7F, 0x7F, 0x60, 0x00, // d + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x1F, 0x3F, 0x76, 0x66, 0x66, 0x66, 0x66, 0x76, 0x37, 0x17, 0x00, // e + 0x00, 0x00, 0x00, 0x60, 0xFC, 0xFE, 0x66, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // f + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x60, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x33, 0x77, 0xEE, 0xCC, 0xCC, 0xCC, 0xEE, 0x7F, 0x3F, 0x00, 0x00, // g + 0x00, 0x06, 0xFE, 0xFE, 0x66, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, // h + 0x00, 0x00, 0x00, 0x00, 0x30, 0xF6, 0xF6, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, 0x00, // i + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xF6, 0xF6, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, // j + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x80, 0xF0, 0xF0, 0x70, 0x30, 0x30, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x07, 0x0F, 0x7C, 0x78, 0x70, 0x60, 0x00, // k + 0x00, 0x00, 0x00, 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, 0x00, // l + 0x30, 0xF0, 0xE0, 0x30, 0x30, 0xF0, 0xE0, 0x30, 0x30, 0xF0, 0xE0, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x7F, 0x7F, 0x00, 0x60, 0x7F, 0x7F, 0x60, // m + 0x00, 0x30, 0xF0, 0xF0, 0x60, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, // n + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, // o + + 0x00, 0x30, 0xF0, 0xF0, 0x60, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xD8, 0x30, 0x30, 0x30, 0x38, 0x1F, 0x0F, 0x00, // p + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x60, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x0F, 0x1F, 0x38, 0x30, 0x30, 0x30, 0xD8, 0xFF, 0xFF, 0xC0, 0x00, // q + 0x00, 0x00, 0x30, 0xF0, 0xF0, 0x60, 0x30, 0x30, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // r + 0x00, 0xE0, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x70, 0x70, 0x60, 0x00, 0x00, 0x19, 0x3B, 0x7B, 0x63, 0x63, 0x63, 0x63, 0x77, 0x3E, 0x1C, 0x00, // s + 0x00, 0x00, 0x00, 0x30, 0xFE, 0xFE, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7F, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, // t + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x30, 0x7F, 0x7F, 0x60, 0x00, // u + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1F, 0x78, 0x78, 0x1F, 0x07, 0x00, 0x00, 0x00, // v + 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x03, 0x1F, 0x7C, 0x70, 0x1E, 0x1E, 0x70, 0x7C, 0x1F, 0x03, 0x00, // w + 0x00, 0x00, 0x30, 0x70, 0xF0, 0x80, 0x80, 0xF0, 0x70, 0x30, 0x00, 0x00, 0x00, 0x00, 0x60, 0x70, 0x7D, 0x0F, 0x0F, 0x7D, 0x70, 0x60, 0x00, 0x00, // x + 0x00, 0x00, 0x30, 0xF0, 0xC0, 0x00, 0x00, 0xC0, 0xF0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x73, 0x3F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, // y + 0x00, 0x00, 0x70, 0x70, 0x30, 0x30, 0xB0, 0xF0, 0xF0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x78, 0x7C, 0x6E, 0x67, 0x63, 0x61, 0x70, 0x70, 0x00, 0x00, // z + 0x00, 0x00, 0x80, 0xC0, 0xFC, 0x7E, 0x07, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x3F, 0x7E, 0xE0, 0xC0, 0xC0, 0x00, 0x00, 0x00, // { + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, // | + 0x00, 0x00, 0x00, 0x03, 0x03, 0x07, 0x7E, 0xFC, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xE0, 0x7E, 0x3F, 0x03, 0x01, 0x00, 0x00, // } + 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, // ~ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ⌂ + + 0x00, 0x00, 0xF0, 0xFC, 0x1E, 0x06, 0x06, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x03, 0x03, 0x63, 0x7F, 0x7F, 0x60, 0x00, // А + 0x00, 0x06, 0xFE, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x8E, 0x0E, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x71, 0x3F, 0x1F, 0x00, // Б + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x86, 0x86, 0x86, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x61, 0x61, 0x61, 0x73, 0x3F, 0x1E, 0x00, // В + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0E, 0x0E, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Г + 0x00, 0x00, 0xF0, 0xFC, 0x1E, 0x06, 0x06, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x78, 0x7F, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x7F, 0x78, 0x00, // Д + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x86, 0x86, 0xC6, 0xC6, 0x0E, 0x0E, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x61, 0x61, 0x63, 0x63, 0x70, 0x70, 0x00, // Е + 0x00, 0x06, 0x7E, 0xFE, 0xC0, 0xFE, 0xFE, 0xC0, 0xFE, 0x7E, 0x06, 0x00, 0x00, 0x60, 0x7E, 0x7F, 0x03, 0x7F, 0x7F, 0x03, 0x7F, 0x7E, 0x60, 0x00, // Ж + 0x00, 0x18, 0x1C, 0x1E, 0x06, 0x06, 0xC6, 0xC6, 0xEE, 0xFC, 0x38, 0x00, 0x00, 0x18, 0x38, 0x78, 0x60, 0x60, 0x60, 0x60, 0x71, 0x3F, 0x1F, 0x00, // З + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x80, 0xE0, 0x78, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x1E, 0x07, 0x01, 0x60, 0x7F, 0x7F, 0x60, 0x00, // И + 0x00, 0x06, 0xFE, 0xFE, 0x01, 0x83, 0xE3, 0x79, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x1E, 0x07, 0x01, 0x60, 0x7F, 0x7F, 0x60, 0x00, // Й + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x80, 0xC0, 0xF6, 0x7E, 0x1E, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x01, 0x03, 0x6F, 0x7E, 0x78, 0x60, 0x00, // К + 0x00, 0x00, 0xF0, 0xFC, 0x1E, 0x06, 0x06, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, // Л + 0x00, 0x06, 0xFE, 0xFE, 0x78, 0xE0, 0xE0, 0x78, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x01, 0x01, 0x60, 0x7F, 0x7F, 0x60, 0x00, // М + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x80, 0x80, 0x86, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x01, 0x01, 0x61, 0x7F, 0x7F, 0x60, 0x00, // Н + 0x00, 0xF8, 0xFC, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, // О + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, // П + + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x8E, 0xFC, 0xF8, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, // Р + 0x00, 0xF8, 0xFC, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x1C, 0x18, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x60, 0x78, 0x38, 0x18, 0x00, // С + 0x00, 0x0E, 0x0E, 0x06, 0x06, 0xFE, 0xFE, 0x06, 0x06, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, 0x00, // Т + 0x00, 0x06, 0x1E, 0x7E, 0xF6, 0xC0, 0xC0, 0xF6, 0x7E, 0x1E, 0x06, 0x00, 0x00, 0x60, 0x60, 0x70, 0x7D, 0x1F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, // У + 0x00, 0xF0, 0xF8, 0x1C, 0x0C, 0xFE, 0xFE, 0x0C, 0x1C, 0xF8, 0xF0, 0x00, 0x00, 0x0F, 0x1F, 0x38, 0x30, 0x7F, 0x7F, 0x30, 0x38, 0x1F, 0x0F, 0x00, // Ф + 0x00, 0x06, 0x1E, 0x7E, 0xF6, 0xC0, 0xC0, 0xF6, 0x7E, 0x1E, 0x06, 0x00, 0x00, 0x60, 0x78, 0x7E, 0x6F, 0x03, 0x03, 0x6F, 0x7E, 0x78, 0x60, 0x00, // Х + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x7F, 0x7F, 0xE0, 0xE0, // Ц + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x00, 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x63, 0x7F, 0x7F, 0x60, 0x00, // Ч + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0xF0, 0xF0, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x7F, 0x7F, 0x60, 0x7F, 0x7F, 0x60, 0x00, // Ш + 0x00, 0x06, 0xFE, 0xFE, 0x06, 0xF0, 0xF0, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x7F, 0x7F, 0x60, 0x7F, 0x7F, 0xE0, 0xE0, // Щ + 0x06, 0x06, 0xFE, 0xFE, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x61, 0x61, 0x61, 0x73, 0x3F, 0x1E, 0x00, // Ъ + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x80, 0x00, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x7F, 0x1F, 0x60, 0x7F, 0x7F, 0x60, 0x00, // Ы + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x61, 0x61, 0x61, 0x73, 0x3F, 0x1E, 0x00, // Ь + 0x00, 0x18, 0x1C, 0x1E, 0x06, 0x06, 0x86, 0x86, 0x8E, 0xFC, 0xF8, 0x00, 0x00, 0x18, 0x38, 0x78, 0x60, 0x60, 0x61, 0x61, 0x71, 0x3F, 0x1F, 0x00, // Э + 0x00, 0x06, 0xFE, 0xFE, 0x86, 0xF8, 0xFC, 0x0E, 0x06, 0x0E, 0xFC, 0xF8, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x1F, 0x3F, 0x70, 0x60, 0x70, 0x3F, 0x1F, // Ю + 0x00, 0xF8, 0xFC, 0x8E, 0x06, 0x06, 0x06, 0x06, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x79, 0x7F, 0x6F, 0x03, 0x03, 0x63, 0x7F, 0x7F, 0x60, 0x00, // Я + + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x1C, 0x3E, 0x77, 0x63, 0x63, 0x63, 0x33, 0x7F, 0x7F, 0x60, 0x00, // а + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x70, 0x70, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x63, 0x63, 0x63, 0x77, 0x3E, 0x1C, 0x00, // б + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x30, 0x30, 0x30, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x63, 0x63, 0x63, 0x77, 0x3F, 0x1C, 0x00, // в + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x70, 0x70, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // г + 0x00, 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x3F, 0xFF, 0xF0, 0x00, // д + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x1F, 0x3F, 0x76, 0x66, 0x66, 0x66, 0x66, 0x76, 0x37, 0x17, 0x00, // е + 0x00, 0x30, 0x70, 0xF0, 0x80, 0xF0, 0xF0, 0x80, 0xF0, 0x70, 0x30, 0x00, 0x00, 0x60, 0x70, 0x7D, 0x0F, 0x7F, 0x7F, 0x0F, 0x7D, 0x70, 0x60, 0x00, // ж + 0x00, 0xC0, 0xE0, 0xF0, 0x30, 0x30, 0x30, 0x30, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x18, 0x38, 0x78, 0x60, 0x63, 0x63, 0x63, 0x77, 0x3F, 0x1C, 0x00, // з + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0xB0, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x7C, 0x0E, 0x07, 0x63, 0x7F, 0x7F, 0x60, 0x00, // и + 0x00, 0x30, 0xF0, 0xF3, 0x37, 0x06, 0x06, 0xB7, 0xF3, 0xF0, 0x30, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x7C, 0x0E, 0x07, 0x63, 0x7F, 0x7F, 0x60, 0x00, // й + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x80, 0xF0, 0xF0, 0x70, 0x30, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x07, 0x0F, 0x7D, 0x78, 0x70, 0x60, 0x00, // к + 0x00, 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x60, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, // л + 0x00, 0x30, 0xF0, 0xF0, 0xC0, 0x80, 0x80, 0xC0, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x07, 0x07, 0x61, 0x7F, 0x7F, 0x60, 0x00, // м + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x03, 0x03, 0x63, 0x7F, 0x7F, 0x60, 0x00, // н + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, // о + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x30, 0x30, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, // п + + 0x00, 0x30, 0xF0, 0xF0, 0x60, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xD8, 0x30, 0x30, 0x30, 0x38, 0x1F, 0x0F, 0x00, // р + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x30, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x60, 0x78, 0x38, 0x18, 0x00, // с + 0x00, 0x70, 0x70, 0x30, 0x30, 0xF0, 0xF0, 0x30, 0x30, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x00, 0x00, 0x00, 0x00, // т + 0x00, 0x00, 0x30, 0xF0, 0xF0, 0x00, 0x00, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x73, 0x3F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, // у + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0xF8, 0xF8, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x1F, 0x3F, 0x70, 0x60, 0xFF, 0xFF, 0x60, 0x70, 0x3F, 0x1F, 0x00, // ф + 0x00, 0x00, 0x30, 0x70, 0xF0, 0x80, 0x80, 0xF0, 0x70, 0x30, 0x00, 0x00, 0x00, 0x00, 0x60, 0x70, 0x7D, 0x0F, 0x0F, 0x7D, 0x70, 0x60, 0x00, 0x00, // х + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x7F, 0x7F, 0xE0, 0xE0, // ц + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x00, 0x03, 0x07, 0x06, 0x06, 0x06, 0x66, 0x7F, 0x7F, 0x60, 0x00, // ч + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x80, 0x80, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x7F, 0x7F, 0x60, 0x7F, 0x7F, 0x60, 0x00, // ш + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x80, 0x80, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x60, 0x7F, 0x7F, 0x60, 0x7F, 0x7F, 0xE0, 0xE0, // щ + 0x30, 0x30, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x63, 0x63, 0x63, 0x77, 0x3E, 0x1C, 0x00, // ъ + 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x60, 0x7F, 0x7F, 0x63, 0x63, 0x77, 0x3E, 0x1C, 0x60, 0x7F, 0x7F, 0x60, // ы + 0x00, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x63, 0x63, 0x63, 0x63, 0x77, 0x3E, 0x1C, 0x00, // ь + 0x00, 0xC0, 0xE0, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x18, 0x38, 0x78, 0x60, 0x60, 0x63, 0x63, 0x73, 0x3F, 0x1F, 0x00, // э + 0x30, 0xF0, 0xF0, 0x30, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x70, 0xE0, 0xC0, 0x60, 0x7F, 0x7F, 0x63, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x70, 0x3F, 0x1F, // ю + 0x00, 0xC0, 0xE0, 0x70, 0x30, 0x30, 0x30, 0x30, 0xF0, 0xF0, 0x30, 0x00, 0x00, 0x61, 0x73, 0x7F, 0x6E, 0x06, 0x06, 0x66, 0x7F, 0x7F, 0x60, 0x00, // я + + 0x00, 0x0C, 0xFC, 0xFF, 0x8F, 0x8C, 0x8C, 0xCF, 0xCF, 0x1C, 0x1C, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x61, 0x61, 0x61, 0x63, 0x63, 0x70, 0x70, 0x00, // Ё + 0x00, 0xC0, 0xE0, 0x76, 0x36, 0x30, 0x30, 0x36, 0x76, 0xE0, 0xC0, 0x00, 0x00, 0x1F, 0x3F, 0x76, 0x66, 0x66, 0x66, 0x66, 0x76, 0x37, 0x17, 0x00, // ё + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Є + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // є + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Ї + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ї + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Ў + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ў + 0x00, 0x3C, 0x7E, 0x66, 0x66, 0x7E, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ° + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ∙ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // · + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // √ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // № + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ¤ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ■ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // + 0x01, 0xAF, 0x30 +}; +// ширина символов, высота символов, код первого символа и количество символов +const uint8_t mediumNumbers[] = { + 0x0C, 0x10, 0x2D, 0x0D, + + 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, // - + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, // . + 0x00, 0x00, 0x02, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x81, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x81, 0x00, 0x00, // / + 0x00, 0xFC, 0x7A, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7A, 0xFC, 0x00, 0x00, 0x7E, 0xBC, 0xC0, 0xC0, 0xc0, 0xC0, 0xC0, 0xC0, 0xBC, 0x7E, 0x00, // 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0x00, // 1 + 0x00, 0x00, 0x02, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x7A, 0xFC, 0x00, 0x00, 0x7E, 0xBD, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x81, 0x00, 0x00, // 2 + 0x00, 0x00, 0x02, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x7A, 0xFC, 0x00, 0x00, 0x00, 0x81, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xBD, 0x7E, 0x00, // 3 + 0x00, 0xFC, 0x78, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x78, 0xFC, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x3D, 0x7E, 0x00, // 4 + 0x00, 0xFC, 0x7A, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x81, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xBD, 0x7E, 0x00, // 5 + 0x00, 0xFC, 0x7A, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x02, 0x00, 0x00, 0x00, 0x7E, 0xBD, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xBD, 0x7E, 0x00, // 6 + 0x00, 0x00, 0x02, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7A, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0x00, // 7 + 0x00, 0xFC, 0x7A, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x7A, 0xFC, 0x00, 0x00, 0x7E, 0xBD, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xBD, 0x7E, 0x00, // 8 + 0x00, 0xFC, 0x7A, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x7A, 0xFC, 0x00, 0x00, 0x00, 0x81, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xBD, 0x7E, 0x00, // 9 + 0 +}; + +// ширина символов, высота символов, код первого символа и количество символов +const uint8_t bigNumbers[] = { + 0x0E, 0x18, 0x2D, 0x0D, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // - + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xE0, 0xE0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, // . + 0x00, 0x00, 0x02, 0x06, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00, // / + 0x00, 0xFC, 0xFA, 0xF6, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0xF6, 0xFA, 0xFC, 0x00, 0x00, 0xEF, 0xC7, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xC7, 0xEF, 0x00, 0x00, 0x7F, 0xBF, 0xDF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xDF, 0xbf, 0x7F, 0x00, // 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF8, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xC7, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x7F, 0x00, // 1 + 0x00, 0x00, 0x02, 0x06, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0xF6, 0xFA, 0xFC, 0x00, 0x00, 0xE0, 0xD0, 0xB8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3B, 0x17, 0x0f, 0x00, 0x00, 0x7F, 0xBF, 0xDF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00, // 2 + 0x00, 0x00, 0x02, 0x06, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0e, 0xF6, 0xFA, 0xFC, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xBB, 0xD7, 0xEF, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xDF, 0xBF, 0x7F, 0x00, // 3 + 0x00, 0xFC, 0xF8, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF8, 0xFC, 0x00, 0x00, 0x0F, 0x17, 0x3B, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xBB, 0xD7, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x7F, 0x00, // 4 + 0x00, 0xFC, 0xFA, 0xF6, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x0F, 0x17, 0x3B, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xB8, 0xD0, 0xE0, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xDF, 0xBF, 0x7F, 0x00, // 5 + 0x00, 0xFC, 0xFA, 0xF6, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0xEF, 0xD7, 0xBB, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xB8, 0xD0, 0xE0, 0x00, 0x00, 0x7F, 0xBF, 0xDF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xDF, 0xBF, 0x7F, 0x00, // 6 + 0x00, 0x00, 0x02, 0x06, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0xF6, 0xFA, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xC7, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x7F, 0x00, // 7 + 0x00, 0xFC, 0xFA, 0xF6, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0xF6, 0xFA, 0xFC, 0x00, 0x00, 0xEF, 0xD7, 0xBB, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xBB, 0xD7, 0xEF, 0x00, 0x00, 0x7F, 0xBF, 0xDF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xDF, 0xBF, 0x7F, 0x00, // 8 + 0x00, 0xFC, 0xFA, 0xF6, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0xF6, 0xFA, 0xFC, 0x00, 0x00, 0x0F, 0x17, 0x3B, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xBB, 0xD7, 0xEF, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xDF, 0xBF, 0x7F, 0x00, // 9 + 0 +}; + +// ширина символов, высота символов, код первого символа и количество символов +const uint8_t megaNumbers[] = { + 0x18, 0x28, 0x2D, 0x0D, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // - + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xF8, 0xFC, 0xFE, 0xFE, 0xFC, 0xF8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // . + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x1F, 0x3F, 0x3F, 0x1F, 0x0F, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x7C, 0xFE, 0xFF, 0xFF, 0xFE, 0x7C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // / + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xFC, 0xFE, 0x3F, 0x07, 0x01, 0x03, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xF0, 0xE0, 0xE0, 0xC0, 0x80, 0xE0, 0xF8, 0xFF, 0x3F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F, 0x1F, 0x1F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x0F, 0x1F, 0x3F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // 1 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x3E, 0x7F, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x03, 0x01, 0x83, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF8, 0xFC, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xF0, 0xF8, 0xFE, 0xDF, 0xEF, 0xEF, 0xE7, 0xE3, 0xE1, 0xE1, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x1F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x1F, 0x1F, 0x0F, 0x07, 0x03, 0x00, 0x00, 0x00, // 2 + 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x81, 0xC0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x1F, 0x3F, 0xFF, 0xFF, 0xFF, 0xF9, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 3 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xF8, 0xF8, 0xF8, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF8, 0x3C, 0x1F, 0x07, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFC, 0xFF, 0xE7, 0xE3, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x83, 0xC3, 0xC3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07, 0x0F, 0x0F, 0x0F, 0x07, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, // 4 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0x01, 0x81, 0xC1, 0xC1, 0xE1, 0xF1, 0xE1, 0xE1, 0xC1, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x1F, 0x0E, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x1F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xF0, 0xFC, 0xFC, 0xFC, 0xF8, 0xF0, 0xF0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, 0xE0, 0xFF, 0xFF, 0x7F, 0x3F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 5 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0xFC, 0xFE, 0x7F, 0x0F, 0x01, 0x01, 0x03, 0x83, 0x87, 0xCF, 0xCF, 0xDF, 0x8F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xB8, 0x1C, 0x1E, 0x0E, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0xC0, 0x80, 0xE0, 0xFF, 0xFF, 0x3F, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6 + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0x78, 0x38, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1E, 0x1F, 0x07, 0x03, 0x03, 0x01, 0x01, 0x01, 0x81, 0xC1, 0xF1, 0xF9, 0xFD, 0x3F, 0x0F, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0xFC, 0xFE, 0xFF, 0xFF, 0x3F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 7 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFF, 0xFF, 0xE7, 0xC1, 0xC1, 0x81, 0x81, 0x81, 0x81, 0x83, 0xC3, 0xFF, 0xFF, 0x7F, 0x3F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xCF, 0xFF, 0xFF, 0x7F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFE, 0xF8, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 0xFB, 0x7F, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, 0x1F, 0x0F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 8 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF0, 0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF8, 0xFE, 0xFF, 0xFF, 0x87, 0x01, 0x01, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0x70, 0x38, 0x3C, 0x1E, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0xF9, 0xFD, 0xFB, 0xF1, 0xF0, 0xE0, 0xC0, 0xC0, 0xE0, 0xFC, 0xFF, 0x7F, 0x1F, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 9 + 0 +};
diff -r 000000000000 -r cd4a2add97a0 defaultImages.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/defaultImages.h Tue Jul 23 12:32:26 2019 +0000 @@ -0,0 +1,190 @@ +#define PROGMEM + +const uint8_t alarm[] = { + 9, 8, + 0x06, 0xBB, 0x45, 0x82, 0x9E, 0x92, 0x45, 0xBB, 0x06 +}; + +const uint8_t antenna[] = { + 10, 8, + 0x01, 0x03, 0x06, 0x0C, 0xFF, 0xFF, 0x0C, 0x06, 0x03, 0x01 +}; + +const uint8_t arrowDown[] = { + 8, 8, + 0x04, 0x0C, 0x1C, 0x3C, 0x3C, 0x1C, 0x0C, 0x04 +}; + +const uint8_t arrowLeft[] = { + 8, 8, + 0x00, 0x00, 0x18, 0x3C, 0x7E, 0xFF, 0x00, 0x00 +}; + +const uint8_t arrowRight[] = { + 8, 8, + 0x00, 0x00, 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00 +}; + +const uint8_t arrowUp[] = { + 8, 8, + 0x20, 0x30, 0x38, 0x3C, 0x3C, 0x38, 0x30, 0x20 +}; + +const uint8_t battery0[] = { + 13, 8, + 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0x3C +}; + +const uint8_t battery1[] = { + 13, 8, + 0xFF, 0x81, 0xBD, 0xBD, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0x3C +}; + +const uint8_t battery2[] = { + 13, 8, + 0xFF, 0x81, 0xBD, 0xBD, 0x81, 0xBD, 0xBD, 0x81, 0x81, 0x81, 0x81, 0xFF, 0x3C +}; + +const uint8_t battery3[] = { + 13, 8, + 0xFF, 0x81, 0xBD, 0xBD, 0x81, 0xBD, 0xBD, 0x81, 0xBD, 0xBD, 0x81, 0xFF, 0x3C +}; + +const uint8_t batteryCharging[] = { + 13, 8, + 0xFF, 0x81, 0x81, 0x81, 0x99, 0xBF, 0xB9, 0xBF, 0x99, 0x81, 0x81, 0xFF, 0x3C +}; + +const uint8_t batteryLow[] = { + 13, 8, + 0xFF, 0x81, 0x81, 0xC3, 0xA5, 0x99, 0x99, 0xA5, 0xC3, 0x81, 0x81, 0xFF, 0x3C +}; + +const uint8_t bluetooth[] = { + 5, 8, + 0x42, 0x24, 0xFF, 0x5A, 0x24 +}; + +const uint8_t call[] = { + 8, 8, + 0x0E, 0x1F, 0x3E, 0x70, 0xE5, 0xED, 0xE1, 0x4E +}; + +const uint8_t callIn[] = { + 8, 8, + 0x0E, 0x1F, 0x3E, 0x70, 0xE0, 0xE7, 0xE6, 0x45 +}; + +const uint8_t callOut[] = { + 8, 8, + 0x0E, 0x1F, 0x3E, 0x70, 0xE0, 0xE5, 0xE3, 0x47 +}; + +const uint8_t check[] = { + 7, 8, + 0x30, 0x70, 0xE0, 0xF0, 0x7C, 0x1F, 0x07 +}; + +const uint8_t checkboxOff[] PROGMEM = { + 8, 8, + 0x7E, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x7E +}; + +const uint8_t checkboxOn[] PROGMEM = { + 8, 8, + 0x7E, 0x81, 0x99, 0xB1, 0x99, 0x8D, 0x81, 0x7E +}; + +const uint8_t dynamic[] PROGMEM = { + 10, 8, + 0x3C, 0x24, 0x3C, 0x42, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +const uint8_t dynamicOff[] PROGMEM = { + 10, 8, + 0x3C, 0x24, 0x3C, 0x42, 0xFF, 0x00, 0x24, 0x18, 0x18, 0x24 +}; + +const uint8_t dynamicOn[] PROGMEM = { + 10, 8, + 0x3C, 0x24, 0x3C, 0x42, 0xFF, 0x00, 0x24, 0x99, 0x42, 0x3C +}; + +const uint8_t signal1[] PROGMEM = { + 11, 8, + 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +const uint8_t signal2[] PROGMEM = { + 11, 8, + 0xC0, 0xC0, 0x00, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +const uint8_t signal3[] PROGMEM = { + 11, 8, + 0xC0, 0xC0, 0x00, 0xF0, 0xF0, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x00 +}; + +const uint8_t signal4[] PROGMEM = { + 11, 8, + 0xC0, 0xC0, 0x00, 0xF0, 0xF0, 0x00, 0xFC, 0xFC, 0x00, 0xFF, 0xFF +}; + +const uint8_t light[] PROGMEM = { + 9, 8, + 0x10, 0x92, 0x6C, 0x44, 0x93, 0x44, 0x6C, 0x92, 0x10 +}; + +const uint8_t melody[] PROGMEM = { + 4, 8, + 0x40, 0xEC, 0xE6, 0x7F +}; + +const uint8_t sms[] PROGMEM = { + 10, 8, + 0x7E, 0xA5, 0x99, 0x91, 0xA1, 0xA1, 0x91, 0x99, 0xA5, 0x7E +}; + +const uint8_t netlevel1[] PROGMEM = { + 8, 8, + 0x07, 0x03, 0x05, 0x00, 0x00, 0x00, 0xC0, 0xC0 +}; +const uint8_t netlevel2[] PROGMEM = { + 8,8, + 0x07, 0x03, 0x05, 0xC0, 0xF0, 0x30, 0xD8, 0xD8 +}; + +const uint8_t netlevel3[] PROGMEM = { + 8, 8, + 0xE3, 0xF9, 0x3C, 0xCE, 0xF6, 0x37, 0xDB, 0xDB +}; + +const uint8_t radioOff[] PROGMEM = { + 8, 8, + 0x3C, 0x42, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3C +}; + +const uint8_t radioOn[] PROGMEM = { + 8, 8, + 0x3C, 0x42, 0x99, 0xBD, 0xBD, 0x99, 0x42, 0x3C +}; + +const uint8_t settings[] PROGMEM = { + 8, 8, + 0x5A, 0xFF, 0x66, 0xDB, 0xDB, 0x66, 0xFF, 0x5A +}; + +const uint8_t mesege [] PROGMEM = { + 42, 32, + 0xFC, 0xFC, 0xFC, 0x1C, 0x1C, 0x1C, 0x3C, 0x7C, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, + 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, + 0xFC, 0x7C, 0x3C, 0x1C, 0x1C, 0x1C, 0xFC, 0xFC, 0xFC, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, + 0xF8, 0xF0, 0xE0, 0xC1, 0x83, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x83, 0xC1, 0xE0, + 0xF0, 0xF8, 0xFC, 0xF8, 0xF0, 0xE1, 0xC3, 0x87, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0xFC, 0xF8, + 0xF0, 0xE0, 0xC1, 0x83, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, + 0x3F, 0x38, 0x38, 0x38, 0x3C, 0x3E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3E, + 0x3C, 0x38, 0x38, 0x38, 0x3F, 0x3F, 0x3F, 0x3F +}; \ No newline at end of file