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
Комментариев нет:
Отправить комментарий