Google_links

Показаны сообщения с ярлыком LCD driver ILI9341 2.2inch spi 320x240 65k 262k LCD 320x240 driver ili9341 spi 10Mhz on STM32 draw round. Показать все сообщения
Показаны сообщения с ярлыком LCD driver ILI9341 2.2inch spi 320x240 65k 262k LCD 320x240 driver ili9341 spi 10Mhz on STM32 draw round. Показать все сообщения

вторник, 20 января 2015 г.

LCD Color ili9341 driver 2.2inch 320x240 65k 262k SPI 10Mhz with STM32 ARM

LCD Color ili9341 driver 2.2inch 320x240 65k 262k 
- draw circle and filled circle
- draw line  and line circle
- draw rectangle  and rectanglecircle
- draw square  and  square  circle
- draw image for points
- draw scale voltage, current, etc.

Interface 
- SPI 
- Speed 10Mhz 

Controller  STM32L152 ARM




 * ILI9341  ---------STM32L152 ----STM32F4xx----DESCRIPTION
 *
 * SDO (MISO)-----PB14-------------PF8---------------Output from LCD for SPI. Not used, can be left
 * LED---------------3.3V--------------3.3V--------------Backlight
 * SCK---------------PB1---------------PF7---------------SPI clock
 * SDI (MOSI)------PB15-------------PF9---------------SPI master output
 * WRX or D/C-----PB11-------------PD13-------------Data/Command register
 * RESET------------PB3--------------PD12-------------Reset LCD
 * CS-----------------PB10-------------PC2---------------Chip select for SPI
 * GND--------------GND-------------GND--------------Ground
 * VCC---------------5V----------------5V----------------Positive power supply


MAIN
#include "stm32l1xx.h"
#include "stm32l1xx_conf.h" // add h (ADC, GPIO, TIM и т.д.)
#include "tm_stm32f4_spi.h"
#include "tm_stm32f4_ili9341.h"
#include "tm_stm32f4_fonts.h"
#include "logo.h"
#include <stdio.h>
#include <stdlib.h>


void InitPeriph(void);

void InitPeriph()
{
  RCC->CR |= RCC_CR_HSION; //Включаем тактовый генератор HSI
  while(!(RCC_CR_HSION)); //Ждем его стабилизации
  RCC->CFGR |= RCC_CFGR_SW_HSI; //Выбираем источником тактовой частоты SYSCLK генератор HSI
  RCC->CR &= ~RCC_CR_MSION; //Отключаем генератор MSI. 
  

  RCC->AHBENR |= RCC_AHBENR_GPIOAEN; //Включаем тактирование порта А
  GPIOA->MODER |= GPIO_MODER_MODER5; //Аналоговый вход/выход линии PA5
  GPIOA->PUPDR &= ~GPIO_PUPDR_PUPDR5; //Отключаем подтягивающие резисторы
} 


int main(void) 
      {     
        SystemInit();  //Initialize system 
        TM_ILI9341_Init(); //Initialize ILI9341
        TM_ILI9341_Rotate(TM_ILI9341_Orientation_Landscape_2);  //Rotate LCD for 90 degrees
        //TM_ILI9341_Fill(ILI9341_COLOR_MAGENTA);   //FIll lcd with color
        TM_ILI9341_Fill(ILI9341_COLOR_BLACK);
   
        TM_ILI9341_IMAGE(130, 10, 60, 50, Front3); // x, y, size x, size y, image   // Logo In Volt
        TM_ILI9341_DrawRectangle(310, 220, 280, 20, ILI9341_COLOR_WHITE); // Load
        TM_ILI9341_DrawLine(280, 40, 310, 40, ILI9341_COLOR_WHITE);
        TM_ILI9341_DrawLine(280, 60, 310, 60, ILI9341_COLOR_WHITE);
        TM_ILI9341_DrawLine(280, 80, 310, 80, ILI9341_COLOR_WHITE);
        TM_ILI9341_DrawLine(280, 100, 310, 100, ILI9341_COLOR_WHITE);
        TM_ILI9341_DrawLine(280, 120, 310, 120, ILI9341_COLOR_WHITE);
        TM_ILI9341_DrawLine(280, 140, 310, 140, ILI9341_COLOR_WHITE);
        TM_ILI9341_DrawLine(280, 160, 310, 160, ILI9341_COLOR_WHITE);
        TM_ILI9341_DrawLine(280, 180, 310, 180, ILI9341_COLOR_WHITE);
        TM_ILI9341_DrawLine(280, 200, 310, 200, ILI9341_COLOR_WHITE);
        TM_ILI9341_DrawLine(280, 220, 310, 220, ILI9341_COLOR_WHITE);
  //TM_ILI9341_Puts(275, 2, "200%", &TM_Font_11x18, ILI9341_COLOR_WHITE,  ILI9341_COLOR_BLACK);
  TM_ILI9341_Puts(275, 223, "Load", &TM_Font_11x18, ILI9341_COLOR_WHITE, ILI9341_COLOR_BLACK);
    
       Draw_Load(19); // тестирование при включении
       Draw_Load(0);  // тестирование при включении

        Init_Voltage_Range();       // нарисовать начальные рамки 
        Draw_Voltage_In_Range(400); // тестирование при включении
        Draw_Voltage_In_Range(0);   // тестирование при включении
        Draw_Voltage_Out_Range(400);// тестирование при включении
        Draw_Voltage_Out_Range(0);  // тестирование при включении
    

      TM_ILI9341_DrawFilledRectangle(20, 180, 26, 220, ILI9341_COLOR_GREEN);// грудусник 1
    TM_ILI9341_Puts(15, 170, "38C", &TM_Font_7x10, ILI9341_COLOR_GREEN, ILI9341_COLOR_BLACK);
    TM_ILI9341_DrawFilledCircle(23, 220, 8, ILI9341_COLOR_RED);  
    TM_ILI9341_Puts(17, 216, "t1", &TM_Font_7x10, ILI9341_COLOR_BLACK,  ILI9341_COLOR_RED);
   
    TM_ILI9341_DrawFilledRectangle(50, 180, 56, 220, ILI9341_COLOR_GREEN);// грудусник 2
    TM_ILI9341_Puts(45, 170, "49C", &TM_Font_7x10, ILI9341_COLOR_GREEN, ILI9341_COLOR_BLACK);
    TM_ILI9341_DrawFilledCircle(53, 220, 8, ILI9341_COLOR_RED); 
    TM_ILI9341_Puts(47, 216, "t2", &TM_Font_7x10, ILI9341_COLOR_BLACK, ILI9341_COLOR_RED);
    
    
    //Put string with black foreground color and blue background with 11x18px font
    TM_ILI9341_Puts(100, 200, " Warning 06", &TM_Font_11x18, ILI9341_COLOR_BLACK, ILI9341_COLOR_RED);
    TM_ILI9341_Puts(100, 222, " Low Input Voltage", &TM_Font_7x10, ILI9341_COLOR_BLACK, ILI9341_COLOR_RED);
    
   while (1) 
    {
      
     Draw_Voltage_In_Range(100);
     Draw_Voltage_Out_Range(220);
     Draw_Voltage_Out_Range(223);
     Draw_Voltage_In_Range(400);
     Draw_Voltage_Out_Range(221);
     Draw_Voltage_In_Range(270); 
     
     Draw_Load(19);
     Draw_Load(5);
     Draw_Load(11);
      
    /*  
     //Rotate LCD for 90 degrees
    TM_ILI9341_Rotate(TM_ILI9341_Orientation_Landscape_2);
    //FIll lcd with color
    TM_ILI9341_Fill(ILI9341_COLOR_MAGENTA);
    //TM_ILI9341_Fill(ILI9341_COLOR_BLACK); 
    //Rotate LCD for 90 degrees
    TM_ILI9341_Rotate(TM_ILI9341_Orientation_Landscape_2);
    //FIll lcd with color
    TM_ILI9341_Fill(ILI9341_COLOR_MAGENTA);
    //Draw white circle
    TM_ILI9341_DrawCircle(60, 60, 40, ILI9341_COLOR_GREEN);
    //Draw red filled circle
    TM_ILI9341_DrawFilledCircle(60, 60, 35, ILI9341_COLOR_RED);
    //Draw blue rectangle
    TM_ILI9341_DrawRectangle(120, 20, 220, 100, ILI9341_COLOR_BLUE);
    //Draw black filled rectangle
    TM_ILI9341_DrawFilledRectangle(130, 30, 210, 90, ILI9341_COLOR_BLACK);
    //Draw line with custom color 0x0005
    TM_ILI9341_DrawLine(10, 120, 310, 120, 0x0005);
    
    //Put string with black foreground color and blue background with 11x18px font
    TM_ILI9341_Puts(60, 130, "Poviste zarplatu", &TM_Font_11x18, ILI9341_COLOR_BLACK, ILI9341_COLOR_BLUE2);
    //Put string with black foreground color and blue background with 11x18px font
    TM_ILI9341_Puts(60, 150, "Grishe Anofrievu", &TM_Font_11x18, ILI9341_COLOR_BLACK, ILI9341_COLOR_BLUE2);
    //Put string with black foreground color and blue background with 11x18px font
    TM_ILI9341_Puts(100, 170, "Pojaluista!", &TM_Font_11x18, ILI9341_COLOR_RED, ILI9341_COLOR_BLUE2);
    //Put string with black foreground color and blue background with 11x18px font
    TM_ILI9341_Puts(40, 190, "I eshe premiyu $500", &TM_Font_11x18, ILI9341_COLOR_GREEN, ILI9341_COLOR_BLUE2);
    //Put string with black foreground color and red background with 11x18px font
    TM_ILI9341_Puts(180, 225, "www.on-line-test.com", &TM_Font_7x10, ILI9341_COLOR_BLACK, ILI9341_COLOR_ORANGE);
    
    TM_ILI9341_Delay(0x00FFFFFF); 
    
    TM_ILI9341_Fill(ILI9341_COLOR_BLACK); 
     
    TM_ILI9341_DrawRange(120, 200, 100, ILI9341_COLOR_GREEN); // мое )))
    TM_ILI9341_DrawRange(120, 200, 99, ILI9341_COLOR_GREEN); // мое )))
    TM_ILI9341_DrawRange(120, 200, 98, ILI9341_COLOR_GREEN); // мое )))
    TM_ILI9341_DrawRange(120, 200, 97, ILI9341_COLOR_GREEN); // мое )))
    TM_ILI9341_DrawRange(120, 200, 96, ILI9341_COLOR_GREEN); // мое )))
    TM_ILI9341_DrawRange(120, 200, 95, ILI9341_COLOR_GREEN); // мое )))
    TM_ILI9341_DrawRange(120, 200, 94, ILI9341_COLOR_BLUE); // мое )))
    TM_ILI9341_DrawRange(120, 200, 93, ILI9341_COLOR_BLUE); // мое )))
    TM_ILI9341_DrawRange(120, 200, 92, ILI9341_COLOR_BLUE); // мое )))
    TM_ILI9341_DrawRange(120, 200, 91, ILI9341_COLOR_BLUE); // мое )))
    TM_ILI9341_DrawRange(120, 200, 90, ILI9341_COLOR_BLUE); // мое )))
    TM_ILI9341_DrawRange(120, 200, 89, ILI9341_COLOR_BLUE); // мое )))
    TM_ILI9341_DrawRange(120, 200, 88, ILI9341_COLOR_RED); // мое )))
    TM_ILI9341_DrawRange(120, 200, 87, ILI9341_COLOR_RED); // мое )))
    TM_ILI9341_DrawRange(120, 200, 86, ILI9341_COLOR_RED); // мое )))
    TM_ILI9341_DrawRange(120, 200, 85, ILI9341_COLOR_RED); // мое )))
    TM_ILI9341_DrawRange(120, 200, 84, ILI9341_COLOR_RED); // мое )))
    TM_ILI9341_DrawRange(120, 200, 83, ILI9341_COLOR_ORANGE); // мое )))
    TM_ILI9341_DrawRange(120, 200, 82, ILI9341_COLOR_ORANGE); // мое )))
    TM_ILI9341_DrawRange(120, 200, 81, ILI9341_COLOR_ORANGE); // мое )))
    TM_ILI9341_DrawRange(120, 200, 80, ILI9341_COLOR_ORANGE); // мое )))
    */
    }
}

tm_stm32f4_spi.c
#include "tm_stm32f4_spi.h"
uint8_t TM_SPI_Send(SPI_TypeDef* SPIx, uint8_t data) {
//Fill output buffer with data
SPIx->DR = data;
//Wait for transmission to complete
while (!SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE));
//Wait for received data to complete
while (!SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE));
//Wait for SPI to be ready
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_BSY));
//Return data from buffer
return SPIx->DR;
}

void TM_SPI_SendMulti(SPI_TypeDef* SPIx, uint8_t *dataOut, uint8_t *dataIn, uint16_t count) {
uint8_t i;
for (i = 0; i < count; i++) {
dataIn[i] = TM_SPI_Send(SPIx, dataOut[i]);
}
}

void TM_SPI_WriteMulti(SPI_TypeDef* SPIx, uint8_t *dataOut, uint16_t count) {
uint16_t i;
for (i = 0; i < count; i++) {
TM_SPI_Send(SPIx, dataOut[i]);
}
}

void TM_SPI_ReadMulti(SPI_TypeDef* SPIx, uint8_t *dataIn, uint8_t dummy, uint16_t count) {
uint16_t i;
for (i = 0; i < count; i++) {
dataIn[i] = TM_SPI_Send(SPIx, dummy);
}
}


tm_stm32f4_spi.h
#ifndef TM_SPI_H
#define TM_SPI_H 130
/**
 * Library dependencies
 * - STM32F4xx
 * - STM32F4xx RCC
 * - STM32F4xx GPIO
 * - STM32F4xx SPI
 * - defines.h
 */
/**
 * Includes
 */
#include "stm32l1xx_conf.h"
#include "stm32l1xx.h"
//#include "defines.h"

/**
 * Every SPIx has 2 pins for MISO, MOSI and SCK
 */
typedef enum {
TM_SPI_PinsPack_1,
TM_SPI_PinsPack_2,
TM_SPI_PinsPack_3
} TM_SPI_PinsPack_t;

/**
 * Every SPIx can work in 4 different modes
 */
typedef enum {
TM_SPI_Mode_0, //Clock polarity low, clock phase 1st edge
TM_SPI_Mode_1, //Clock polarity low, clock phase 2nd edge
TM_SPI_Mode_2, //Clock polarity high, clock phase 1st edge
TM_SPI_Mode_3 //Clock polarity high, clock phase 2nd edge
} TM_SPI_Mode_t;

