ILI9341 то ли я .... то ли лыжи не едут !!!!

Обсуждаем контроллеры компании Atmel.
broocks
Родился
Сообщения: 6
Зарегистрирован: Сб фев 09, 2019 20:35:40
Откуда: Крым

ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение broocks »

Здравствуйте уважаемые форумчане!
Приобрел на Али ILI9341 2,8 SPI 240*320 будь он не.....
Решил немного вспомнить молодость да слепить контролер теплого пола да вот с экраном какие то несросты
Оцените мож че подскажите, все делаю по даташиту а он молчит

Код: Выделить всё

/*******************************************************
This program was created by the
CodeWizardAVR V3.12 Advanced
Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 03.02.2019
Author  :
Company :
Comments:


Chip type               : ATmega8A
Program type            : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*******************************************************/

#include <mega8.h>
#include <delay.h>

// Declare your global variables here
unsigned long int k;
// SPI functions
#include <spi.h>


#define CS1             PORTD |= (1<<5)     //
#define CS0             PORTD &= ~(1<<5)    //

#define RESET1          PORTD |= (1<<6)     //
#define RESET0          PORTD &= ~(1<<6)    //

#define DC1             PORTD |= (1<<7)     //
#define DC0             PORTD &= ~(1<<7)    //



void Wr_comm (volatile unsigned char comm)         //функция записи команды
{
   DC0;
   spi(comm); 
   
   //while(!(SPSR & (1<<SPIF)));
   DC1;
   
}

void Wr_param (volatile unsigned char param)         //функция записи параметра
{
   spi(param);
     
}

void Wr_data (volatile unsigned int data)         //функция записи параметра
{
   spi(data>>8);
   spi(data);
   
}


void Init_ili (void)         //функция инициализации
{
   
  RESET0;
   delay_us(15);     //15микросекунд
   RESET1;
    CS0;
   delay_ms(120);
   Wr_comm(0x01);
   delay_ms(120);     
   

   
   
 
   Wr_comm(0x3A); //установка 16 бит цвета Pixel Format Set или COLMOD 
   Wr_param(0x55); //установка 16 бит
   Wr_comm(0x11); //Sleep OUT (код – 0x11)выводит ILI9341 из состояния сна
   delay_ms(130);               //120милисекунд
   Wr_comm(0x29); //Display ON (код – 0x29) – подключение дисплея к ОЗУ
   delay_ms(130);

   Wr_comm(0x2C); 
   for (k=0;k<76800;k++)
   {
      Wr_data(0x07E0);
   
    }
    CS1;
}




void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=Out Bit4=In Bit3=Out Bit2=Out Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (1<<DDB5) | (0<<DDB4) | (1<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=0 Bit4=T Bit3=0 Bit2=0 Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0);

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);

// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);

// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 125,000 kHz
// SPI Clock Phase: Cycle Start
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=(0<<SPIE) | (1<<SPE) | (0<<DORD) | (1<<MSTR) | (0<<CPOL) | (0<<CPHA) | (1<<SPR1) | (0<<SPR0);
SPSR=(0<<SPI2X);

// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
RESET1;CS1;DC1;
delay_ms(300);
Init_ili();

while (1)
      {
      // Place your code here

      }
}
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение GoldenAndy »

1. покажите схему подключения дисплея
2. контроллер дисплея не понимает сигналы управления напряжением 5 вольт. Только 3,3 вольта.
3. СПИ для этого контроллера можно инициализировать на максимальной скорости - 1/2 от тактовой. Это быстрый контроллер.
4. Поставьте кварц 16 МГц, чисто ради скорости отрисовки.
5. Я не знаю, что внутри функции spi(data). На всякий случай - отправку слова в дисплей делал вот так:

Код: Выделить всё

   // отправка 2 байт в дисплей по SPI
   void sendWordILI9341(unsigned int wordToSend) {
      SPDR = wordToSend >> 8;
      while((SPSR & (1<<SPIF)) == 0);
      SPDR = wordToSend & 0xFF;
      while((SPSR & (1<<SPIF)) == 0);
   }

Т.е. прежде чем отправлять второй байт, нужно дождаться, пока отправится первый.
6. Инициализация дисплея более сложная, я для своей библиотеки ее подсмотрел у EAX'а
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
broocks
Родился
Сообщения: 6
Зарегистрирован: Сб фев 09, 2019 20:35:40
Откуда: Крым

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение broocks »

схема стандартная ILI9341 mega 8
1 VCC +5 v (на плате стабилизатор 3,3v)
2GND GND
3 CS PD5
4 RESET PD6
5 DC PD7
6 SDI MOSI
7 SCK SCK
8 LED 470 ом +3,3V
9 SDO MISO
сейчас попробую перевести логические входы на 3,3 v (поставлю делители)

SPI так и работает как вы написали
спасибо

Добавлено after 4 minutes 48 seconds:
УРААААА!!!!
перевел на 3,3 и все заработало
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение GoldenAndy »

ну покопайте еще вот эту тему, я там свою версию либы выкладывал.... Там инициализация подробно выписана, которую я потянул у ЕАКС.МИ

Добавлено after 5 minutes 35 seconds:
broocks писал(а):8 LED 470 ом +3,3V

Почитайте доку на ваш дисплей либо попробуйте отследить по плате, куда идет управление подсветкой. (либо подайте туда 3.3 вольта через миллиамперметр).
На моем дисплее вход подсветки - логический, втекающий от 3.3 вольт ток - в районе 1 миллиампера. На плате там стоит свой транзистор, управляющий подсветкой. И я на вход подсветки завел ШИМ от МК и регулирую яркость подсветки программно.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
broocks
Родился
Сообщения: 6
Зарегистрирован: Сб фев 09, 2019 20:35:40
Откуда: Крым

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение broocks »

Да я тоже так подумываю если место для кода останется
теперь разбираюсь со шрифтами
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение GoldenAndy »

Со шрифтами полный аллес.
У меня дисплей 320*240 2,4".
Нормально читается шрифт 12*20.
10*16 - еще нормально читается, но уже мелковат для 2.4"
Изображение
Температура слева вверху - 10*16, все остальное 12*20

Аллес вот в чем - шрифт с кириллицей - это 168 символов.
Изображение
12*20 = 240 бит или 30 байт на символ, 168 символов - это 5040 байт - почти 5 кб данных.
10*16 - 160 бит или 20 байт на символ, 168*20 = 3360 байт или 3,3 кб.
А у вас всего 8 кб в меге.
Тут уже или меняйте на мегу 328, если плата уже готова, или смотрите в сторону меги32.
Мой проект часов с календарем и будильниками на таком дисплее с трудом вместился в мегу32 (там кроме шрифтов еще и растровые картинки есть). Сейчас обсуждаем в соседней ветке переход на мегу128, что бы вместить все хотелки.

Добавлено after 8 minutes 2 seconds:
У вас дисплей 2.8" - вам и 10*16 пойдет.

В спойлере - заготовка шрифта 10*16 - тут идет 2 байта на строку, 15 строк (шестнадцатую строку-разделитель между строками нужно самому предусмотреть).
Можно использовать шрифт как есть - но этот массив займет 30*168=5040 байт. Если заморочиться и сделать хранение шрифта как поток бит - и хранить только 9*15 пикселей, а межстрочный и межсимвольный интервал предусматривать программно - то шрифт ужимается в 9*15=135 бит или 17 байт, 168 символов - это 2856 байт.
Спойлер