//----- SPI1 options start -------
//Options can be overwriten in defines.h file
#ifndef TM_SPI1_PRESCALER
#define TM_SPI1_PRESCALER SPI_BaudRatePrescaler_32
#endif
//Specify datasize
#ifndef TM_SPI1_DATASIZE
#define TM_SPI1_DATASIZE SPI_DataSize_8b
#endif
//Specify which bit is first
#ifndef TM_SPI1_FIRSTBIT
#define TM_SPI1_FIRSTBIT SPI_FirstBit_MSB
#endif
//Mode, master or slave
#ifndef TM_SPI1_MASTERSLAVE
#define TM_SPI1_MASTERSLAVE SPI_Mode_Master
#endif
//Specify mode of operation, clock polarity and clock phase
#ifndef TM_SPI1_MODE
#define TM_SPI1_MODE TM_SPI_Mode_0
#endif
//----- SPI1 options end -------

//----- SPI2 options start -------
//Options can be overwriten in defines.h file
#ifndef TM_SPI2_PRESCALER
#define TM_SPI2_PRESCALER SPI_BaudRatePrescaler_32
#endif
//Specify datasize
#ifndef TM_SPI2_DATASIZE
#define TM_SPI2_DATASIZE SPI_DataSize_8b
#endif
//Specify which bit is first
#ifndef TM_SPI2_FIRSTBIT
#define TM_SPI2_FIRSTBIT SPI_FirstBit_MSB
#endif
//Mode, master or slave
#ifndef TM_SPI2_MASTERSLAVE
#define TM_SPI2_MASTERSLAVE SPI_Mode_Master
#endif
//Specify mode of operation, clock polarity and clock phase
#ifndef TM_SPI2_MODE
#define TM_SPI2_MODE TM_SPI_Mode_0
#endif
//----- SPI2 options end -------

//----- SPI3 options start -------
//Options can be overwriten in defines.h file
#ifndef TM_SPI3_PRESCALER
#define TM_SPI3_PRESCALER SPI_BaudRatePrescaler_32
#endif
//Specify datasize
#ifndef TM_SPI3_DATASIZE
#define TM_SPI3_DATASIZE SPI_DataSize_8b
#endif
//Specify which bit is first
#ifndef TM_SPI3_FIRSTBIT
#define TM_SPI3_FIRSTBIT SPI_FirstBit_MSB
#endif
//Mode, master or slave
#ifndef TM_SPI3_MASTERSLAVE
#define TM_SPI3_MASTERSLAVE SPI_Mode_Master
#endif
//Specify mode of operation, clock polarity and clock phase
#ifndef TM_SPI3_MODE
#define TM_SPI3_MODE TM_SPI_Mode_0
#endif
//----- SPI3 options end -------

//----- SPI4 options start -------
//Options can be overwriten in defines.h file
#ifndef TM_SPI4_PRESCALER
#define TM_SPI4_PRESCALER SPI_BaudRatePrescaler_32
#endif
//Specify datasize
#ifndef TM_SPI4_DATASIZE
#define TM_SPI4_DATASIZE SPI_DataSize_8b
#endif
//Specify which bit is first
#ifndef TM_SPI4_FIRSTBIT
#define TM_SPI4_FIRSTBIT SPI_FirstBit_MSB
#endif
//Mode, master or slave
#ifndef TM_SPI4_MASTERSLAVE
#define TM_SPI4_MASTERSLAVE SPI_Mode_Master
#endif
//Specify mode of operation, clock polarity and clock phase
#ifndef TM_SPI4_MODE
#define TM_SPI4_MODE TM_SPI_Mode_0
#endif
//----- SPI4 options end -------

//----- SPI5 options start -------
//Options can be overwriten in defines.h file
#ifndef TM_SPI5_PRESCALER
#define TM_SPI5_PRESCALER SPI_BaudRatePrescaler_32
#endif
//Specify datasize
#ifndef TM_SPI5_DATASIZE
#define TM_SPI5_DATASIZE SPI_DataSize_8b
#endif
//Specify which bit is first
#ifndef TM_SPI5_FIRSTBIT
#define TM_SPI5_FIRSTBIT SPI_FirstBit_MSB
#endif
//Mode, master or slave
#ifndef TM_SPI5_MASTERSLAVE
#define TM_SPI5_MASTERSLAVE SPI_Mode_Master
#endif
//Specify mode of operation, clock polarity and clock phase
#ifndef TM_SPI5_MODE
#define TM_SPI5_MODE TM_SPI_Mode_0
#endif
//----- SPI5 options end -------

//----- SPI6 options start -------
//Options can be overwriten in defines.h file
#ifndef TM_SPI6_PRESCALER
#define TM_SPI6_PRESCALER SPI_BaudRatePrescaler_32
#endif
//Specify datasize
#ifndef TM_SPI6_DATASIZE
#define TM_SPI6_DATASIZE SPI_DataSize_8b
#endif
//Specify which bit is first
#ifndef TM_SPI6_FIRSTBIT
#define TM_SPI6_FIRSTBIT SPI_FirstBit_MSB
#endif
//Mode, master or slave
#ifndef TM_SPI6_MASTERSLAVE
#define TM_SPI6_MASTERSLAVE SPI_Mode_Master
#endif
//Specify mode of operation, clock polarity and clock phase
#ifndef TM_SPI6_MODE
#define TM_SPI6_MODE TM_SPI_Mode_0
#endif
//----- SPI6 options end -------


/**
 * Initialize each SPIx separately
 *
 */
/**
 * Initialize SPIx
 *
 * Parameters:
 * - SPI_TypeDef* SPIx:
 * SPI 1 - 6
 * - TM_SPI_PinsPack_t pinspack: select pins pack to use
 * - TM_SPI_PinsPack_1
 * - TM_SPI_PinsPack_2
 */
extern void TM_SPI_Init(SPI_TypeDef* SPIx, TM_SPI_PinsPack_t pinspack);


/**
 * SPI1 uses pins:
 * - Pins pack 1:
 * - MOSI: PA7 
 * - MISO: PA6
 * - SCK:  PA5
 * - Pins pack 2:
 * - MOSI: PB5
 * - MISO: PB4
 * - SCK:  PB3
 */
extern void TM_SPI1_Init(TM_SPI_PinsPack_t pinspack);

/**
 * SPI2 uses pins:
 * - Pins pack 1:
 * - MOSI: PC3
 * - MISO: PC2
 * - SCK:  PB10
 * - Pins pack 2:
 * - MOSI: PB15
 * - MISO: PB14
 * - SCK:  PB13
 * - Pins pack 3:
 * - MOSI: PI3
 * - MISO: PI2
 * - SCK:  PI0
 */
extern void TM_SPI2_Init(TM_SPI_PinsPack_t pinspack);

/**
 * SPI3 uses pins:
 * - Pins pack 1:
 * - MOSI: PB5
 * - MISO: PB4
 * - SCK:  PB3
 * - Pins pack 2:
 * - MOSI: PC12
 * - MISO: PC11
 * - SCK:  PC10
 */
extern void TM_SPI3_Init(TM_SPI_PinsPack_t pinspack);

/**
 * SPI4 uses pins:
 * - Pins pack 1:
 * - MOSI: PE6
 * - MISO: PE5
 * - SCK:  PE2
 * - Pins pack 2:
 * - MOSI: PE14
 * - MISO: PE13
 * - SCK:  PE12
 */
extern void TM_SPI4_Init(TM_SPI_PinsPack_t pinspack);

/**
 * SPI5 uses pins:
 * - Pins pack 1:
 * - MOSI: PF9
 * - MISO: PF8
 * - SCK:  PF7
 * - Pins pack 2:
 * - MOSI: PF11
 * - MISO: PH7
 * - SCK:  PH6
 */
extern void TM_SPI5_Init(TM_SPI_PinsPack_t pinspack);

/**
 * SPI6 uses pins:
 * - Pins pack 1:
 * - MOSI: PG14
 * - MISO: PG12
 * - SCK:  PG13
 */
extern void TM_SPI6_Init(TM_SPI_PinsPack_t pinspack);

/**
 * Send and receive data over SPI
 *
 * Parameters:
 * - SPI_TypeDef* SPIx: Select SPI which will operate with data
 * - uint8_t data: data to be sent
 *
 * Returns: Data returned from slave
 */
extern uint8_t TM_SPI_Send(SPI_TypeDef* SPIx, uint8_t data);

/**
 * Send and receive multiple data bytes over SPI
 *
 * Parameters:
 * - SPI_TypeDef* SPIx: Select SPI which will operate with data
 * - uint8_t dataOut: pointer to data to be sent out
 * - uint8_t dataIn: pointer to received data
 * - uint8_t count: number of bytes to send
 *
 * No returns
 */
extern void TM_SPI_SendMulti(SPI_TypeDef* SPIx, uint8_t *dataOut, uint8_t *dataIn, uint16_t count);

/**
 * Write multiple data via SPI
 *
 * Parameters:
 * - SPI_TypeDef* SPIx: Select SPI which will operate with data
 * - uint8_t dataOut: pointer to data to be sent out
 * - uint8_t count: number of bytes to send
 *
 * No returns
 */
extern void TM_SPI_WriteMulti(SPI_TypeDef* SPIx, uint8_t *dataOut, uint16_t count);

/**
 * Send and receive multiple data bytes over SPI
 *
 * Parameters:
 * - SPI_TypeDef* SPIx: Select SPI which will operate with data
 * - uint8_t dataIn: pointer to received data
 * - uint8_t dummy: dummy byte to be sent to SPI
 * - uint8_t count: number of bytes to receive
 *
 * No returns
 */
extern void TM_SPI_ReadMulti(SPI_TypeDef* SPIx, uint8_t *dataIn, uint8_t dummy, uint16_t count);

#endif


tm_stm32f4_ili9341.c
#include "tm_stm32f4_ili9341.h"
#include "tm_stm32f4_fonts.h"
#include "stm32l1xx_conf.h" // подключить все хидеры (ADC, GPIO, TIM и т.д.)
//#include "stm32l1xx_gpio.h"
//#include "stm32l1xx_spi.h" 
#include <stdio.h>
#include <stdlib.h>

   
uint16_t ILI9341_x;
uint16_t ILI9341_y;
TM_ILI9341_Options_t ILI9341_Opts;
uint8_t ILI9341_INT_CalledFromPuts = 0;

void TM_ILI9341_Init() 
  {
   RCC->AHBENR |= RCC_AHBENR_GPIOBEN; //Включить тактирование порта B
   GPIOB->MODER = 0x00000000;
   //^^^  Настроить GPIOB, Pin3 - на выход RESET ILI9341
   GPIOB->MODER |= GPIO_MODER_MODER3_0;     // настроить линию на выход
   GPIOB->OTYPER &= ~GPIO_OTYPER_OT_3;      // Push-Pull (двухтактный выход) 
   GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR3;      // подтягивающие резисторы отключены
   GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR3;// Настроить скорость порта 40Мгц  
   
   //^^^  Настроить GPIOB, Pin10 - на выход D/C(WRX) ILI9341
   GPIOB->MODER |= GPIO_MODER_MODER10_0;     // настроить линию на выход
   GPIOB->OTYPER &= ~GPIO_OTYPER_OT_10;      // Push-Pull (двухтактный выход) 
   GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR10;      // подтягивающие резисторы отключены
   GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR10;// Настроить скорость порта 40Мгц 
   
   //^^^  Настроить GPIOB, Pin11 - на выход CS ILI9341
   GPIOB->MODER |= GPIO_MODER_MODER11_0;     // настроить линию на выход
   GPIOB->OTYPER &= ~GPIO_OTYPER_OT_11;      // Push-Pull (двухтактный выход) 
   GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR11;      // подтягивающие резисторы отключены
   GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR11;// Настроить скорость порта 40Мгц 
   
   //Настроить SPI2 выходы 
   //^^^  Настроить GPIOB, Pin12 - просто на выход CS (нужно пробовать и тестировать) 
   //GPIOB->MODER |= GPIO_MODER_MODER12_0;     // настроить линию на выход
   //GPIOB->OTYPER &= ~GPIO_OTYPER_OT_12;      // Push-Pull (двухтактный выход) 
   //GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR12;      // подтягивающие резисторы отключены
   //GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR12;// Настроить скорость порта 40Мгц
  
   //^^^ Настроить GPIOB, Pin13 на выход SCK (SPI2)^^^
   GPIOB->MODER |= GPIO_MODER_MODER13_1;     // настроить как альтернативный выход AF
   GPIOB->OTYPER &= ~GPIO_OTYPER_OT_13;      // Push-Pull (двухтактный выход) 
   GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR13;      // подтягивающие резисторы отключены
   GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR13;// Настроить скорость порта 40Мгц
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2); //настроить(линия AF5) SPI2 на порт GPIOB pin13 
  
   //^^^  Настроить GPIOB, Pin14 - просто на вход MISI - DATA (SPI2)^^^ 
   GPIOB->MODER |= GPIO_MODER_MODER14_1;     // настроить линию на выход
   GPIOB->OTYPER &= ~GPIO_OTYPER_OT_14;      // Push-Pull (двухтактный выход) 
   GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR14;      // подтягивающие резисторы отключены
   GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR14;// Настроить скорость порта 40Мгц
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2); //настроить(линия AF5) SPI2 на порт GPIOB pin14 
   
   //^^^ Настроить GPIOB, Pin15 на выход MOSI - DATA (SPI2)^^^ 
   GPIOB->MODER |= GPIO_MODER_MODER15_1;     // настроить как альтернативный выход AF
   GPIOB->OTYPER &= ~GPIO_OTYPER_OT_15;      // Push-Pull (двухтактный выход) 
   GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR15;      // подтягивающие резисторы отключены
   GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR15;// Настроить скорость порта 40Мгц
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2); //настроить(линия AF5) SPI2 на порт GPIOB pin15 
    
   //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   RCC->APB1ENR |= RCC_APB1ENR_SPI2EN;  // вкл. тактирование SPI2
   SPI_InitTypeDef   SPI_InitStructure; // структра для SPI
   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;// назначаем контроллер Master`ом
   SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //настроить линию только на передачу 
   // выбор скорости передачи Fpclk/BaudRatePrescaler = 32MHz/32 = 1000kHz 
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
   // высокий уровень сигнала синхронизации на линии SCK в состоянии ожидания = 1
   SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;        // как бы странно нужно уточнить
   SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;      // фаза для SCK
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;// первым передаеться страший бит MSB
   SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // формат данных 8 бит 
   SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; // программное управление выводом NSS
   SPI_InitStructure.SPI_CRCPolynomial = 0; // отключить CRC ПРОВЕРИТЬ!
   SPI_Init(SPI2, &SPI_InitStructure); // через структуру записываем заначения для инициализации
   //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   SPI_Cmd(SPI2, ENABLE); // ВКЛ SPI
   
   
   

        //GPIO_InitTypeDef GPIO_InitDef;