Код: Выделить всё

            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x20 (32), Char =  */   \
            0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x21 (33), Char = !*/   \
            0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x22 (34), Char = "*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6C, 0x01, 0xFF, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6C, 0x01, 0xFF, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x23 (35), Char = #*/   \
            0x00, 0x00, 0x00, 0x30, 0x00, 0x7E, 0x01, 0xB0, 0x01, 0xB0, 0x01, 0xB0, 0x00, 0xFC, 0x00, 0x36, 0x00, 0x36, 0x00, 0x36, 0x01, 0xF8, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x24 (36), Char = $*/   \
            0x00, 0xE1, 0x01, 0xB2, 0x01, 0xB2, 0x00, 0xE4, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x4E, 0x00, 0x9B, 0x00, 0x9B, 0x01, 0x0E, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x25 (37), Char = %*/   \
            0x00, 0x00, 0x00, 0xF0, 0x01, 0xF8, 0x01, 0x98, 0x01, 0x98, 0x00, 0xF0, 0x00, 0xF0, 0x01, 0xB3, 0x01, 0x9B, 0x01, 0x9E, 0x01, 0x8E, 0x01, 0xFF, 0x00, 0xF3, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x26 (38), Char = &*/   \
            0x00, 0x30, 0x00, 0x30, 0x00, 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,   /* Char code = 0x27 (39), Char = '*/   \
            0x00, 0x00, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x18, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x18, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x28 (40), Char = (*/   \
            0x00, 0x00, 0x00, 0x60, 0x00, 0x30, 0x00, 0x30, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x30, 0x00, 0x30, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x29 (41), Char = )*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x01, 0xB6, 0x01, 0xFE, 0x00, 0x30, 0x00, 0x78, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x2A (42), Char = **/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0xFC, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x2B (43), Char = +*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x10, 0x00, 0x20,   /* Char code = 0x2C (44), Char = ,*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x2D (45), Char = -*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x2E (46), Char = .*/   \
            0x00, 0x06, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x18, 0x00, 0x30, 0x00, 0x30, 0x00, 0x60, 0x00, 0x60, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00,   /* Char code = 0x2F (47), Char = /*/   \
            \
            0x00, 0xFE, 0x01, 0xC7, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xC7, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x30 (48), Char = 0*/   \
            0x00, 0x30, 0x00, 0x30, 0x00, 0xF0, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x31 (49), Char = 1*/   \
            0x01, 0xFE, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x32 (50), Char = 2*/   \
            0x01, 0xFE, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0xFC, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x33 (51), Char = 3*/   \
            0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x8C, 0x01, 0x8C, 0x01, 0x8C, 0x00, 0xFF, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x34 (52), Char = 4*/   \
            0x01, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFE, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x35 (53), Char = 5*/   \
            0x00, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFE, 0x01, 0xC7, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xC7, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x36 (54), Char = 6*/   \
            0x01, 0xFF, 0x00, 0x03, 0x00, 0x03, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x18, 0x00, 0x30, 0x00, 0x30, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x37 (55), Char = 7*/   \
            0x00, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x38 (56), Char = 8*/   \
            0x00, 0xFE, 0x01, 0xC7, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xC7, 0x00, 0x7F, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x39 (57), Char = 9*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x3A (58), Char = :*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x10, 0x00, 0x20,   /* Char code = 0x3B (59), Char = ;*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x1C, 0x00, 0x70, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x1C, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x3C (60), Char = <*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x3D (61), Char = =*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x70, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x70, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x3E (62), Char = >*/   \
            0x01, 0xFE, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x1E, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x3F (63), Char = ?*/   \
            \
            0x00, 0x00, 0x00, 0xFE, 0x01, 0x01, 0x01, 0x01, 0x01, 0x39, 0x01, 0x45, 0x01, 0x45, 0x01, 0x45, 0x01, 0x3B, 0x01, 0x00, 0x01, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x40 (64), Char = @*/   \
            0x00, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xFF, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x41 (65), Char = A*/   \
            0x01, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xFC, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x42 (66), Char = B*/   \
            0x00, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x43 (67), Char = C*/   \
            0x01, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x44 (68), Char = D*/   \
            0x01, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x45 (69), Char = E*/   \
            0x01, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x46 (70), Char = F*/   \
            0x00, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x9F, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x47 (71), Char = G*/   \
            0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xFF, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x48 (72), Char = H*/   \
            0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x49 (73), Char = I*/   \
            0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x4A (74), Char = J*/   \
            0x01, 0x83, 0x01, 0x87, 0x01, 0x8E, 0x01, 0x9C, 0x01, 0xB8, 0x01, 0xF0, 0x01, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x4B (75), Char = K*/   \
            0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x4C (76), Char = L*/   \
            0x01, 0x83, 0x01, 0x83, 0x01, 0xC7, 0x01, 0xC7, 0x01, 0xAB, 0x01, 0xAB, 0x01, 0x93, 0x01, 0x93, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x4D (77), Char = M*/   \
            0x01, 0x83, 0x01, 0x83, 0x01, 0xC3, 0x01, 0xC3, 0x01, 0xA3, 0x01, 0xA3, 0x01, 0x93, 0x01, 0x93, 0x01, 0x8B, 0x01, 0x8B, 0x01, 0x87, 0x01, 0x87, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x4E (78), Char = N*/   \
            0x00, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x4F (79), Char = O*/   \
            \
            0x01, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x50 (80), Char = P*/   \
            0x00, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x9B, 0x01, 0x9B, 0x00, 0xFE, 0x00, 0x18, 0x00, 0x0F, 0x00, 0x00,   /* Char code = 0x51 (81), Char = Q*/   \
            0x01, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xFC, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x52 (82), Char = R*/   \
            0x00, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0xFE, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x53 (83), Char = S*/   \
            0x01, 0xFE, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x54 (84), Char = T*/   \
            0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x55 (85), Char = U*/   \
            0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0xC6, 0x00, 0xC6, 0x00, 0xC6, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x56 (86), Char = V*/   \
            0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x93, 0x01, 0x93, 0x01, 0xD7, 0x00, 0xD6, 0x00, 0xD6, 0x00, 0xEE, 0x00, 0xEE, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x57 (87), Char = W*/   \
            0x01, 0x83, 0x01, 0x83, 0x00, 0xC6, 0x00, 0xC6, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x38, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0xC6, 0x00, 0xC6, 0x01, 0x83, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x58 (88), Char = X*/   \
            0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0x78, 0x00, 0x78, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x59 (89), Char = Y*/   \
            0x01, 0xFF, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x38, 0x00, 0x30, 0x00, 0x60, 0x00, 0x60, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x5A (90), Char = Z*/   \
            0x00, 0x7C, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x7C, 0x00, 0x00,   /* Char code = 0x5B (91), Char = [*/   \
            0x01, 0x80, 0x01, 0x80, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x60, 0x00, 0x30, 0x00, 0x30, 0x00, 0x18, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00,   /* Char code = 0x5C (92), Char = <BackSlash>*/   \
            0x00, 0x7C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x7C, 0x00, 0x00,   /* Char code = 0x5D (93), Char = ]*/   \
            0x00, 0x10, 0x00, 0x38, 0x00, 0x6C, 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x5E (94), Char = ^*/   \
            0x00, 0x00, 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, 0xFF, 0x00, 0x00,   /* Char code = 0x5F (95), Char = _*/   \
            \
            0x00, 0x78, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x60 (96), Char = `*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x61 (97), Char = a*/   \
            0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x62 (98), Char = b*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x63 (99), Char = c*/   \
            0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x64 (100), Char = d*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x65 (101), Char = e*/   \
            0x00, 0x00, 0x00, 0x7C, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xF8, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x66 (102), Char = f*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x01, 0x0C, 0x01, 0x0C, 0x01, 0x0C, 0x01, 0x0C, 0x01, 0x0C, 0x01, 0x0C, 0x01, 0x0C, 0x01, 0xFC, 0x00, 0x0C, 0x01, 0xF8,   /* Char code = 0x67 (103), Char = g*/   \
            0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x68 (104), Char = h*/   \
            0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x69 (105), Char = i*/   \
            0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0xF0,   /* Char code = 0x6A (106), Char = j*/   \
            0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x86, 0x01, 0x8C, 0x01, 0x98, 0x01, 0xB0, 0x01, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x6B (107), Char = k*/   \
            0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x6C (108), Char = l*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x6D (109), Char = m*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x6E (110), Char = n*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x6F (111), Char = o*/   \
            \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0xFC, 0x01, 0x80, 0x01, 0x80,   /* Char code = 0x70 (112), Char = p*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0xFE, 0x00, 0x06, 0x00, 0x06,   /* Char code = 0x71 (113), Char = q*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x72 (114), Char = r*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0xFC, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x73 (115), Char = s*/   \
            0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0xFC, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x74 (116), Char = t*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x75 (117), Char = u*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x83, 0x01, 0x83, 0x00, 0xC6, 0x00, 0xC6, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x38, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x76 (118), Char = v*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x00, 0xEE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x77 (119), Char = w*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0x78, 0x00, 0x30, 0x00, 0x78, 0x00, 0xCC, 0x00, 0xCC, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x78 (120), Char = x*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0xFE, 0x00, 0x06, 0x01, 0xFC,   /* Char code = 0x79 (121), Char = y*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x7A (122), Char = z*/   \
            0x00, 0x1C, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x1C, 0x00, 0x00,   /* Char code = 0x7B (123), Char = {*/   \
            0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00,   /* Char code = 0x7C (124), Char = |*/   \
            0x00, 0x70, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x06, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x70, 0x00, 0x00,   /* Char code = 0x7D (125), Char = }*/   \
            0x00, 0x60, 0x00, 0xF3, 0x01, 0x9E, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x7E (126), Char = ~*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x83, 0x01, 0xBB, 0x01, 0xA3, 0x01, 0xA3, 0x01, 0xA3, 0x01, 0xBB, 0x01, 0x83, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0x7F (127)          */   \
            \
            0x00, 0xC6, 0x00, 0x00, 0x01, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xA8 (168), Char = Ё*/   \
            0x00, 0x7F, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xAA (170), Char = Є*/   \
            0x00, 0xCC, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xAF (175), Char = Ї*/   \
            \
            0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xB2 (178), Char = І*/   \
            0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xB3 (179), Char = і*/   \
            0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xB8 (184), Char = ё*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xF8, 0x01, 0x80, 0x01, 0x80, 0x00, 0x80, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xBA (186), Char = є*/   \
            0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xBF (191), Char = ї*/   \
            \
            0x00, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xFF, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xC0 (192), Char = А*/   \
            0x01, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFC, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xC1 (193), Char = Б*/   \
            0x01, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xFC, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xC2 (194), Char = В*/   \
            0x01, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xC3 (195), Char = Г*/   \
            0x00, 0x3E, 0x00, 0xC6, 0x00, 0xC6, 0x00, 0xC6, 0x00, 0xC6, 0x00, 0xC6, 0x00, 0xC6, 0x00, 0xC6, 0x00, 0xC6, 0x00, 0xC6, 0x00, 0xC6, 0x00, 0xC6, 0x01, 0xFF, 0x01, 0x83, 0x00, 0x00,   /* Char code = 0xC4 (196), Char = Д*/   \
            0x01, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xC5 (197), Char = Е*/   \
            0x01, 0x93, 0x01, 0x93, 0x00, 0xD6, 0x00, 0xD6, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x38, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0xD6, 0x00, 0xD6, 0x01, 0x93, 0x01, 0x93, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xC6 (198), Char = Ж*/   \
            0x01, 0xFE, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0xFC, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xC7 (199), Char = З*/   \
            0x01, 0x83, 0x01, 0x83, 0x01, 0x87, 0x01, 0x87, 0x01, 0x8B, 0x01, 0x8B, 0x01, 0x93, 0x01, 0x93, 0x01, 0xA3, 0x01, 0xA3, 0x01, 0xC3, 0x01, 0xC3, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xC8 (200), Char = И*/   \
            0x00, 0x30, 0x01, 0xB3, 0x01, 0x87, 0x01, 0x87, 0x01, 0x8B, 0x01, 0x8B, 0x01, 0x93, 0x01, 0x93, 0x01, 0xA3, 0x01, 0xA3, 0x01, 0xC3, 0x01, 0xC3, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xC9 (201), Char = Й*/   \
            0x01, 0x83, 0x01, 0x87, 0x01, 0x8E, 0x01, 0x9C, 0x01, 0xB8, 0x01, 0xF0, 0x01, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xCA (202), Char = К*/   \
            0x00, 0x0F, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x01, 0xC3, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xCB (203), Char = Л*/   \
            0x01, 0x83, 0x01, 0x83, 0x01, 0xC7, 0x01, 0xC7, 0x01, 0xAB, 0x01, 0xAB, 0x01, 0x93, 0x01, 0x93, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xCC (204), Char = М*/   \
            0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xFF, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xCD (205), Char = Н*/   \
            0x00, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xCE (206), Char = О*/   \
            0x01, 0xFF, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xCF (207), Char = П*/   \
            \
            0x01, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xD0 (208), Char = Р*/   \
            0x00, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xD1 (209), Char = С*/   \
            0x01, 0xFE, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xD2 (210), Char = Т*/   \
            0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0xFF, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xD3 (211), Char = У*/   \
            0x00, 0x10, 0x00, 0x10, 0x00, 0xFE, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x00, 0xFE, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xD4 (212), Char = Ф*/   \
            0x01, 0x83, 0x01, 0x83, 0x00, 0xC6, 0x00, 0xC6, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x38, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0xC6, 0x00, 0xC6, 0x01, 0x83, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xD5 (213), Char = Х*/   \
            0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0xFF, 0x00, 0x03, 0x00, 0x00,   /* Char code = 0xD6 (214), Char = Ц*/   \
            0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0xFF, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xD7 (215), Char = Ч*/   \
            0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xD8 (216), Char = Ш*/   \
            0x01, 0x8C, 0x01, 0x8C, 0x01, 0x8C, 0x01, 0x8C, 0x01, 0xAC, 0x01, 0xAC, 0x01, 0xAC, 0x01, 0xAC, 0x01, 0xAC, 0x01, 0xAC, 0x01, 0xAC, 0x01, 0xAC, 0x01, 0xFF, 0x00, 0x03, 0x00, 0x00,   /* Char code = 0xD9 (217), Char = Щ*/   \
            0x01, 0xF0, 0x01, 0xB0, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x3E, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xDA (218), Char = Ъ*/   \
            0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xF3, 0x01, 0x9B, 0x01, 0x9B, 0x01, 0x9B, 0x01, 0x9B, 0x01, 0x9B, 0x01, 0xF3, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xDB (219), Char = Ы*/   \
            0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFE, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xDC (220), Char = Ь*/   \
            0x01, 0xFC, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x01, 0xFF, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xDD (221), Char = Э*/   \
            0x01, 0x9E, 0x01, 0xB3, 0x01, 0xB3, 0x01, 0xB3, 0x01, 0xB3, 0x01, 0xB3, 0x01, 0xF3, 0x01, 0xB3, 0x01, 0xB3, 0x01, 0xB3, 0x01, 0xB3, 0x01, 0xB3, 0x01, 0x9E, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xDE (222), Char = Ю*/   \
            0x00, 0xFF, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0x7F, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xDF (223), Char = Я*/   \
            \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xE0 (224), Char = а*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xE1 (225), Char = б*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0xF8, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xE2 (226), Char = в*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xE3 (227), Char = г*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0xCC, 0x01, 0xFE, 0x01, 0x86, 0x00, 0x00,   /* Char code = 0xE4 (228), Char = д*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xE5 (229), Char = е*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x93, 0x00, 0xD6, 0x00, 0xD6, 0x00, 0x7C, 0x00, 0x38, 0x00, 0x7C, 0x00, 0xD6, 0x00, 0xD6, 0x01, 0x93, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xE6 (230), Char = ж*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x78, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xE7 (231), Char = з*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xE8 (232), Char = и*/   \
            0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xE9 (233), Char = й*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x01, 0x8C, 0x01, 0x98, 0x01, 0xB0, 0x01, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xEA (234), Char = к*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x66, 0x00, 0x66, 0x00, 0x66, 0x00, 0x66, 0x00, 0x66, 0x00, 0x66, 0x00, 0x66, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xEB (235), Char = л*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x83, 0x01, 0xC7, 0x01, 0xAB, 0x01, 0x93, 0x01, 0x93, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xEC (236), Char = м*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0xFE, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xED (237), Char = н*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xEE (238), Char = о*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xEF (239), Char = п*/   \
            \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0xFC, 0x01, 0x80, 0x01, 0x80,   /* Char code = 0xF0 (240), Char = р*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xF1 (241), Char = с*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xF2 (242), Char = т*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0xFE, 0x00, 0x06, 0x01, 0xFC,   /* Char code = 0xF3 (243), Char = у*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x00, 0xFE, 0x00, 0x10, 0x00, 0x10,   /* Char code = 0xF4 (244), Char = ф*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0x78, 0x00, 0x30, 0x00, 0x78, 0x00, 0xCC, 0x00, 0xCC, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xF5 (245), Char = х*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0xFF, 0x00, 0x03, 0x00, 0x00,   /* Char code = 0xF6 (246), Char = ц*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0xFE, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xF7 (247), Char = ч*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0x93, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xF8 (248), Char = ш*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8C, 0x01, 0x8C, 0x01, 0x8C, 0x01, 0x8C, 0x01, 0xAC, 0x01, 0xAC, 0x01, 0xAC, 0x01, 0xAC, 0x01, 0xFF, 0x00, 0x03, 0x00, 0x00,   /* Char code = 0xF9 (249), Char = щ*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x01, 0xB0, 0x00, 0x30, 0x00, 0x30, 0x00, 0x3E, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xFA (250), Char = ъ*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xF3, 0x01, 0x9B, 0x01, 0x9B, 0x01, 0x9B, 0x01, 0xF3, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xFB (251), Char = ы*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFC, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xFC (252), Char = ь*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x04, 0x00, 0x06, 0x00, 0x06, 0x00, 0x7E, 0x00, 0x06, 0x00, 0x06, 0x00, 0x04, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xFD (253), Char = э*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x9E, 0x01, 0xB3, 0x01, 0xB3, 0x01, 0xB3, 0x01, 0xF3, 0x01, 0xB3, 0x01, 0xB3, 0x01, 0xB3, 0x01, 0x9E, 0x00, 0x00, 0x00, 0x00,   /* Char code = 0xFE (254), Char = ю*/   \
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0x7E, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00    /* Char code = 0xFF (255), Char = я*/   \
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
broocks
Родился
Сообщения: 6
Зарегистрирован: Сб фев 09, 2019 20:35:40
Откуда: Крым

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение broocks »