//RCC_AHB1PeriphClockCmd(ILI9341_WRX_CLK, ENABLE);
 
//GPIO_InitDef.GPIO_Pin = ILI9341_WRX_PIN;
//GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz;
//GPIO_InitDef.GPIO_Mode = GPIO_Mode_OUT;
//GPIO_InitDef.GPIO_OType = GPIO_OType_PP;
//GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_NOPULL;
//GPIO_Init(ILI9341_WRX_PORT, &GPIO_InitDef);


//RCC_AHB1PeriphClockCmd(ILI9341_CS_CLK, ENABLE);
//GPIO_InitDef.GPIO_Pin = ILI9341_CS_PIN;
//GPIO_Init(ILI9341_CS_PORT, &GPIO_InitDef);
//RCC_AHB1PeriphClockCmd(ILI9341_RST_CLK, ENABLE);
//GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_UP;
//GPIO_InitDef.GPIO_Pin = ILI9341_RST_PIN;
//GPIO_Init(ILI9341_RST_PORT, &GPIO_InitDef);

ILI9341_CS_SET;
//TM_SPI_Init(ILI9341_SPI, ILI9341_SPI_PINS);
TM_ILI9341_InitLCD();
ILI9341_x = ILI9341_y = 0;
ILI9341_Opts.Width = ILI9341_WIDTH;
ILI9341_Opts.Height = ILI9341_HEIGHT;
ILI9341_Opts.orientation = TM_ILI9341_Portrait;
TM_ILI9341_Fill(ILI9341_COLOR_WHITE);
}

void TM_ILI9341_InitLCD(void) {
ILI9341_RST_RESET;         // с раcкоментил
        TM_ILI9341_Delay(2000000); // я добавил 
ILI9341_RST_SET;
TM_ILI9341_SendCommand(ILI9341_RESET);
TM_ILI9341_Delay(2000000);
TM_ILI9341_SendCommand(ILI9341_POWERA);
TM_ILI9341_SendData(0x39);
TM_ILI9341_SendData(0x2C);
TM_ILI9341_SendData(0x00);
TM_ILI9341_SendData(0x34);
TM_ILI9341_SendData(0x02);
TM_ILI9341_SendCommand(ILI9341_POWERB);
TM_ILI9341_SendData(0x00);
TM_ILI9341_SendData(0xC1);
TM_ILI9341_SendData(0x30);
TM_ILI9341_SendCommand(ILI9341_DTCA);
TM_ILI9341_SendData(0x85);
TM_ILI9341_SendData(0x00);
TM_ILI9341_SendData(0x78);
TM_ILI9341_SendCommand(ILI9341_DTCB);
TM_ILI9341_SendData(0x00);
TM_ILI9341_SendData(0x00);
TM_ILI9341_SendCommand(ILI9341_POWER_SEQ);
TM_ILI9341_SendData(0x64);
TM_ILI9341_SendData(0x03);
TM_ILI9341_SendData(0x12);
TM_ILI9341_SendData(0x81);
TM_ILI9341_SendCommand(ILI9341_PRC);
TM_ILI9341_SendData(0x20);
TM_ILI9341_SendCommand(ILI9341_POWER1);
TM_ILI9341_SendData(0x23);
TM_ILI9341_SendCommand(ILI9341_POWER2);
TM_ILI9341_SendData(0x10);
TM_ILI9341_SendCommand(ILI9341_VCOM1);
TM_ILI9341_SendData(0x3E);
TM_ILI9341_SendData(0x28);
TM_ILI9341_SendCommand(ILI9341_VCOM2);
TM_ILI9341_SendData(0x86);
TM_ILI9341_SendCommand(ILI9341_MAC);
TM_ILI9341_SendData(0x48);
TM_ILI9341_SendCommand(ILI9341_PIXEL_FORMAT);
TM_ILI9341_SendData(0x55);
TM_ILI9341_SendCommand(ILI9341_FRC);
TM_ILI9341_SendData(0x00);
TM_ILI9341_SendData(0x18);
TM_ILI9341_SendCommand(ILI9341_DFC);
TM_ILI9341_SendData(0x08);
TM_ILI9341_SendData(0x82);
TM_ILI9341_SendData(0x27);
TM_ILI9341_SendCommand(ILI9341_3GAMMA_EN);
TM_ILI9341_SendData(0x00);
TM_ILI9341_SendCommand(ILI9341_COLUMN_ADDR);
TM_ILI9341_SendData(0x00);
TM_ILI9341_SendData(0x00);
TM_ILI9341_SendData(0x00);
TM_ILI9341_SendData(0xEF);
TM_ILI9341_SendCommand(ILI9341_PAGE_ADDR);
TM_ILI9341_SendData(0x00);
TM_ILI9341_SendData(0x00);
TM_ILI9341_SendData(0x01);
TM_ILI9341_SendData(0x3F);
TM_ILI9341_SendCommand(ILI9341_GAMMA);
TM_ILI9341_SendData(0x01);
TM_ILI9341_SendCommand(ILI9341_PGAMMA);
TM_ILI9341_SendData(0x0F);
TM_ILI9341_SendData(0x31);
TM_ILI9341_SendData(0x2B);
TM_ILI9341_SendData(0x0C);
TM_ILI9341_SendData(0x0E);
TM_ILI9341_SendData(0x08);
TM_ILI9341_SendData(0x4E);
TM_ILI9341_SendData(0xF1);
TM_ILI9341_SendData(0x37);
TM_ILI9341_SendData(0x07);
TM_ILI9341_SendData(0x10);
TM_ILI9341_SendData(0x03);
TM_ILI9341_SendData(0x0E);
TM_ILI9341_SendData(0x09);
TM_ILI9341_SendData(0x00);
TM_ILI9341_SendCommand(ILI9341_NGAMMA);
TM_ILI9341_SendData(0x00);
TM_ILI9341_SendData(0x0E);
TM_ILI9341_SendData(0x14);
TM_ILI9341_SendData(0x03);
TM_ILI9341_SendData(0x11);
TM_ILI9341_SendData(0x07);
TM_ILI9341_SendData(0x31);
TM_ILI9341_SendData(0xC1);
TM_ILI9341_SendData(0x48);
TM_ILI9341_SendData(0x08);
TM_ILI9341_SendData(0x0F);
TM_ILI9341_SendData(0x0C);
TM_ILI9341_SendData(0x31);
TM_ILI9341_SendData(0x36);
TM_ILI9341_SendData(0x0F);
TM_ILI9341_SendCommand(ILI9341_SLEEP_OUT);

TM_ILI9341_Delay(1000000);

TM_ILI9341_SendCommand(ILI9341_DISPLAY_ON);
TM_ILI9341_SendCommand(ILI9341_GRAM);
}


void TM_ILI9341_SendCommand(uint8_t data) {
ILI9341_WRX_RESET;
ILI9341_CS_RESET;
TM_SPI_Send(ILI9341_SPI, data);
ILI9341_CS_SET;
}

void TM_ILI9341_SendData(uint8_t data) {
ILI9341_WRX_SET;
ILI9341_CS_RESET;
TM_SPI_Send(ILI9341_SPI, data);
ILI9341_CS_SET;
}

void TM_ILI9341_DrawPixel(uint16_t x, uint16_t y, uint16_t color) {
TM_ILI9341_SetCursorPosition(x, y, x, y);

TM_ILI9341_SendCommand(ILI9341_GRAM);
TM_ILI9341_SendData(color >> 8);
TM_ILI9341_SendData(color & 0xFF);
}


void TM_ILI9341_SetCursorPosition(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) {
TM_ILI9341_SendCommand(ILI9341_COLUMN_ADDR);
TM_ILI9341_SendData(x1 >> 8);
TM_ILI9341_SendData(x1 & 0xFF);
TM_ILI9341_SendData(x2 >> 8);
TM_ILI9341_SendData(x2 & 0xFF);

TM_ILI9341_SendCommand(ILI9341_PAGE_ADDR);
TM_ILI9341_SendData(y1 >> 8);
TM_ILI9341_SendData(y1 & 0xFF);
TM_ILI9341_SendData(y2 >> 8);
TM_ILI9341_SendData(y2 & 0xFF);
}

void TM_ILI9341_Fill(uint16_t color) {
unsigned int n, i, j;
i = color >> 8;
j = color & 0xFF;
TM_ILI9341_SetCursorPosition(0, 0, ILI9341_Opts.Width - 1, ILI9341_Opts.Height - 1);

TM_ILI9341_SendCommand(ILI9341_GRAM);

for (n = 0; n < ILI9341_PIXEL; n++) {
TM_ILI9341_SendData(i);
TM_ILI9341_SendData(j);
}
}

void TM_ILI9341_IMAGE(uint16_t x11, uint16_t y11, uint16_t size_x, uint16_t size_y, uint16_t *color) 
    {
     unsigned int n, m, i, j, dt;
        
    // total_pixel = x11 * y11; // total_pixel
     for(m = 0; m < size_y; m++)
       {
        TM_ILI9341_SetCursorPosition(x11, y11 + m, ILI9341_Opts.Width - 1, ILI9341_Opts.Height - 1);
TM_ILI9341_SendCommand(ILI9341_GRAM);
        
for (n = 0; n < size_x; n++) 
          {
           i = color[n+dt] >> 8;
  j = color[n+dt] & 0xFF;
           TM_ILI9341_SendData(i);
           TM_ILI9341_SendData(j);          
 }
        dt += size_x;
        
       }
    }


void TM_ILI9341_Delay(volatile unsigned int delay) {
for (; delay != 0; delay--); 
}

void TM_ILI9341_Rotate(TM_ILI9341_Orientation_t orientation) {
TM_ILI9341_SendCommand(ILI9341_MAC);
if (orientation == TM_ILI9341_Orientation_Portrait_1) {
TM_ILI9341_SendData(0x58);
} else if (orientation == TM_ILI9341_Orientation_Portrait_2) {
TM_ILI9341_SendData(0x88);
} else if (orientation == TM_ILI9341_Orientation_Landscape_1) {
TM_ILI9341_SendData(0x28);
} else if (orientation == TM_ILI9341_Orientation_Landscape_2) {
TM_ILI9341_SendData(0xE8);
}
if (orientation == TM_ILI9341_Orientation_Portrait_1 || orientation == TM_ILI9341_Orientation_Portrait_2) {
ILI9341_Opts.Width = ILI9341_WIDTH;
ILI9341_Opts.Height = ILI9341_HEIGHT;
ILI9341_Opts.orientation = TM_ILI9341_Portrait;
} else {
ILI9341_Opts.Width = ILI9341_HEIGHT;
ILI9341_Opts.Height = ILI9341_WIDTH;
ILI9341_Opts.orientation = TM_ILI9341_Landscape;
}
}

void TM_ILI9341_Puts(uint16_t x, uint16_t y, char *str, TM_FontDef_t *font, uint16_t foreground, uint16_t background) {
uint16_t startX = x;
/* Set X and Y coordinates */
ILI9341_x = x;
ILI9341_y = y;
while (*str) {
//New line
if (*str == '\n') {
ILI9341_y += font->FontHeight + 1;
//if after \n is also \r, than go to the left of the screen
if (*(str + 1) == '\r') {
ILI9341_x = 0;
str++;
} else {
ILI9341_x = startX;
}
str++;
continue;
} else if (*str == '\r') {
str++;
continue;
}
TM_ILI9341_Putc(ILI9341_x, ILI9341_y, *str++, font, foreground, background);
}
}

void TM_ILI9341_GetStringSize(char *str, TM_FontDef_t *font, uint16_t *width, uint16_t *height) {
uint16_t w = 0;
*height = font->FontHeight;
while (*str++) {
w += font->FontWidth;
}
*width = w;
}

void TM_ILI9341_Putc(uint16_t x, uint16_t y, char c, TM_FontDef_t *font, uint16_t foreground, uint16_t background) {
uint32_t i, b, j;
/* Set coordinates */
ILI9341_x = x;
ILI9341_y = y;
if ((ILI9341_x + font->FontWidth) > ILI9341_Opts.Width) {
//If at the end of a line of display, go to new line and set x to 0 position
ILI9341_y += font->FontHeight;
ILI9341_x = 0;
}
for (i = 0; i < font->FontHeight; i++) {
b = font->data[(c - 32) * font->FontHeight + i];
for (j = 0; j < font->FontWidth; j++) {
if ((b << j) & 0x8000) {
TM_ILI9341_DrawPixel(ILI9341_x + j, (ILI9341_y + i), foreground);
} else {
TM_ILI9341_DrawPixel(ILI9341_x + j, (ILI9341_y + i), background);
}
}
}
ILI9341_x += font->FontWidth;
}


void TM_ILI9341_DrawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color) {
/* Code by dewoller: https://github.com/dewoller */
int16_t dx, dy, sx, sy, err, e2; 
/* Check for overflow */
if (x0 >= ILI9341_Opts.Width) {
x0 = ILI9341_Opts.Width - 1;
}
if (x1 >= ILI9341_Opts.Width) {
x1 = ILI9341_Opts.Width - 1;
}
if (y0 >= ILI9341_Opts.Height) {
y0 = ILI9341_Opts.Height - 1;
}
if (y1 >= ILI9341_Opts.Height) {
y1 = ILI9341_Opts.Height - 1;
}
dx = (x0 < x1) ? (x1 - x0) : (x0 - x1); 
dy = (y0 < y1) ? (y1 - y0) : (y0 - y1); 
sx = (x0 < x1) ? 1 : -1; 
sy = (y0 < y1) ? 1 : -1; 
err = ((dx > dy) ? dx : -dy) / 2; 

while (1) {
TM_ILI9341_DrawPixel(x0, y0, color); 
if (x0 == x1 && y0 == y1) {
break;
}
e2 = err; 
if (e2 > -dx) {
err -= dy;
x0 += sx;
} 
if (e2 < dy) {
err += dx;
y0 += sy;
} 
}
}

void TM_ILI9341_DrawRectangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color) {
TM_ILI9341_DrawLine(x0, y0, x1, y0, color); //Top
TM_ILI9341_DrawLine(x0, y0, x0, y1, color); //Left
TM_ILI9341_DrawLine(x1, y0, x1, y1, color); //Right
TM_ILI9341_DrawLine(x0, y1, x1, y1, color); //Bottom
}