Крутой проект если не сложно скинь исходник
У меня попроще - граф экран + тач на нем часы и управление температурой теплых полов во всей квартире, связь по nRF24L01 5 абонентов, датчик температуру по I2 , силовая часть симистор.
на счет меги 8 еще не определился может че и побольше
а вот шрифты у меня разные, но латиница мне не нужна

Добавлено after 40 seconds:
broocks@yandex.ru
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение GoldenAndy »

исходник в вашем проекте не поможет, сильно разные проекты
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
broocks
Родился
Сообщения: 6
Зарегистрирован: Сб фев 09, 2019 20:35:40
Откуда: Крым

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение broocks »

меня интересует только отображение шрифтов и часы реального времени
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение GoldenAndy »

во вложении - графическая библиотека. шрифты, линии, прямоугольники, окружности, спрайты.

по часам - часы сделаны на ds3231, подключаются по i2c.
Вложения
GraphLib.zip
(39.16 КБ) 326 скачиваний
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
broocks
Родился
Сообщения: 6
Зарегистрирован: Сб фев 09, 2019 20:35:40
Откуда: Крым

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение broocks »

сложновато
если такая библиотека то я точно в 8 -ку не влезу
я хочу создать библиотеку только тех символов которые буду отображать
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение GoldenAndy »