void TM_ILI9341_DrawFilledRectangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color) {
for (; y0 < y1; y0++) {
TM_ILI9341_DrawLine(x0, y0, x1, y0, color);
}
}

void TM_ILI9341_DrawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color) {
int16_t f = 1 - r;
int16_t ddF_x = 1;
int16_t ddF_y = -2 * r;
int16_t x = 0;
int16_t y = r;

    TM_ILI9341_DrawPixel(x0, y0 + r, color);
    TM_ILI9341_DrawPixel(x0, y0 - r, color);
    TM_ILI9341_DrawPixel(x0 + r, y0, color);
    TM_ILI9341_DrawPixel(x0 - r, y0, color);

    while (x < y) {
        if (f >= 0) {
            y--;
            ddF_y += 2;
            f += ddF_y;
        }
        x++;
        ddF_x += 2;
        f += ddF_x;

        TM_ILI9341_DrawPixel(x0 + x, y0 + y, color);
        TM_ILI9341_DrawPixel(x0 - x, y0 + y, color);
        TM_ILI9341_DrawPixel(x0 + x, y0 - y, color);
        TM_ILI9341_DrawPixel(x0 - x, y0 - y, color);

        TM_ILI9341_DrawPixel(x0 + y, y0 + x, color);
        TM_ILI9341_DrawPixel(x0 - y, y0 + x, color);
        TM_ILI9341_DrawPixel(x0 + y, y0 - x, color);
        TM_ILI9341_DrawPixel(x0 - y, y0 - x, color);
    }
}


void TM_ILI9341_DrawRange(int16_t X1, int16_t Y1, int16_t R, uint16_t color) 
{
  int x = 0;
   int y = R-1;
   int delta = 1 - 2 * R;
   int error = 0;
   while (y >= 0)
   {
       //TM_ILI9341_DrawPixel(X1 + x, Y1 + y, color);
       //TM_ILI9341_DrawPixel(X1 + x, Y1 - y, color);
       //TM_ILI9341_DrawPixel(X1 - x, Y1 + y, color);
       TM_ILI9341_DrawPixel(X1 - y, Y1 - x, color);
       TM_ILI9341_Delay(0x00000FFF); 
       
       error = 2 * (delta + y) - 1;
       if ((delta < 0) && (error <= 0))
          {
           delta += 2 * ++x + 1;
           continue;
          }
       error = 2 * (delta - x) - 1;
       if ((delta > 0) && (error > 0))
          {
           delta += 1 - 2 * --y;
           continue;
          }
       x++;
       delta += 2 * (x - y);
       y--;
   }
  
   x = 0;
   y = R;
   delta = 1 - 2 * R;
   error = 0;
   while (y >= 0)
   {
       //TM_ILI9341_DrawPixel(X1 + x, Y1 + y, color);
       TM_ILI9341_DrawPixel(X1 + x, Y1 - y, color);
       //TM_ILI9341_DrawPixel(X1 - x, Y1 + y, color);
       //TM_ILI9341_DrawPixel(X1 - x, Y1 - y, color);
       TM_ILI9341_Delay(0x00000FFF); 
       error = 2 * (delta + y) - 1;
       if ((delta < 0) && (error <= 0))
          {
           delta += 2 * ++x + 1;
           continue;
          }
       error = 2 * (delta - x) - 1;
       if ((delta > 0) && (error > 0))
          {
           delta += 1 - 2 * --y;
           continue;
          }
       x++;
       delta += 2 * (x - y);
       y--;
   }
  
  /*
int16_t f = 1 - r;
int16_t ddF_x = 1;
int16_t ddF_y = -2 * r;
int16_t x = 0;
int16_t y = r;

   
    TM_ILI9341_DrawPixel(x0 - r, y0, color);

    while(1) //(x < y) 
    {
        if (f >= 0) 
           {
            y--;
            ddF_y += 2;
            f += ddF_y;
           }
        x++;
        ddF_x += 2;
        f += ddF_x;


        TM_ILI9341_DrawPixel(x0 - y, y0 - x, color);
    }
  */
}

void TM_ILI9341_DrawFilledCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color) {
int16_t f = 1 - r;
int16_t ddF_x = 1;
int16_t ddF_y = -2 * r;
int16_t x = 0;
int16_t y = r;

    TM_ILI9341_DrawPixel(x0, y0 + r, color);
    TM_ILI9341_DrawPixel(x0, y0 - r, color);
    TM_ILI9341_DrawPixel(x0 + r, y0, color);
    TM_ILI9341_DrawPixel(x0 - r, y0, color);
    TM_ILI9341_DrawLine(x0 - r, y0, x0 + r, y0, color);

    while (x < y) {
        if (f >= 0) {
            y--;
            ddF_y += 2;
            f += ddF_y;
        }
        x++;
        ddF_x += 2;
        f += ddF_x;

        TM_ILI9341_DrawLine(x0 - x, y0 + y, x0 + x, y0 + y, color);
        TM_ILI9341_DrawLine(x0 + x, y0 - y, x0 - x, y0 - y, color);

        TM_ILI9341_DrawLine(x0 + y, y0 + x, x0 - y, y0 + x, color);
        TM_ILI9341_DrawLine(x0 + y, y0 - x, x0 - y, y0 - x, color);
    }
}


/******************************************************************************
   Load Current 0-200% Value 0 - 19
******************************************************************************/
void Draw_Load(int16_t step0)
{ 
 if(step0 >= 20) step0 = 20;     // перестраховка,если знач. больше 20, то присвоить ему 20
 int procent;
 char strLoad[4];  

 if(step0 < 19) TM_ILI9341_DrawFilledRectangle(282, 22, 308, 30, ILI9341_COLOR_BLACK);// затереть 19
 if(step0 < 18) TM_ILI9341_DrawFilledRectangle(282, 31, 308, 39, ILI9341_COLOR_BLACK);// затереть 18     
 if(step0 < 17) TM_ILI9341_DrawFilledRectangle(282, 42, 308, 50, ILI9341_COLOR_BLACK);// затереть 17    
 if(step0 < 16) TM_ILI9341_DrawFilledRectangle(282, 51, 308, 59, ILI9341_COLOR_BLACK);// затереть 16    
 if(step0 < 15) TM_ILI9341_DrawFilledRectangle(282, 62, 308, 70, ILI9341_COLOR_BLACK);// затереть 15   
 if(step0 < 14) TM_ILI9341_DrawFilledRectangle(282, 71, 308, 79, ILI9341_COLOR_BLACK);// затереть 14
 if(step0 < 13) TM_ILI9341_DrawFilledRectangle(282, 82, 308, 90, ILI9341_COLOR_BLACK);// затереть 13    
 if(step0 < 12) TM_ILI9341_DrawFilledRectangle(282, 91, 308, 99, ILI9341_COLOR_BLACK);// затереть 12    
 if(step0 < 11) TM_ILI9341_DrawFilledRectangle(282, 102, 308, 110, ILI9341_COLOR_BLACK);// затереть 11     
 if(step0 < 10) TM_ILI9341_DrawFilledRectangle(282, 111, 308, 119, ILI9341_COLOR_BLACK);// затереть 10   
 if(step0 < 9) TM_ILI9341_DrawFilledRectangle(282, 122, 308, 130, ILI9341_COLOR_BLACK);// затереть 9 
 if(step0 < 8) TM_ILI9341_DrawFilledRectangle(282, 131, 308, 139, ILI9341_COLOR_BLACK);// затереть 8    
 if(step0 < 7) TM_ILI9341_DrawFilledRectangle(282, 142, 308, 150, ILI9341_COLOR_BLACK);// затереть 7    
 if(step0 < 6) TM_ILI9341_DrawFilledRectangle(282, 151, 308, 159, ILI9341_COLOR_BLACK);// затереть 6 
 if(step0 < 5) TM_ILI9341_DrawFilledRectangle(282, 162, 308, 170, ILI9341_COLOR_BLACK);// затереть 5   
 if(step0 < 4) TM_ILI9341_DrawFilledRectangle(282, 171, 308, 179, ILI9341_COLOR_BLACK);// затереть 4    
 if(step0 < 3) TM_ILI9341_DrawFilledRectangle(282, 162, 308, 170, ILI9341_COLOR_BLACK);// затереть 3     
 if(step0 < 2) TM_ILI9341_DrawFilledRectangle(282, 191, 308, 199, ILI9341_COLOR_BLACK);// затереть 2    
 if(step0 < 1) TM_ILI9341_DrawFilledRectangle(282, 202, 308, 210, ILI9341_COLOR_BLACK);// затереть 1    
 if(step0 < 0) TM_ILI9341_DrawFilledRectangle(282, 211, 308, 219, ILI9341_COLOR_BLACK);// затереть  0

 if(step0 >= 0) TM_ILI9341_DrawFilledRectangle(282, 211, 308, 219, ILI9341_COLOR_GREEN);// засветить 0
 if(step0 >= 1) TM_ILI9341_DrawFilledRectangle(282, 202, 308, 210, ILI9341_COLOR_GREEN);// засветить 1
 if(step0 >= 2) TM_ILI9341_DrawFilledRectangle(282, 191, 308, 199, ILI9341_COLOR_GREEN);// засветить 2
 if(step0 >= 3) TM_ILI9341_DrawFilledRectangle(282, 182, 308, 190, ILI9341_COLOR_GREEN);// засветить 3
 if(step0 >= 4) TM_ILI9341_DrawFilledRectangle(282, 171, 308, 179, ILI9341_COLOR_GREEN);// засветить 4
 if(step0 >= 5) TM_ILI9341_DrawFilledRectangle(282, 162, 308, 170, ILI9341_COLOR_GREEN);// засветить 5
 if(step0 >= 6) TM_ILI9341_DrawFilledRectangle(282, 151, 308, 159, ILI9341_COLOR_GREEN);// засветить 6 
 if(step0 >= 7) TM_ILI9341_DrawFilledRectangle(282, 142, 308, 150, ILI9341_COLOR_GREEN);// засветить 7
 if(step0 >= 8) TM_ILI9341_DrawFilledRectangle(282, 131, 308, 139, ILI9341_COLOR_GREEN);// засветить 8
 if(step0 >= 9) TM_ILI9341_DrawFilledRectangle(282, 122, 308, 130, ILI9341_COLOR_GREEN);// засветить 9 // зеленый диапазон 0- 100% 
 if(step0 >= 10) TM_ILI9341_DrawFilledRectangle(282, 111, 308, 119, ILI9341_COLOR_ORANGE);// засветить 10
 if(step0 >= 11) TM_ILI9341_DrawFilledRectangle(282, 102, 308, 110, ILI9341_COLOR_ORANGE);// засветить 11
 if(step0 >= 12) TM_ILI9341_DrawFilledRectangle(282, 91, 308, 99, ILI9341_COLOR_ORANGE);// засветить 12
 if(step0 >= 13) TM_ILI9341_DrawFilledRectangle(282, 82, 308, 90, ILI9341_COLOR_ORANGE);// засветить 13
 if(step0 >= 14) TM_ILI9341_DrawFilledRectangle(282, 71, 308, 79, ILI9341_COLOR_ORANGE);// засветить 14}
 if(step0 >= 15) TM_ILI9341_DrawFilledRectangle(282, 62, 308, 70, ILI9341_COLOR_RED);// засветить 15
 if(step0 >= 16) TM_ILI9341_DrawFilledRectangle(282, 51, 308, 59, ILI9341_COLOR_RED);// засветить 16
 if(step0 >= 17) TM_ILI9341_DrawFilledRectangle(282, 42, 308, 50, ILI9341_COLOR_RED);// засветить 17
 if(step0 >= 18) TM_ILI9341_DrawFilledRectangle(282, 31, 308, 39, ILI9341_COLOR_RED);// засветить 18
 if(step0 >= 19) TM_ILI9341_DrawFilledRectangle(282, 22, 308, 30, ILI9341_COLOR_RED);// засветить 19

 procent = (step0+1)*10;
 sprintf(strLoad, "%03d%", procent);
 TM_ILI9341_Puts(275, 2, strLoad, &TM_Font_11x18, ILI9341_COLOR_WHITE, ILI9341_COLOR_BLACK); // интикация в %
}



/******************************************************************************
  Voltage Output 0-400V |||||||||||| Нарисовать начальные рамкм      
******************************************************************************/
void Init_Voltage_Range(void) 
{
   TM_ILI9341_Puts(10, 60, "Input Voltage", &TM_Font_7x10, ILI9341_COLOR_YELLOW, ILI9341_COLOR_BLACK); 
   TM_ILI9341_DrawRectangle(207, 100, 4, 70, ILI9341_COLOR_YELLOW);
   
   TM_ILI9341_Puts(10, 110, "Output Voltage", &TM_Font_7x10, ILI9341_COLOR_GREEN, ILI9341_COLOR_BLACK);
   TM_ILI9341_DrawRectangle(207, 150, 4, 120, ILI9341_COLOR_GREEN);
}


 /******************************************************************************
   Voltage Input 0-400V  ||||||||||||  
******************************************************************************/
 void Draw_Voltage_In_Range(int16_t volt1)
 {
   char strVolt1[4];   
   sprintf(strVolt1, "%03dV", volt1); 
   TM_ILI9341_Puts(213, 78, strVolt1, &TM_Font_11x18, ILI9341_COLOR_YELLOW, ILI9341_COLOR_BLACK);
   if(volt1 > 400) volt1 = 399; // если привешено 400V
   volt1 = volt1/2; // отмаштабировать под шкалу
   Draw_Voltage(6, 72, 26, volt1, ILI9341_COLOR_YELLOW); // x, y, h, % - шкала напряжения
 }
   
/******************************************************************************
   Voltage Output 0-400V  |||||||||||| 
******************************************************************************/
 void Draw_Voltage_Out_Range(int16_t volt2)
 {
   char strVolt2[4];   
   sprintf(strVolt2, "%03dV", volt2); 
   TM_ILI9341_Puts(213, 128, strVolt2, &TM_Font_11x18, ILI9341_COLOR_GREEN, ILI9341_COLOR_BLACK);
   if(volt2 > 400) volt2 = 399; // если привешено 400V
   volt2 = volt2/2; // отмаштабировать под шкалу
   Draw_Voltage(6, 122, 26, volt2, ILI9341_COLOR_GREEN2); // x, y, h, % - шкала напряжения
 }

/******************************************************************************
   Шкала ||||||||||||
   x22, y22 - координаты верхней левой точки шкалы
   h22 - высота шкалы
   Value - значение шкалы 0 - 199
******************************************************************************/
 void Draw_Voltage(int16_t x22, int16_t y22, int16_t h22, int16_t value22, uint16_t color22)
    {
     int16_t j1, y10;
     y10 = y22 + h22; // высота столбика 
     
     for(j1 = 199; j1 > value22; j1--)
        {
         TM_ILI9341_DrawLine(x22+j1, y22, x22+j1, y10, ILI9341_COLOR_BLACK);
        } 
     
     for(j1 = 0; j1 < value22; j1++)
        {
         TM_ILI9341_DrawLine(x22+j1, y22, x22+j1, y10, color22);
        }   
    }


tm_stm32f4_ili9341.h
#ifndef TM_ILI9341_H
#define TM_ILI9341_H 100
/**
 * Library dependencies
 * - STM32F4xx
 * - STM32F4xx RCC
 * - STM32F4xx GPIO
 * - defines.h
 * - TM SPI
 * - TM FONTS
 */

/**
 * Includes
 */
#include "stm32l1xx.h"
#include "stm32l1xx_conf.h" // подключить все хидеры (ADC, GPIO, TIM и т.д.)   
//#include "defines.h"
#include "tm_stm32f4_spi.h"
#include "tm_stm32f4_fonts.h"

//SPI used
//This SPI pins are used on STM32F429 Discovery board
//#ifndef ILI9341_SPI
//#define ILI9341_SPI SPI5
//#define ILI9341_SPI_PINS TM_SPI_PinsPack_1
//#endif

//This SPI pins are used on STM32L152 Discovery board
#ifndef ILI9341_SPI
#define ILI9341_SPI SPI2
//#define ILI9341_SPI_PINS TM_SPI_PinsPack_1 // тут вопрос?????
#endif

//#ifndef ILI9341_CS_PIN
//This pin is used on STM32F429 discovery board
//#define ILI9341_CS_CLK RCC_AHB1Periph_GPIOC
//#define ILI9341_CS_PORT GPIOC
//#define ILI9341_CS_PIN GPIO_Pin_2
//#endif

#ifndef ILI9341_CS_PIN
//This pin is used on STM32L152 discovery board
//#define ILI9341_CS_CLK RCC_AHB1Periph_GPIOB
#define ILI9341_CS_PORT GPIOB
#define ILI9341_CS_PIN GPIO_Pin_10
#endif

//#ifndef ILI9341_WRX_PIN
//This pin is used on STM32F429 discovery board
//#define ILI9341_WRX_CLK RCC_AHB1Periph_GPIOD
//#define ILI9341_WRX_PORT GPIOD
//#define ILI9341_WRX_PIN GPIO_Pin_13
//#endif

#ifndef ILI9341_WRX_PIN
//This pin is used on STM32L152 discovery board
//#define ILI9341_WRX_CLK RCC_AHB1Periph_GPIOD
#define ILI9341_WRX_PORT GPIOB
#define ILI9341_WRX_PIN GPIO_Pin_11
#endif

//Reset pin
//#ifndef ILI9341_RST_PIN
//Reset pin
//#define ILI9341_RST_CLK RCC_AHB1Periph_GPIOD
//#define ILI9341_RST_PORT GPIOD
//#define ILI9341_RST_PIN GPIO_Pin_12
//#endif

//Reset pin
#ifndef ILI9341_RST_PIN
//Reset pin  is used on STM32L152 discovery board
//#define ILI9341_RST_CLK RCC_AHB1Periph_GPIOD
#define ILI9341_RST_PORT GPIOB
#define ILI9341_RST_PIN GPIO_Pin_3
#endif

#define ILI9341_RST_SET GPIO_SetBits(ILI9341_RST_PORT, ILI9341_RST_PIN)
#define ILI9341_RST_RESET GPIO_ResetBits(ILI9341_RST_PORT, ILI9341_RST_PIN)
#define ILI9341_CS_SET GPIO_SetBits(ILI9341_CS_PORT, ILI9341_CS_PIN)
#define ILI9341_CS_RESET GPIO_ResetBits(ILI9341_CS_PORT, ILI9341_CS_PIN)
#define ILI9341_WRX_SET GPIO_SetBits(ILI9341_WRX_PORT, ILI9341_WRX_PIN)
#define ILI9341_WRX_RESET GPIO_ResetBits(ILI9341_WRX_PORT, ILI9341_WRX_PIN)

//LCD settings
#define ILI9341_WIDTH 240
#define ILI9341_HEIGHT 320
#define ILI9341_PIXEL 76800

//Colors
#define ILI9341_COLOR_WHITE 0xFFFF
#define ILI9341_COLOR_BLACK 0x0000
#define ILI9341_COLOR_RED 0xF800
#define ILI9341_COLOR_GREEN 0x07E0
#define ILI9341_COLOR_GREEN2 0xB723
#define ILI9341_COLOR_GREEN3 0x8000
#define ILI9341_COLOR_BLUE 0x001F
#define ILI9341_COLOR_BLUE2 0x051D
#define ILI9341_COLOR_YELLOW 0xFFE0
#define ILI9341_COLOR_ORANGE 0xFBE4
#define ILI9341_COLOR_CYAN 0x07FF
#define ILI9341_COLOR_MAGENTA 0xA254
#define ILI9341_COLOR_GRAY 0x7BEF //1111 0111 1101 1110
#define ILI9341_COLOR_BROWN 0xBBCA

//Commands
#define ILI9341_RESET 0x01
#define ILI9341_SLEEP_OUT 0x11
#define ILI9341_GAMMA 0x26
#define ILI9341_DISPLAY_OFF 0x28
#define ILI9341_DISPLAY_ON 0x29
#define ILI9341_COLUMN_ADDR 0x2A
#define ILI9341_PAGE_ADDR 0x2B
#define ILI9341_GRAM 0x2C
#define ILI9341_MAC 0x36
#define ILI9341_PIXEL_FORMAT 0x3A
#define ILI9341_WDB 0x51
#define ILI9341_WCD 0x53
#define ILI9341_RGB_INTERFACE 0xB0
#define ILI9341_FRC 0xB1
#define ILI9341_BPC 0xB5
#define ILI9341_DFC 0xB6
#define ILI9341_POWER1 0xC0
#define ILI9341_POWER2 0xC1
#define ILI9341_VCOM1 0xC5
#define ILI9341_VCOM2 0xC7
#define ILI9341_POWERA 0xCB
#define ILI9341_POWERB 0xCF
#define ILI9341_PGAMMA 0xE0
#define ILI9341_NGAMMA 0xE1
#define ILI9341_DTCA 0xE8
#define ILI9341_DTCB 0xEA
#define ILI9341_POWER_SEQ 0xED
#define ILI9341_3GAMMA_EN 0xF2
#define ILI9341_INTERFACE 0xF6
#define ILI9341_PRC 0xF7

/**
 * Public enum
 *
 * Select orientation for LCD
 */
typedef enum {
TM_ILI9341_Orientation_Portrait_1,
TM_ILI9341_Orientation_Portrait_2,
TM_ILI9341_Orientation_Landscape_1,
TM_ILI9341_Orientation_Landscape_2
} TM_ILI9341_Orientation_t;

/**
 * Orientation
 * Used private
 */
typedef enum {
TM_ILI9341_Landscape,
TM_ILI9341_Portrait
} TM_ILI9341_Orientation;

/**
 * LCD options
 * Used private
 */
typedef struct {
uint16_t Width;
uint16_t Height;
TM_ILI9341_Orientation orientation; // 1 = portrait; 0 = landscape
} TM_ILI9341_Options_t;


/**
 * Select font
 */
extern TM_FontDef_t TM_Font_7x10;
extern TM_FontDef_t TM_Font_11x18;
extern TM_FontDef_t TM_Font_16x26;

/**
 * Initialize ILI9341 LCD
 *
 */
extern void TM_ILI9341_Init(void);

/**
 * Init LCD pins
 *
 * Called private
 */
extern void TM_ILI9341_InitLCD(void);

/**
 * Send data to LCD via SPI
 *
 * Called private
 *
 * Parameters:
 * - uint8_t data: data to be sent
 */
extern void TM_ILI9341_SendData(uint8_t data);

/**
 * Send command to LCD via SPI
 *
 * Called private
 *
 * Parameters:
 * - uint8_t data: data to be sent
 */
extern void TM_ILI9341_SendCommand(uint8_t data);

/**
 * Simple delay
 *
 * Parameters:
 * - volatile unsigned int delay: clock cycles
 */
extern void TM_ILI9341_Delay(volatile unsigned int delay);

/**
 * Set cursor position
 *
 * Called private
 */
extern void TM_ILI9341_SetCursorPosition(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);

/**
 * Draw single pixel to LCD
 *
 * Parameters:
 * - uint16_t x: X position for pixel
 * - uint16_t y: Y position for pixel
 * - uint16_t color: color of pixel
 */
extern void TM_ILI9341_DrawPixel(uint16_t x, uint16_t y, uint16_t color);

/**
 * Fill entire LCD with color
 *
 * Parameters:
 * - uint16_t color: Color to be used in fill
 */
extern void TM_ILI9341_Fill(uint16_t color);

/**
 * Rotate LCD
 * Select orientation
 *
 * Parameters:
 * - TM_ILI9341_Orientation_t orientation
 * - TM_ILI9341_Orientation_Portrait_1: no rotation
 * - TM_ILI9341_Orientation_Portrait_2: rotate 180deg
 * - TM_ILI9341_Orientation_Landscape_1: rotate 90deg
 * - TM_ILI9341_Orientation_Landscape_2: rotate -90deg
 */
extern void TM_ILI9341_Rotate(TM_ILI9341_Orientation_t orientation);

/**
 * Put single character to LCD
 *
 * Parameters:
 * - uint16_t x: X position of top left corner
 * - uint16_t y: Y position of top left corner
 * - char c: character to be displayed
 * - TM_FontDef_t *font: pointer to used font
 * - uint16_t foreground: color for char
 * - uint16_t background: color for char background
 */
extern void TM_ILI9341_Putc(uint16_t x, uint16_t y, char c, TM_FontDef_t *font, uint16_t foreground, uint16_t background);

/**
 * Put string to LCD
 *
 * Parameters:
 * - uint16_t x: X position of top left corner of first character in string
 * - uint16_t y: Y position of top left corner of first character in string
 * - char *str: pointer to first character
 * - TM_FontDef_t *font: pointer to used font
 * - uint16_t foreground: color for string
 * - uint16_t background: color for string background
 */
extern void TM_ILI9341_Puts(uint16_t x, uint16_t y, char *str, TM_FontDef_t *font, uint16_t foreground, uint16_t background);

/**
 * Get width and height of box with text
 *
 * Parameters:
 * - char *str: pointer to first character
 * - TM_FontDef_t *font: pointer to used font
 * - uint16_t *width: Pointer to variable to store width
 * - uint16_t *height: ointer to variable to store height
 */
extern void TM_ILI9341_GetStringSize(char *str, TM_FontDef_t *font, uint16_t *width, uint16_t *height);

/**
 * Draw line to LCD
 *
 * Parameters:
 * - uint16_t x0: X coordinate of starting point
 * - uint16_t y0: Y coordinate of starting point
 * - uint16_t x1: X coordinate of ending point
 * - uint16_t y1: Y coordinate of ending point
 * - uint16_t color: line color
 */
extern void TM_ILI9341_DrawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color);

/**
 * Draw rectangle on LCD
 *
 * Parameters:
 * - uint16_t x0: X coordinate of top left point
 * - uint16_t y0: Y coordinate of top left point
 * - uint16_t x1: X coordinate of bottom right point
 * - uint16_t y1: Y coordinate of bottom right point
 * - uint16_t color: rectangle color
 */
extern void TM_ILI9341_DrawRectangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color);

/**
 * Draw filled rectangle on LCD
 *
 * Parameters:
 * - uint16_t x0: X coordinate of top left point
 * - uint16_t y0: Y coordinate of top left point
 * - uint16_t x1: X coordinate of bottom right point
 * - uint16_t y1: Y coordinate of bottom right point
 * - uint16_t color: rectangle color
 */
extern void TM_ILI9341_DrawFilledRectangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color);

/**
 * Draw circle on LCD
 *
 * Parameters:
 * - int16_t x0: X coordinate of center circle point
 * - int16_t y0: Y coordinate of center circle point
 * - int16_t r: circle radius
 * - uint16_t color: circle color
 */
extern void TM_ILI9341_DrawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);

/**
 * Draw filled on LCD
 *
 * Parameters:
 * - int16_t x0: X coordinate of center circle point
 * - int16_t y0: Y coordinate of center circle point
 * - int16_t r: circle radius
 * - uint16_t color: circle color
 */
   
extern void TM_ILI9341_DrawRange(int16_t X1, int16_t Y1, int16_t R, uint16_t color);   
   
extern void TM_ILI9341_DrawFilledCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);

extern void Draw_Load(int16_t step0);

//extern void TM_ILI9341_IMAGE(uint16_t x11, uint16_t y11, uint16_t size_x, uint16_t size_y, uint16_t *color);

extern void Draw_Voltage(int16_t x22, int16_t y22, int16_t h22, int16_t value22, uint16_t color22);

extern void Draw_Voltage_In_Range(int16_t volt1);

extern void Draw_Voltage_Out_Range(int16_t volt2);

extern void Init_Range(void);

extern void Init_Voltage_Range(void);

#endif


tm_stm32f4_fonts.c
#include "tm_stm32f4_fonts.h"