так а кто заставляет вам всю библиотеку использовать ?

Отколупайте нужные вам фрагменты.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение Reflector »

[uquote="goldenandy",url="/forum/viewtopic.php?p=3568013#p3568013"]во вложении - графическая библиотека. шрифты, линии, прямоугольники, окружности, спрайты.[/uquote]
Допустим есть шрифт 12x20, что требуется для отрисовки одного символа? Задаем в нужном месте окно 12x20, шлем команду начала отрисовки, затем перебираем в цикле 30 байт(240 бит), если бит включен то шлем два байт одного цвета, иначе другого, при этом если у нас работа идет по SPI, то RS достаточно установить один раз для всех 30 байт. Итого общее количество отправляемых байт равно 22 + 30*2 = 82. У тебя в либе цикл по высоте, внутри него вложено еще два цикла, один из них по ширине, второй вообще непонятно для чего... Внутри цикла по ширине проверяются биты и вызывается функция рисующая точку, с 5-ю параметрами. Функция тяжелая и вызывается много где, так что шансы на инлайн не такие и высокие. Для отрисовки точки нужно отправить на дисплей 11 * 2 байт, перед каждой парой байт выставить RS и еще эта пара обрамляется двумя установками CS, для чего нужно дождаться фактической передачи данных. Более того, это все происходит не в самой функции вывода точки, она эту работу переадресует функции заливки области, опять же передавая 5 параметров. Еще и в зависимости от ориентации экрана точки рисуются по-разному замедляя все еще больше, хотя этого тоже можно избежать... Итого только если подсчитать количество передаваемых на дисплей байт, то оно больше в 30 * 22 / 82 = 8 раз, а если учесть все остальное, то медленнее может быть и раз в 20...
Остальное так же рисуется, даже вертикальные и горизонтальные линии рисует по одной точке, хотя чем таким принципиальным отличается линия от прямоугольной области, которая заливается гораздо быстрее? Ничем, это прямоугольник единичной высоты или ширины.
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение GoldenAndy »