const uint16_t TM_Font7x10 [] = {
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,  // sp
0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x1000, 0x0000, 0x0000,  // !
0x2800, 0x2800, 0x2800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,  // "
0x2400, 0x2400, 0x7C00, 0x2400, 0x4800, 0x7C00, 0x4800, 0x4800, 0x0000, 0x0000,  // #
0x3800, 0x5400, 0x5000, 0x3800, 0x1400, 0x5400, 0x5400, 0x3800, 0x1000, 0x0000,  // $
0x2000, 0x5400, 0x5800, 0x3000, 0x2800, 0x5400, 0x1400, 0x0800, 0x0000, 0x0000,  // %
0x1000, 0x2800, 0x2800, 0x1000, 0x3400, 0x4800, 0x4800, 0x3400, 0x0000, 0x0000,  // &
0x1000, 0x1000, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,  // '
0x0800, 0x1000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x1000, 0x0800,  // (
0x2000, 0x1000, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x1000, 0x2000,  // )
0x1000, 0x3800, 0x1000, 0x2800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,  // *
0x0000, 0x0000, 0x1000, 0x1000, 0x7C00, 0x1000, 0x1000, 0x0000, 0x0000, 0x0000,  // +
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x1000, 0x1000,  // ,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3800, 0x0000, 0x0000, 0x0000, 0x0000,  // -
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000,  // .
0x0800, 0x0800, 0x1000, 0x1000, 0x1000, 0x1000, 0x2000, 0x2000, 0x0000, 0x0000,  // /
0x3800, 0x4400, 0x4400, 0x5400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000,  // 0
0x1000, 0x3000, 0x5000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000,  // 1
0x3800, 0x4400, 0x4400, 0x0400, 0x0800, 0x1000, 0x2000, 0x7C00, 0x0000, 0x0000,  // 2
0x3800, 0x4400, 0x0400, 0x1800, 0x0400, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000,  // 3
0x0800, 0x1800, 0x2800, 0x2800, 0x4800, 0x7C00, 0x0800, 0x0800, 0x0000, 0x0000,  // 4
0x7C00, 0x4000, 0x4000, 0x7800, 0x0400, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000,  // 5
0x3800, 0x4400, 0x4000, 0x7800, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000,  // 6
0x7C00, 0x0400, 0x0800, 0x1000, 0x1000, 0x2000, 0x2000, 0x2000, 0x0000, 0x0000,  // 7
0x3800, 0x4400, 0x4400, 0x3800, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000,  // 8
0x3800, 0x4400, 0x4400, 0x4400, 0x3C00, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000,  // 9
0x0000, 0x0000, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000,  // :
0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, 0x0000, 0x1000, 0x1000, 0x1000,  // ;
0x0000, 0x0000, 0x0C00, 0x3000, 0x4000, 0x3000, 0x0C00, 0x0000, 0x0000, 0x0000,  // <
0x0000, 0x0000, 0x0000, 0x7C00, 0x0000, 0x7C00, 0x0000, 0x0000, 0x0000, 0x0000,  // =
0x0000, 0x0000, 0x6000, 0x1800, 0x0400, 0x1800, 0x6000, 0x0000, 0x0000, 0x0000,  // >
0x3800, 0x4400, 0x0400, 0x0800, 0x1000, 0x1000, 0x0000, 0x1000, 0x0000, 0x0000,  // ?
0x3800, 0x4400, 0x4C00, 0x5400, 0x5C00, 0x4000, 0x4000, 0x3800, 0x0000, 0x0000,  // @
0x1000, 0x2800, 0x2800, 0x2800, 0x2800, 0x7C00, 0x4400, 0x4400, 0x0000, 0x0000,  // A
0x7800, 0x4400, 0x4400, 0x7800, 0x4400, 0x4400, 0x4400, 0x7800, 0x0000, 0x0000,  // B
0x3800, 0x4400, 0x4000, 0x4000, 0x4000, 0x4000, 0x4400, 0x3800, 0x0000, 0x0000,  // C
0x7000, 0x4800, 0x4400, 0x4400, 0x4400, 0x4400, 0x4800, 0x7000, 0x0000, 0x0000,  // D
0x7C00, 0x4000, 0x4000, 0x7C00, 0x4000, 0x4000, 0x4000, 0x7C00, 0x0000, 0x0000,  // E
0x7C00, 0x4000, 0x4000, 0x7800, 0x4000, 0x4000, 0x4000, 0x4000, 0x0000, 0x0000,  // F
0x3800, 0x4400, 0x4000, 0x4000, 0x5C00, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000,  // G
0x4400, 0x4400, 0x4400, 0x7C00, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000,  // H
0x3800, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x3800, 0x0000, 0x0000,  // I
0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000,  // J
0x4400, 0x4800, 0x5000, 0x6000, 0x5000, 0x4800, 0x4800, 0x4400, 0x0000, 0x0000,  // K
0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x7C00, 0x0000, 0x0000,  // L
0x4400, 0x6C00, 0x6C00, 0x5400, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000,  // M
0x4400, 0x6400, 0x6400, 0x5400, 0x5400, 0x4C00, 0x4C00, 0x4400, 0x0000, 0x0000,  // N
0x3800, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000,  // O
0x7800, 0x4400, 0x4400, 0x4400, 0x7800, 0x4000, 0x4000, 0x4000, 0x0000, 0x0000,  // P
0x3800, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x5400, 0x3800, 0x0400, 0x0000,  // Q
0x7800, 0x4400, 0x4400, 0x4400, 0x7800, 0x4800, 0x4800, 0x4400, 0x0000, 0x0000,  // R
0x3800, 0x4400, 0x4000, 0x3000, 0x0800, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000,  // S
0x7C00, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000,  // T
0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000,  // U
0x4400, 0x4400, 0x4400, 0x2800, 0x2800, 0x2800, 0x1000, 0x1000, 0x0000, 0x0000,  // V
0x4400, 0x4400, 0x5400, 0x5400, 0x5400, 0x6C00, 0x2800, 0x2800, 0x0000, 0x0000,  // W
0x4400, 0x2800, 0x2800, 0x1000, 0x1000, 0x2800, 0x2800, 0x4400, 0x0000, 0x0000,  // X
0x4400, 0x4400, 0x2800, 0x2800, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000,  // Y
0x7C00, 0x0400, 0x0800, 0x1000, 0x1000, 0x2000, 0x4000, 0x7C00, 0x0000, 0x0000,  // Z
0x1800, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1800,  // [
0x2000, 0x2000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0800, 0x0800, 0x0000, 0x0000,  /* \ */
0x3000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x3000,  // ]
0x1000, 0x2800, 0x2800, 0x4400, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,  // ^
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFE00,  // _
0x2000, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,  // `
0x0000, 0x0000, 0x3800, 0x4400, 0x3C00, 0x4400, 0x4C00, 0x3400, 0x0000, 0x0000,  // a
0x4000, 0x4000, 0x5800, 0x6400, 0x4400, 0x4400, 0x6400, 0x5800, 0x0000, 0x0000,  // b
0x0000, 0x0000, 0x3800, 0x4400, 0x4000, 0x4000, 0x4400, 0x3800, 0x0000, 0x0000,  // c
0x0400, 0x0400, 0x3400, 0x4C00, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0000, 0x0000,  // d
0x0000, 0x0000, 0x3800, 0x4400, 0x7C00, 0x4000, 0x4400, 0x3800, 0x0000, 0x0000,  // e
0x0C00, 0x1000, 0x7C00, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000,  // f
0x0000, 0x0000, 0x3400, 0x4C00, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0400, 0x7800,  // g
0x4000, 0x4000, 0x5800, 0x6400, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000,  // h
0x1000, 0x0000, 0x7000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000,  // i
0x1000, 0x0000, 0x7000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0xE000,  // j
0x4000, 0x4000, 0x4800, 0x5000, 0x6000, 0x5000, 0x4800, 0x4400, 0x0000, 0x0000,  // k
0x7000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000,  // l
0x0000, 0x0000, 0x7800, 0x5400, 0x5400, 0x5400, 0x5400, 0x5400, 0x0000, 0x0000,  // m
0x0000, 0x0000, 0x5800, 0x6400, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000,  // n
0x0000, 0x0000, 0x3800, 0x4400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000,  // o
0x0000, 0x0000, 0x5800, 0x6400, 0x4400, 0x4400, 0x6400, 0x5800, 0x4000, 0x4000,  // p
0x0000, 0x0000, 0x3400, 0x4C00, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0400, 0x0400,  // q
0x0000, 0x0000, 0x5800, 0x6400, 0x4000, 0x4000, 0x4000, 0x4000, 0x0000, 0x0000,  // r
0x0000, 0x0000, 0x3800, 0x4400, 0x3000, 0x0800, 0x4400, 0x3800, 0x0000, 0x0000,  // s
0x2000, 0x2000, 0x7800, 0x2000, 0x2000, 0x2000, 0x2000, 0x1800, 0x0000, 0x0000,  // t
0x0000, 0x0000, 0x4400, 0x4400, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0000, 0x0000,  // u
0x0000, 0x0000, 0x4400, 0x4400, 0x2800, 0x2800, 0x2800, 0x1000, 0x0000, 0x0000,  // v
0x0000, 0x0000, 0x5400, 0x5400, 0x5400, 0x6C00, 0x2800, 0x2800, 0x0000, 0x0000,  // w
0x0000, 0x0000, 0x4400, 0x2800, 0x1000, 0x1000, 0x2800, 0x4400, 0x0000, 0x0000,  // x
0x0000, 0x0000, 0x4400, 0x4400, 0x2800, 0x2800, 0x1000, 0x1000, 0x1000, 0x6000,  // y
0x0000, 0x0000, 0x7C00, 0x0800, 0x1000, 0x2000, 0x4000, 0x7C00, 0x0000, 0x0000,  // z
0x1800, 0x1000, 0x1000, 0x1000, 0x2000, 0x2000, 0x1000, 0x1000, 0x1000, 0x1800,  // {
0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000,  // |
0x3000, 0x1000, 0x1000, 0x1000, 0x0800, 0x0800, 0x1000, 0x1000, 0x1000, 0x3000,  // }
0x0000, 0x0000, 0x0000, 0x7400, 0x4C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,  // ~
};