Reflector, за все надо платить.
Библиотека не знает, какой у нас дисплей. И будет работать даже с монохромником от нокии 84*48 пикселей.
Библиотека умеет выводить текст в разных направлениях и с возможностью отзеркаливания по двум координатам.
Если выкинуть возможности вращения (надо, кстати, об этом подумать и сделать через условную компиляцию), то символ в режиме FONT_BIT_FLOW можно будет выводить заданием области символа и далее, потоком гнать биты.

По линиям - если вы внимательно смотрели код, то там горизонтальные и вертикальные линии умеют так же рисоваться в потоковом режиме - смотрите дефайн DISPLAY_USE_AREA.

И да, человек попросил исходники - он их получил.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение Reflector »

[uquote="goldenandy",url="/forum/viewtopic.php?p=3568086#p3568086"]Reflector, за все надо платить.
Библиотека не знает, какой у нас дисплей. И будет работать даже с монохромником от нокии 84*48 пикселей.[/uquote]
Во-первых, что-то я там не то насчитал :) Должно быть 22 + 12*20*2 = 502 байта в первом случае и 22 * 12*20 = 3168 во-втором, т.е. разница в 6.3 раза.
Во-вторых, у меня в либе поддержка 5 разных дисплеев, у каждого 4 ориентации и в любой из них рисование линий или текста одинаковое, отличие только в инициализации или функции установки окна. С монохромным она конечно не работает, но это уже совсем другой тип дисплеев, там можно весь экран в памяти держать, тем более я работаю с STM32 и там этой памяти много.