const uint16_t TM_Font11x18 [] = {
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,   // sp
0x0000, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000,   // !
0x0000, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,   // "
0x0000, 0x1980, 0x1980, 0x1980, 0x1980, 0x7FC0, 0x7FC0, 0x1980, 0x3300, 0x7FC0, 0x7FC0, 0x3300, 0x3300, 0x3300, 0x3300, 0x0000, 0x0000, 0x0000,   // #
0x0000, 0x1E00, 0x3F00, 0x7580, 0x6580, 0x7400, 0x3C00, 0x1E00, 0x0700, 0x0580, 0x6580, 0x6580, 0x7580, 0x3F00, 0x1E00, 0x0400, 0x0400, 0x0000,   // $
0x0000, 0x7000, 0xD800, 0xD840, 0xD8C0, 0xD980, 0x7300, 0x0600, 0x0C00, 0x1B80, 0x36C0, 0x66C0, 0x46C0, 0x06C0, 0x0380, 0x0000, 0x0000, 0x0000,   // %
0x0000, 0x1E00, 0x3F00, 0x3300, 0x3300, 0x3300, 0x1E00, 0x0C00, 0x3CC0, 0x66C0, 0x6380, 0x6180, 0x6380, 0x3EC0, 0x1C80, 0x0000, 0x0000, 0x0000,   // &
0x0000, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,   // '
0x0080, 0x0100, 0x0300, 0x0600, 0x0600, 0x0400, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0400, 0x0600, 0x0600, 0x0300, 0x0100, 0x0080,   // (
0x2000, 0x1000, 0x1800, 0x0C00, 0x0C00, 0x0400, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0400, 0x0C00, 0x0C00, 0x1800, 0x1000, 0x2000,   // )
0x0000, 0x0C00, 0x2D00, 0x3F00, 0x1E00, 0x3300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,   // *
0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0xFFC0, 0xFFC0, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,   // +
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0400, 0x0400, 0x0800,   // ,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x1E00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,   // -
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000,   // .
0x0000, 0x0300, 0x0300, 0x0300, 0x0600, 0x0600, 0x0600, 0x0600, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x1800, 0x1800, 0x1800, 0x0000, 0x0000, 0x0000,   // /
0x0000, 0x1E00, 0x3F00, 0x3300, 0x6180, 0x6180, 0x6180, 0x6D80, 0x6D80, 0x6180, 0x6180, 0x6180, 0x3300, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // 0
0x0000, 0x0600, 0x0E00, 0x1E00, 0x3600, 0x2600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000,   // 1
0x0000, 0x1E00, 0x3F00, 0x7380, 0x6180, 0x6180, 0x0180, 0x0300, 0x0600, 0x0C00, 0x1800, 0x3000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000,   // 2
0x0000, 0x1C00, 0x3E00, 0x6300, 0x6300, 0x0300, 0x0E00, 0x0E00, 0x0300, 0x0180, 0x0180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // 3
0x0000, 0x0600, 0x0E00, 0x0E00, 0x1E00, 0x1E00, 0x1600, 0x3600, 0x3600, 0x6600, 0x7F80, 0x7F80, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000,   // 4
0x0000, 0x7F00, 0x7F00, 0x6000, 0x6000, 0x6000, 0x6E00, 0x7F00, 0x6380, 0x0180, 0x0180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // 5
0x0000, 0x1E00, 0x3F00, 0x3380, 0x6180, 0x6000, 0x6E00, 0x7F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x3380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // 6
0x0000, 0x7F80, 0x7F80, 0x0180, 0x0300, 0x0300, 0x0600, 0x0600, 0x0C00, 0x0C00, 0x0C00, 0x0800, 0x1800, 0x1800, 0x1800, 0x0000, 0x0000, 0x0000,   // 7
0x0000, 0x1E00, 0x3F00, 0x6380, 0x6180, 0x6180, 0x2100, 0x1E00, 0x3F00, 0x6180, 0x6180, 0x6180, 0x6180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // 8
0x0000, 0x1E00, 0x3F00, 0x7300, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0180, 0x6180, 0x7300, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // 9
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000,   // :
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0400, 0x0400, 0x0800,   // ;
0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0380, 0x0E00, 0x3800, 0x6000, 0x3800, 0x0E00, 0x0380, 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,   // <
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,   // =
0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x7000, 0x1C00, 0x0700, 0x0180, 0x0700, 0x1C00, 0x7000, 0x4000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,   // >
0x0000, 0x1F00, 0x3F80, 0x71C0, 0x60C0, 0x00C0, 0x01C0, 0x0380, 0x0700, 0x0E00, 0x0C00, 0x0C00, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000,   // ?
0x0000, 0x1E00, 0x3F00, 0x3180, 0x7180, 0x6380, 0x6F80, 0x6D80, 0x6D80, 0x6F80, 0x6780, 0x6000, 0x3200, 0x3E00, 0x1C00, 0x0000, 0x0000, 0x0000,   // @
0x0000, 0x0E00, 0x0E00, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x3180, 0x3180, 0x3F80, 0x3F80, 0x3180, 0x60C0, 0x60C0, 0x60C0, 0x0000, 0x0000, 0x0000,   // A
0x0000, 0x7C00, 0x7E00, 0x6300, 0x6300, 0x6300, 0x6300, 0x7E00, 0x7E00, 0x6300, 0x6180, 0x6180, 0x6380, 0x7F00, 0x7E00, 0x0000, 0x0000, 0x0000,   // B
0x0000, 0x1E00, 0x3F00, 0x3180, 0x6180, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6180, 0x3180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // C
0x0000, 0x7C00, 0x7F00, 0x6300, 0x6380, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6300, 0x6300, 0x7E00, 0x7C00, 0x0000, 0x0000, 0x0000,   // D
0x0000, 0x7F80, 0x7F80, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F00, 0x7F00, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000,   // E
0x0000, 0x7F80, 0x7F80, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F00, 0x7F00, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x0000, 0x0000, 0x0000,   // F
0x0000, 0x1E00, 0x3F00, 0x3180, 0x6180, 0x6000, 0x6000, 0x6000, 0x6380, 0x6380, 0x6180, 0x6180, 0x3180, 0x3F80, 0x1E00, 0x0000, 0x0000, 0x0000,   // G
0x0000, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x7F80, 0x7F80, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000,   // H
0x0000, 0x3F00, 0x3F00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x3F00, 0x3F00, 0x0000, 0x0000, 0x0000,   // I
0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x6180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // J
0x0000, 0x60C0, 0x6180, 0x6300, 0x6600, 0x6600, 0x6C00, 0x7800, 0x7C00, 0x6600, 0x6600, 0x6300, 0x6180, 0x6180, 0x60C0, 0x0000, 0x0000, 0x0000,   // K
0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000,   // L
0x0000, 0x71C0, 0x71C0, 0x7BC0, 0x7AC0, 0x6AC0, 0x6AC0, 0x6EC0, 0x64C0, 0x60C0, 0x60C0, 0x60C0, 0x60C0, 0x60C0, 0x60C0, 0x0000, 0x0000, 0x0000,   // M
0x0000, 0x7180, 0x7180, 0x7980, 0x7980, 0x7980, 0x6D80, 0x6D80, 0x6D80, 0x6580, 0x6780, 0x6780, 0x6780, 0x6380, 0x6380, 0x0000, 0x0000, 0x0000,   // N
0x0000, 0x1E00, 0x3F00, 0x3300, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x3300, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // O
0x0000, 0x7E00, 0x7F00, 0x6380, 0x6180, 0x6180, 0x6180, 0x6380, 0x7F00, 0x7E00, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x0000, 0x0000, 0x0000,   // P
0x0000, 0x1E00, 0x3F00, 0x3300, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6580, 0x6780, 0x3300, 0x3F80, 0x1E40, 0x0000, 0x0000, 0x0000,   // Q
0x0000, 0x7E00, 0x7F00, 0x6380, 0x6180, 0x6180, 0x6380, 0x7F00, 0x7E00, 0x6600, 0x6300, 0x6300, 0x6180, 0x6180, 0x60C0, 0x0000, 0x0000, 0x0000,   // R
0x0000, 0x0E00, 0x1F00, 0x3180, 0x3180, 0x3000, 0x3800, 0x1E00, 0x0700, 0x0380, 0x6180, 0x6180, 0x3180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // S
0x0000, 0xFFC0, 0xFFC0, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000,   // T
0x0000, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // U
0x0000, 0x60C0, 0x60C0, 0x60C0, 0x3180, 0x3180, 0x3180, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x0E00, 0x0E00, 0x0E00, 0x0400, 0x0000, 0x0000, 0x0000,   // V
0x0000, 0xC0C0, 0xC0C0, 0xC0C0, 0xC0C0, 0xC0C0, 0xCCC0, 0x4C80, 0x4C80, 0x5E80, 0x5280, 0x5280, 0x7380, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000,   // W
0x0000, 0xC0C0, 0x6080, 0x6180, 0x3300, 0x3B00, 0x1E00, 0x0C00, 0x0C00, 0x1E00, 0x1F00, 0x3B00, 0x7180, 0x6180, 0xC0C0, 0x0000, 0x0000, 0x0000,   // X
0x0000, 0xC0C0, 0x6180, 0x6180, 0x3300, 0x3300, 0x1E00, 0x1E00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000,   // Y
0x0000, 0x3F80, 0x3F80, 0x0180, 0x0300, 0x0300, 0x0600, 0x0C00, 0x0C00, 0x1800, 0x1800, 0x3000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000,   // Z
0x0F00, 0x0F00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0F00, 0x0F00,   // [
0x0000, 0x1800, 0x1800, 0x1800, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0300, 0x0300, 0x0300, 0x0000, 0x0000, 0x0000,   /* \ */
0x1E00, 0x1E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x1E00, 0x1E00,   // ]
0x0000, 0x0C00, 0x0C00, 0x1E00, 0x1200, 0x3300, 0x3300, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,   // ^
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFE0, 0x0000,   // _
0x0000, 0x3800, 0x1800, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,   // `
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1F00, 0x3F80, 0x6180, 0x0180, 0x1F80, 0x3F80, 0x6180, 0x6380, 0x7F80, 0x38C0, 0x0000, 0x0000, 0x0000,   // a
0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6E00, 0x7F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x7F00, 0x6E00, 0x0000, 0x0000, 0x0000,   // b
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F00, 0x7380, 0x6180, 0x6000, 0x6000, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // c
0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x1D80, 0x3F80, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0000, 0x0000, 0x0000,   // d
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F00, 0x7300, 0x6180, 0x7F80, 0x7F80, 0x6000, 0x7180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // e
0x0000, 0x07C0, 0x0FC0, 0x0C00, 0x0C00, 0x7F80, 0x7F80, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000,   // f
0x0000, 0x0000, 0x0000, 0x0000, 0x1D80, 0x3F80, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0180, 0x6380, 0x7F00, 0x3E00,   // g
0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6F00, 0x7F80, 0x7180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000,   // h
0x0000, 0x0600, 0x0600, 0x0000, 0x0000, 0x3E00, 0x3E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000,   // i
0x0600, 0x0600, 0x0000, 0x0000, 0x3E00, 0x3E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x4600, 0x7E00, 0x3C00,   // j
0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6180, 0x6300, 0x6600, 0x6C00, 0x7C00, 0x7600, 0x6300, 0x6300, 0x6180, 0x60C0, 0x0000, 0x0000, 0x0000,   // k
0x0000, 0x3E00, 0x3E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000,   // l
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xDD80, 0xFFC0, 0xCEC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0x0000, 0x0000, 0x0000,   // m
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6F00, 0x7F80, 0x7180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000,   // n
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // o
0x0000, 0x0000, 0x0000, 0x0000, 0x6E00, 0x7F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x7F00, 0x6E00, 0x6000, 0x6000, 0x6000, 0x6000,   // p
0x0000, 0x0000, 0x0000, 0x0000, 0x1D80, 0x3F80, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0180, 0x0180, 0x0180, 0x0180,   // q
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6700, 0x3F80, 0x3900, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x0000, 0x0000, 0x0000,   // r
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F80, 0x6180, 0x6000, 0x7F00, 0x3F80, 0x0180, 0x6180, 0x7F00, 0x1E00, 0x0000, 0x0000, 0x0000,   // s
0x0000, 0x0000, 0x0800, 0x1800, 0x1800, 0x7F00, 0x7F00, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1F80, 0x0F80, 0x0000, 0x0000, 0x0000,   // t
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6380, 0x7F80, 0x3D80, 0x0000, 0x0000, 0x0000,   // u
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x60C0, 0x3180, 0x3180, 0x3180, 0x1B00, 0x1B00, 0x1B00, 0x0E00, 0x0E00, 0x0600, 0x0000, 0x0000, 0x0000,   // v
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xDD80, 0xDD80, 0xDD80, 0x5500, 0x5500, 0x5500, 0x7700, 0x7700, 0x2200, 0x2200, 0x0000, 0x0000, 0x0000,   // w
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6180, 0x3300, 0x3300, 0x1E00, 0x0C00, 0x0C00, 0x1E00, 0x3300, 0x3300, 0x6180, 0x0000, 0x0000, 0x0000,   // x
0x0000, 0x0000, 0x0000, 0x0000, 0x6180, 0x6180, 0x3180, 0x3300, 0x3300, 0x1B00, 0x1B00, 0x1B00, 0x0E00, 0x0E00, 0x0E00, 0x1C00, 0x7C00, 0x7000,   // y
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7FC0, 0x7FC0, 0x0180, 0x0300, 0x0600, 0x0C00, 0x1800, 0x3000, 0x7FC0, 0x7FC0, 0x0000, 0x0000, 0x0000,   // z
0x0380, 0x0780, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0E00, 0x1C00, 0x1C00, 0x0E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0780, 0x0380,   // {
0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600,   // |
0x3800, 0x3C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0E00, 0x0700, 0x0700, 0x0E00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x3C00, 0x3800,   // }
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3880, 0x7F80, 0x4700, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,   // ~
};