Библиотека умеет выводить текст в разных направлениях и с возможностью отзеркаливания по двум координатам.

Все цветные дисплеи однотипные, там можно задавать направление отрисовки по любой оси, собственно потому один и то же код и может работать при разной ориентации экрана. Другими словами если в обычном режиме отрисовка идет слева направо и сверху вниз, то настроив ее так чтобы выводило справа налево можно так же быстро нарисовать отзеркаленый символ. Хотя если учесть насколько редко такой вывод в принципе нужен, можно спокойно делать быструю обычную функцию и медленную специальную, по крайней мере на твоих скринах часов я ни одного повернутого или отзеркаленного символа не вижу...

По линиям - если вы внимательно смотрели код, то там горизонтальные и вертикальные линии умеют так же рисоваться в потоковом режиме - смотрите дефайн DISPLAY_USE_AREA.

Это я проглядел, но можно еще в разы ускорить рисование и наклонных линий...

И да, человек попросил исходники - он их получил.

С одной стороны да, а с другой потом и он с кем-то поделится и в итоге получается, что большинство умеющих хождение либ медленно рисуют символы по точкам :)
Последний раз редактировалось Reflector Пн фев 11, 2019 21:45:00, всего редактировалось 1 раз.
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение GoldenAndy »

Reflector, ну если так пошло, то считать надо не байтами, а словами. Ибо дисплей 16-битный. (И да, я считаю, что по SPI на аврках командовать такими дисплеями грустно, даже на СТМках грустновато, но там спасает ДМА).
Задание области вывода - 5 слов, 2 слова - вывод одного пикселя. Итого 7 слов на пиксель.
Шрифт 12*20: один символ = 240 пикселей. 240 * 7 = 1680 слов.