const uint16_t TM_Font16x26 [] = {
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [ ]
0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03C0,0x03C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [!]
0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = ["]
0x01CE,0x03CE,0x03DE,0x039E,0x039C,0x079C,0x3FFF,0x7FFF,0x0738,0x0F38,0x0F78,0x0F78,0x0E78,0xFFFF,0xFFFF,0x1EF0,0x1CF0,0x1CE0,0x3CE0,0x3DE0,0x39E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [#]
0x03FC,0x0FFE,0x1FEE,0x1EE0,0x1EE0,0x1EE0,0x1EE0,0x1FE0,0x0FE0,0x07E0,0x03F0,0x01FC,0x01FE,0x01FE,0x01FE,0x01FE,0x01FE,0x01FE,0x3DFE,0x3FFC,0x0FF0,0x01E0,0x01E0,0x0000,0x0000,0x0000, // Ascii = [$]
0x3E03,0xF707,0xE78F,0xE78E,0xE39E,0xE3BC,0xE7B8,0xE7F8,0xF7F0,0x3FE0,0x01C0,0x03FF,0x07FF,0x07F3,0x0FF3,0x1EF3,0x3CF3,0x38F3,0x78F3,0xF07F,0xE03F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [%]
0x07E0,0x0FF8,0x0F78,0x1F78,0x1F78,0x1F78,0x0F78,0x0FF0,0x0FE0,0x1F80,0x7FC3,0xFBC3,0xF3E7,0xF1F7,0xF0F7,0xF0FF,0xF07F,0xF83E,0x7C7F,0x3FFF,0x1FEF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [&]
0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03C0,0x01C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [']
0x003F,0x007C,0x01F0,0x01E0,0x03C0,0x07C0,0x0780,0x0780,0x0F80,0x0F00,0x0F00,0x0F00,0x0F00,0x0F00,0x0F00,0x0F80,0x0780,0x0780,0x07C0,0x03C0,0x01E0,0x01F0,0x007C,0x003F,0x000F,0x0000, // Ascii = [(]
0x7E00,0x1F00,0x07C0,0x03C0,0x01E0,0x01F0,0x00F0,0x00F0,0x00F8,0x0078,0x0078,0x0078,0x0078,0x0078,0x0078,0x00F8,0x00F0,0x00F0,0x01F0,0x01E0,0x03C0,0x07C0,0x1F00,0x7E00,0x7800,0x0000, // Ascii = [)]
0x03E0,0x03C0,0x01C0,0x39CE,0x3FFF,0x3F7F,0x0320,0x0370,0x07F8,0x0F78,0x1F3C,0x0638,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [*]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0xFFFF,0xFFFF,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [+]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x01E0,0x01E0,0x01E0,0x01C0,0x0380, // Ascii = [,]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3FFE,0x3FFE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [-]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [.]
0x000F,0x000F,0x001E,0x001E,0x003C,0x003C,0x0078,0x0078,0x00F0,0x00F0,0x01E0,0x01E0,0x03C0,0x03C0,0x0780,0x0780,0x0F00,0x0F00,0x1E00,0x1E00,0x3C00,0x3C00,0x7800,0x7800,0xF000,0x0000, // Ascii = [/]
0x07F0,0x0FF8,0x1F7C,0x3E3E,0x3C1E,0x7C1F,0x7C1F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x7C1F,0x7C1F,0x3C1E,0x3E3E,0x1F7C,0x0FF8,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [0]
0x00F0,0x07F0,0x3FF0,0x3FF0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [1]
0x0FE0,0x3FF8,0x3C7C,0x003C,0x003E,0x003E,0x003E,0x003C,0x003C,0x007C,0x00F8,0x01F0,0x03E0,0x07C0,0x0780,0x0F00,0x1E00,0x3E00,0x3C00,0x3FFE,0x3FFE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [2]
0x0FF0,0x1FF8,0x1C7C,0x003E,0x003E,0x003E,0x003C,0x003C,0x00F8,0x0FF0,0x0FF8,0x007C,0x003E,0x001E,0x001E,0x001E,0x001E,0x003E,0x1C7C,0x1FF8,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [3]
0x0078,0x00F8,0x00F8,0x01F8,0x03F8,0x07F8,0x07F8,0x0F78,0x1E78,0x1E78,0x3C78,0x7878,0x7878,0xFFFF,0xFFFF,0x0078,0x0078,0x0078,0x0078,0x0078,0x0078,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [4]
0x1FFC,0x1FFC,0x1FFC,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1FE0,0x1FF8,0x00FC,0x007C,0x003E,0x003E,0x001E,0x003E,0x003E,0x003C,0x1C7C,0x1FF8,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [5]
0x01FC,0x07FE,0x0F8E,0x1F00,0x1E00,0x3E00,0x3C00,0x3C00,0x3DF8,0x3FFC,0x7F3E,0x7E1F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3E0F,0x1E1F,0x1F3E,0x0FFC,0x03F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [6]
0x3FFF,0x3FFF,0x3FFF,0x000F,0x001E,0x001E,0x003C,0x0038,0x0078,0x00F0,0x00F0,0x01E0,0x01E0,0x03C0,0x03C0,0x0780,0x0F80,0x0F80,0x0F00,0x1F00,0x1F00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [7]
0x07F8,0x0FFC,0x1F3E,0x1E1E,0x3E1E,0x3E1E,0x1E1E,0x1F3C,0x0FF8,0x07F0,0x0FF8,0x1EFC,0x3E3E,0x3C1F,0x7C1F,0x7C0F,0x7C0F,0x3C1F,0x3F3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [8]
0x07F0,0x0FF8,0x1E7C,0x3C3E,0x3C1E,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x3C1F,0x3E3F,0x1FFF,0x07EF,0x001F,0x001E,0x001E,0x003E,0x003C,0x38F8,0x3FF0,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [9]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [:]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x01E0,0x01E0,0x01E0,0x03C0,0x0380, // Ascii = [;]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0003,0x000F,0x003F,0x00FC,0x03F0,0x0FC0,0x3F00,0xFE00,0x3F00,0x0FC0,0x03F0,0x00FC,0x003F,0x000F,0x0003,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [<]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [=]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xE000,0xF800,0x7E00,0x1F80,0x07E0,0x01F8,0x007E,0x001F,0x007E,0x01F8,0x07E0,0x1F80,0x7E00,0xF800,0xE000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [>]
0x1FF0,0x3FFC,0x383E,0x381F,0x381F,0x001E,0x001E,0x003C,0x0078,0x00F0,0x01E0,0x03C0,0x03C0,0x07C0,0x07C0,0x0000,0x0000,0x0000,0x07C0,0x07C0,0x07C0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [?]
0x03F8,0x0FFE,0x1F1E,0x3E0F,0x3C7F,0x78FF,0x79EF,0x73C7,0xF3C7,0xF38F,0xF38F,0xF38F,0xF39F,0xF39F,0x73FF,0x7BFF,0x79F7,0x3C00,0x1F1C,0x0FFC,0x03F8,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [@]
0x0000,0x0000,0x0000,0x03E0,0x03E0,0x07F0,0x07F0,0x07F0,0x0F78,0x0F78,0x0E7C,0x1E3C,0x1E3C,0x3C3E,0x3FFE,0x3FFF,0x781F,0x780F,0xF00F,0xF007,0xF007,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [A]
0x0000,0x0000,0x0000,0x3FF8,0x3FFC,0x3C3E,0x3C1E,0x3C1E,0x3C1E,0x3C3E,0x3C7C,0x3FF0,0x3FF8,0x3C7E,0x3C1F,0x3C1F,0x3C0F,0x3C0F,0x3C1F,0x3FFE,0x3FF8,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [B]
0x0000,0x0000,0x0000,0x01FF,0x07FF,0x1F87,0x3E00,0x3C00,0x7C00,0x7800,0x7800,0x7800,0x7800,0x7800,0x7C00,0x7C00,0x3E00,0x3F00,0x1F83,0x07FF,0x01FF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [C]
0x0000,0x0000,0x0000,0x7FF0,0x7FFC,0x787E,0x781F,0x781F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x781F,0x781E,0x787E,0x7FF8,0x7FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [D]
0x0000,0x0000,0x0000,0x3FFF,0x3FFF,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3FFE,0x3FFE,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [E]
0x0000,0x0000,0x0000,0x1FFF,0x1FFF,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1FFF,0x1FFF,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [F]
0x0000,0x0000,0x0000,0x03FE,0x0FFF,0x1F87,0x3E00,0x7C00,0x7C00,0x7800,0xF800,0xF800,0xF87F,0xF87F,0x780F,0x7C0F,0x7C0F,0x3E0F,0x1F8F,0x0FFF,0x03FE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [G]
0x0000,0x0000,0x0000,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7FFF,0x7FFF,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [H]
0x0000,0x0000,0x0000,0x3FFF,0x3FFF,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [I]
0x0000,0x0000,0x0000,0x1FFC,0x1FFC,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x0078,0x0078,0x38F8,0x3FF0,0x3FC0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [J]
0x0000,0x0000,0x0000,0x3C1F,0x3C1E,0x3C3C,0x3C78,0x3CF0,0x3DE0,0x3FE0,0x3FC0,0x3F80,0x3FC0,0x3FE0,0x3DF0,0x3CF0,0x3C78,0x3C7C,0x3C3E,0x3C1F,0x3C0F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [K]
0x0000,0x0000,0x0000,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [L]
0x0000,0x0000,0x0000,0xF81F,0xFC1F,0xFC1F,0xFE3F,0xFE3F,0xFE3F,0xFF7F,0xFF77,0xFF77,0xF7F7,0xF7E7,0xF3E7,0xF3E7,0xF3C7,0xF007,0xF007,0xF007,0xF007,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [M]
0x0000,0x0000,0x0000,0x7C0F,0x7C0F,0x7E0F,0x7F0F,0x7F0F,0x7F8F,0x7F8F,0x7FCF,0x7BEF,0x79EF,0x79FF,0x78FF,0x78FF,0x787F,0x783F,0x783F,0x781F,0x781F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [N]
0x0000,0x0000,0x0000,0x07F0,0x1FFC,0x3E3E,0x7C1F,0x780F,0x780F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0x780F,0x780F,0x7C1F,0x3E3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [O]
0x0000,0x0000,0x0000,0x3FFC,0x3FFF,0x3E1F,0x3E0F,0x3E0F,0x3E0F,0x3E0F,0x3E1F,0x3E3F,0x3FFC,0x3FF0,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [P]
0x0000,0x0000,0x0000,0x07F0,0x1FFC,0x3E3E,0x7C1F,0x780F,0x780F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0x780F,0x780F,0x7C1F,0x3E3E,0x1FFC,0x07F8,0x007C,0x003F,0x000F,0x0003,0x0000, // Ascii = [Q]
0x0000,0x0000,0x0000,0x3FF0,0x3FFC,0x3C7E,0x3C3E,0x3C1E,0x3C1E,0x3C3E,0x3C3C,0x3CFC,0x3FF0,0x3FE0,0x3DF0,0x3CF8,0x3C7C,0x3C3E,0x3C1E,0x3C1F,0x3C0F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [R]
0x0000,0x0000,0x0000,0x07FC,0x1FFE,0x3E0E,0x3C00,0x3C00,0x3C00,0x3E00,0x1FC0,0x0FF8,0x03FE,0x007F,0x001F,0x000F,0x000F,0x201F,0x3C3E,0x3FFC,0x1FF0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [S]
0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [T]
0x0000,0x0000,0x0000,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x3C1E,0x3C1E,0x3E3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [U]
0x0000,0x0000,0x0000,0xF007,0xF007,0xF807,0x780F,0x7C0F,0x3C1E,0x3C1E,0x3E1E,0x1E3C,0x1F3C,0x1F78,0x0F78,0x0FF8,0x07F0,0x07F0,0x07F0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [V]
0x0000,0x0000,0x0000,0xE003,0xF003,0xF003,0xF007,0xF3E7,0xF3E7,0xF3E7,0x73E7,0x7BF7,0x7FF7,0x7FFF,0x7F7F,0x7F7F,0x7F7E,0x3F7E,0x3E3E,0x3E3E,0x3E3E,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [W]
0x0000,0x0000,0x0000,0xF807,0x7C0F,0x3E1E,0x3E3E,0x1F3C,0x0FF8,0x07F0,0x07E0,0x03E0,0x03E0,0x07F0,0x0FF8,0x0F7C,0x1E7C,0x3C3E,0x781F,0x780F,0xF00F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [X]
0x0000,0x0000,0x0000,0xF807,0x7807,0x7C0F,0x3C1E,0x3E1E,0x1F3C,0x0F78,0x0FF8,0x07F0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [Y]
0x0000,0x0000,0x0000,0x7FFF,0x7FFF,0x000F,0x001F,0x003E,0x007C,0x00F8,0x00F0,0x01E0,0x03E0,0x07C0,0x0F80,0x0F00,0x1E00,0x3E00,0x7C00,0x7FFF,0x7FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [Z]
0x07FF,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x07FF,0x07FF,0x0000, // Ascii = [[]
0x7800,0x7800,0x3C00,0x3C00,0x1E00,0x1E00,0x0F00,0x0F00,0x0780,0x0780,0x03C0,0x03C0,0x01E0,0x01E0,0x00F0,0x00F0,0x0078,0x0078,0x003C,0x003C,0x001E,0x001E,0x000F,0x000F,0x0007,0x0000, // Ascii = [\]
0x7FF0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x7FF0,0x7FF0,0x0000, // Ascii = []]
0x00C0,0x01C0,0x01C0,0x03E0,0x03E0,0x07F0,0x07F0,0x0778,0x0F78,0x0F38,0x1E3C,0x1E3C,0x3C1E,0x3C1E,0x380F,0x780F,0x7807,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [^]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x0000,0x0000,0x0000, // Ascii = [_]
0x00F0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [`]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0FF8,0x3FFC,0x3C7C,0x003E,0x003E,0x003E,0x07FE,0x1FFE,0x3E3E,0x7C3E,0x783E,0x7C3E,0x7C7E,0x3FFF,0x1FCF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [a]
0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3DF8,0x3FFE,0x3F3E,0x3E1F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C1F,0x3C1E,0x3F3E,0x3FFC,0x3BF0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [b]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03FE,0x0FFF,0x1F87,0x3E00,0x3E00,0x3C00,0x7C00,0x7C00,0x7C00,0x3C00,0x3E00,0x3E00,0x1F87,0x0FFF,0x03FE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [c]
0x001F,0x001F,0x001F,0x001F,0x001F,0x001F,0x07FF,0x1FFF,0x3E3F,0x3C1F,0x7C1F,0x7C1F,0x7C1F,0x781F,0x781F,0x7C1F,0x7C1F,0x3C3F,0x3E7F,0x1FFF,0x0FDF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [d]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03F8,0x0FFC,0x1F3E,0x3E1E,0x3C1F,0x7C1F,0x7FFF,0x7FFF,0x7C00,0x7C00,0x3C00,0x3E00,0x1F07,0x0FFF,0x03FE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [e]
0x01FF,0x03E1,0x03C0,0x07C0,0x07C0,0x07C0,0x7FFF,0x7FFF,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [f]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07EF,0x1FFF,0x3E7F,0x3C1F,0x7C1F,0x7C1F,0x781F,0x781F,0x781F,0x7C1F,0x7C1F,0x3C3F,0x3E7F,0x1FFF,0x0FDF,0x001E,0x001E,0x001E,0x387C,0x3FF8, // Ascii = [g]
0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3DFC,0x3FFE,0x3F9E,0x3F1F,0x3E1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [h]
0x01F0,0x01F0,0x0000,0x0000,0x0000,0x0000,0x7FE0,0x7FE0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [i]
0x00F8,0x00F8,0x0000,0x0000,0x0000,0x0000,0x3FF8,0x3FF8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F0,0x71F0,0x7FE0, // Ascii = [j]
0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C1F,0x3C3E,0x3C7C,0x3CF8,0x3DF0,0x3DE0,0x3FC0,0x3FC0,0x3FE0,0x3DF0,0x3CF8,0x3C7C,0x3C3E,0x3C1F,0x3C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [k]
0x7FF0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [l]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF79E,0xFFFF,0xFFFF,0xFFFF,0xFBE7,0xF9E7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [m]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3DFC,0x3FFE,0x3F9E,0x3F1F,0x3E1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [n]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07F0,0x1FFC,0x3E3E,0x3C1F,0x7C1F,0x780F,0x780F,0x780F,0x780F,0x780F,0x7C1F,0x3C1F,0x3E3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [o]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3DF8,0x3FFE,0x3F3E,0x3E1F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C1F,0x3E1E,0x3F3E,0x3FFC,0x3FF8,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00, // Ascii = [p]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07EE,0x1FFE,0x3E7E,0x3C1E,0x7C1E,0x781E,0x781E,0x781E,0x781E,0x781E,0x7C1E,0x7C3E,0x3E7E,0x1FFE,0x0FDE,0x001E,0x001E,0x001E,0x001E,0x001E, // Ascii = [q]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1F7F,0x1FFF,0x1FE7,0x1FC7,0x1F87,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [r]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07FC,0x1FFE,0x1E0E,0x3E00,0x3E00,0x3F00,0x1FE0,0x07FC,0x00FE,0x003E,0x001E,0x001E,0x3C3E,0x3FFC,0x1FF0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [s]
0x0000,0x0000,0x0000,0x0780,0x0780,0x0780,0x7FFF,0x7FFF,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x07C0,0x03FF,0x01FF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [t]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C3E,0x3C7E,0x3EFE,0x1FFE,0x0FDE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [u]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF007,0x780F,0x780F,0x3C1E,0x3C1E,0x3E1E,0x1E3C,0x1E3C,0x0F78,0x0F78,0x0FF0,0x07F0,0x07F0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [v]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF003,0xF1E3,0xF3E3,0xF3E7,0xF3F7,0xF3F7,0x7FF7,0x7F77,0x7F7F,0x7F7F,0x7F7F,0x3E3E,0x3E3E,0x3E3E,0x3E3E,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [w]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7C0F,0x3E1E,0x3E3C,0x1F3C,0x0FF8,0x07F0,0x07F0,0x03E0,0x07F0,0x07F8,0x0FF8,0x1E7C,0x3E3E,0x3C1F,0x781F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [x]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF807,0x780F,0x7C0F,0x3C1E,0x3C1E,0x1E3C,0x1E3C,0x1F3C,0x0F78,0x0FF8,0x07F0,0x07F0,0x03E0,0x03E0,0x03C0,0x03C0,0x03C0,0x0780,0x0F80,0x7F00, // Ascii = [y]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3FFF,0x3FFF,0x001F,0x003E,0x007C,0x00F8,0x01F0,0x03E0,0x07C0,0x0F80,0x1F00,0x1E00,0x3C00,0x7FFF,0x7FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [z]
0x01FE,0x03E0,0x03C0,0x03C0,0x03C0,0x03C0,0x01E0,0x01E0,0x01E0,0x01C0,0x03C0,0x3F80,0x3F80,0x03C0,0x01C0,0x01E0,0x01E0,0x01E0,0x03C0,0x03C0,0x03C0,0x03C0,0x03E0,0x01FE,0x007E,0x0000, // Ascii = [{]
0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x0000, // Ascii = [|]
0x3FC0,0x03E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01C0,0x03C0,0x03C0,0x01C0,0x01E0,0x00FE,0x00FE,0x01E0,0x01C0,0x03C0,0x03C0,0x01C0,0x01E0,0x01E0,0x01E0,0x01E0,0x03E0,0x3FC0,0x3F00,0x0000, // Ascii = [}]
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3F07,0x7FC7,0x73E7,0xF1FF,0xF07E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [~]
};


TM_FontDef_t TM_Font_7x10 = {
7,
10,
TM_Font7x10
};

TM_FontDef_t TM_Font_11x18 = {
11,
18,
TM_Font11x18
};

TM_FontDef_t TM_Font_16x26 = {
16,
26,
TM_Font16x26
};

tm_stm32f4_fonts.h
#ifndef TM_FONTS_H
#define TM_FONTS_H

#include "stm32l1xx.h"
//#include "defines.h"
/**
 * Font struct
 */
typedef struct {
uint8_t FontWidth;
uint8_t FontHeight;
const uint16_t *data;
} TM_FontDef_t;

#endif