Это если попиксельно. Если через область вывода - 5 слов - задание области, команда перехода в выовд цветовых данных - одно слово, 240 слов цвета пикселей. Итого 246 слов. Я написал, что попробую пересмотреть (когда будет время) вывод символа через область. Ценой отказа от зеркалирования и поворота. Ибо иначе математика сожрет все преимщества потокового вывода цвета.

И да, вы можете предложить топикстартеру свою библитоеку на 5 дисплеев. Я не претендую на истину в последней инстанции....
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение Reflector »

[uquote="goldenandy",url="/forum/viewtopic.php?p=3568115#p3568115"]ну если так пошло, то считать надо не байтами, а словами. Ибо дисплей 16-битный. (И да, я считаю, что по SPI на аврках командовать такими дисплеями грустно, даже на СТМках грустновато, но там спасает ДМА).
Задание области вывода - 5 слов, 2 слова - вывод одного пикселя. Итого 7 слов на пиксель.
Шрифт 12*20: один символ = 240 пикселей. 240 * 7 = 1680 слов.[/uquote]
Я ориентировался по твоей SPI либе, там задание окна такое:
Спойлер

Код: Выделить всё

void setOutputAreaILI9341(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2)
{
   sendCommandILI9341(ILI9341_CASET);
   sendDataILI9341(HI(x1));
   sendDataILI9341(LO(x1));
   sendDataILI9341(HI(x2));
   sendDataILI9341(LO(x2));
   sendCommandILI9341(ILI9341_RASET);
   sendDataILI9341(HI(y1));
   sendDataILI9341(LO(y1));
   sendDataILI9341(HI(y2));
   sendDataILI9341(LO(y2));
   setColorWriteModeILI9341();
}

Где каждая из 11 функций в итоге вызывает sendWordILI9341(), которая остылает 2 байта, итого 11 слов. Кстати, вывод самих данные цвета то я не посчитал, будет 24 * 12*20 = 3456.

И да, вы можете предложить топикстартеру свою библитоеку на 5 дисплеев. Я не претендую на истину в последней инстанции....

Он в твоей не особо ориентируется, а моя на С++17, для STM32 и тянет за собой еще другие мои либы :)
Последний раз редактировалось Reflector Пн фев 11, 2019 21:57:27, всего редактировалось 1 раз.
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение GoldenAndy »

Reflector писал(а):Все цветные дисплеи однотипные, там можно задавать направление отрисовки по любой оси, собственно потому один и то же код и может работать при разной ориентации экрана. Другими словами если в обычном режиме отрисовка идет слева направо и сверху вниз, то настроив ее так чтобы выводило справа налево можно так же быстро нарисовать отзеркаленый символ. Хотя если учесть насколько редко такой вывод в принципе нужен, можно спокойно делать быструю обычную функцию и медленную специальную, по крайней мере на твоих скринах часов я ни одного повернутого или отзеркаленного символа не вижу...


Если завязваться на команду MADCTL - теряется универсальность либы.

И да, на брудершафт мы вроде не пили...
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение Reflector »

[uquote="goldenandy",url="/forum/viewtopic.php?p=3568126#p3568126"]Если завязваться на команду MADCTL - теряется универсальность либы.[/uquote]
MADCTL же для чтения? Я ничего не говорил про чтение.
А, это просто чтение режимов... Их не нужно читать, при необходиомсти их нужно заново выставлять.
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: ILI9341 то ли я .... то ли лыжи не едут !!!!

Сообщение GoldenAndy »

не-а. MADCTL - регистр, как раз отвечающий за направление записи данных в видеопамять дисплея.
Запись в регистр - команда 0x36, чтение этого регистра - 0x0B.

И да, вы правы, я сейчас глянул ДШ - задание окна у ILI9341 оперирует восьмибитными аргументами.
Т.е. для задания окна надо отправить 10 слов, значимые у которых будут только младшие байты.
Так что в либе все верно.

А по сложностям библиотек.... тут или делать универсальность, либо затачивать под каждый дисплей отдельную библиотечку.
По тексту - я заморочился, мне повернутый текст нужен был в другом проекте. Поэтому он у меня и появился.
Если просто выводить текст - я там выше выкладывал дамп несжатого шрифта. Автор дисплей запустил.
Инициализацию, команды задания области и отправки цвета пикселя может подсмотреть - и нарисовать своё.
Судя по тому, что у человека реализованы
broocks писал(а):часы и управление температурой теплых полов во всей квартире, связь по nRF24L01 5 абонентов, датчик температуру по I2

- это явно не ардуино-стайл с воплями "напишите мне скетч".
Посмотрит и напишет своё. Код там простой.

Я тоже свою либу не писал в одну харю. Линия и окружность - алгоритм Брезенхема с вики...
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Ответить

Вернуться в «AVR»