I simplified the library "ILI9225_TFT" provided by Arman Safikhani to better suit my needs in implementing a simple sliding puzzle game.
Revision 3:251e4d020501, committed 2018-04-27
- Comitter:
- blac3777
- Date:
- Fri Apr 27 07:33:56 2018 +0000
- Parent:
- 2:cc93245bb6d0
- Commit message:
- I simplified the library "ILI9225_TFT" provided by Arman Safikhani to suit my needs in implementing a simple sliding puzzle game.
Changed in this revision
diff -r cc93245bb6d0 -r 251e4d020501 DefaultFonts.h --- a/DefaultFonts.h Tue Sep 01 12:16:09 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,351 +0,0 @@ -#define fontdatatype const uint8_t - - -//Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0 -//MikroElektronika 2011 -//http://www.mikroe.com - -//GLCD FontName : Terminal6x8 -//GLCD FontSize : 6 x 8 - -uint8_t Terminal6x8[] = { - 0x06, 0x08, 0x20, 0x60, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char - 0x05, 0x00, 0x00, 0x06, 0x5F, 0x06, 0x00, // Code for char ! - 0x06, 0x00, 0x07, 0x03, 0x00, 0x07, 0x03, // Code for char " - 0x06, 0x00, 0x24, 0x7E, 0x24, 0x7E, 0x24, // Code for char # - 0x05, 0x00, 0x24, 0x2B, 0x6A, 0x12, 0x00, // Code for char $ - 0x06, 0x00, 0x63, 0x13, 0x08, 0x64, 0x63, // Code for char % - 0x06, 0x00, 0x36, 0x49, 0x56, 0x20, 0x50, // Code for char & - 0x04, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, // Code for char ' - 0x04, 0x00, 0x00, 0x3E, 0x41, 0x00, 0x00, // Code for char ( - 0x04, 0x00, 0x00, 0x41, 0x3E, 0x00, 0x00, // Code for char ) - 0x06, 0x00, 0x08, 0x3E, 0x1C, 0x3E, 0x08, // Code for char * - 0x06, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, // Code for char + - 0x04, 0x00, 0x00, 0xE0, 0x60, 0x00, 0x00, // Code for char , - 0x06, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, // Code for char - - 0x04, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, // Code for char . - 0x06, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, // Code for char / - 0x06, 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, // Code for char 0 - 0x05, 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, // Code for char 1 - 0x06, 0x00, 0x62, 0x51, 0x49, 0x49, 0x46, // Code for char 2 - 0x06, 0x00, 0x22, 0x49, 0x49, 0x49, 0x36, // Code for char 3 - 0x06, 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, // Code for char 4 - 0x06, 0x00, 0x2F, 0x49, 0x49, 0x49, 0x31, // Code for char 5 - 0x06, 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, // Code for char 6 - 0x06, 0x00, 0x01, 0x71, 0x09, 0x05, 0x03, // Code for char 7 - 0x06, 0x00, 0x36, 0x49, 0x49, 0x49, 0x36, // Code for char 8 - 0x06, 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, // Code for char 9 - 0x04, 0x00, 0x00, 0x6C, 0x6C, 0x00, 0x00, // Code for char : - 0x04, 0x00, 0x00, 0xEC, 0x6C, 0x00, 0x00, // Code for char ; - 0x05, 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, // Code for char < - 0x06, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, // Code for char = - 0x06, 0x00, 0x00, 0x41, 0x22, 0x14, 0x08, // Code for char > - 0x06, 0x00, 0x02, 0x01, 0x59, 0x09, 0x06, // Code for char ? - 0x06, 0x00, 0x3E, 0x41, 0x5D, 0x55, 0x1E, // Code for char @ - 0x06, 0x00, 0x7E, 0x11, 0x11, 0x11, 0x7E, // Code for char A - 0x06, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, // Code for char B - 0x06, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, // Code for char C - 0x06, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x3E, // Code for char D - 0x06, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, // Code for char E - 0x06, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, // Code for char F - 0x06, 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A, // Code for char G - 0x06, 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, // Code for char H - 0x05, 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00, // Code for char I - 0x06, 0x00, 0x30, 0x40, 0x40, 0x40, 0x3F, // Code for char J - 0x06, 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, // Code for char K - 0x06, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, // Code for char L - 0x06, 0x00, 0x7F, 0x02, 0x04, 0x02, 0x7F, // Code for char M - 0x06, 0x00, 0x7F, 0x02, 0x04, 0x08, 0x7F, // Code for char N - 0x06, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, // Code for char O - 0x06, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, // Code for char P - 0x06, 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, // Code for char Q - 0x06, 0x00, 0x7F, 0x09, 0x09, 0x19, 0x66, // Code for char R - 0x06, 0x00, 0x26, 0x49, 0x49, 0x49, 0x32, // Code for char S - 0x06, 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, // Code for char T - 0x06, 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, // Code for char U - 0x06, 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, // Code for char V - 0x06, 0x00, 0x3F, 0x40, 0x3C, 0x40, 0x3F, // Code for char W - 0x06, 0x00, 0x63, 0x14, 0x08, 0x14, 0x63, // Code for char X - 0x06, 0x00, 0x07, 0x08, 0x70, 0x08, 0x07, // Code for char Y - 0x05, 0x00, 0x71, 0x49, 0x45, 0x43, 0x00, // Code for char Z - 0x05, 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00, // Code for char [ - 0x06, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, // Code for char BackSlash - 0x05, 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00, // Code for char ] - 0x06, 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, // Code for char ^ - 0x06, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, // Code for char _ - 0x04, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, // Code for char ` - 0x06, 0x00, 0x20, 0x54, 0x54, 0x54, 0x78, // Code for char a - 0x06, 0x00, 0x7F, 0x44, 0x44, 0x44, 0x38, // Code for char b - 0x06, 0x00, 0x38, 0x44, 0x44, 0x44, 0x28, // Code for char c - 0x06, 0x00, 0x38, 0x44, 0x44, 0x44, 0x7F, // Code for char d - 0x06, 0x00, 0x38, 0x54, 0x54, 0x54, 0x08, // Code for char e - 0x05, 0x00, 0x08, 0x7E, 0x09, 0x09, 0x00, // Code for char f - 0x06, 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, // Code for char g - 0x05, 0x00, 0x7F, 0x04, 0x04, 0x78, 0x00, // Code for char h - 0x05, 0x00, 0x00, 0x00, 0x7D, 0x40, 0x00, // Code for char i - 0x05, 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00, // Code for char j - 0x05, 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, // Code for char k - 0x05, 0x00, 0x00, 0x00, 0x7F, 0x40, 0x00, // Code for char l - 0x06, 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, // Code for char m - 0x05, 0x00, 0x7C, 0x04, 0x04, 0x78, 0x00, // Code for char n - 0x06, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, // Code for char o - 0x06, 0x00, 0xFC, 0x44, 0x44, 0x44, 0x38, // Code for char p - 0x06, 0x00, 0x38, 0x44, 0x44, 0x44, 0xFC, // Code for char q - 0x06, 0x00, 0x44, 0x78, 0x44, 0x04, 0x08, // Code for char r - 0x06, 0x00, 0x08, 0x54, 0x54, 0x54, 0x20, // Code for char s - 0x05, 0x00, 0x04, 0x3E, 0x44, 0x24, 0x00, // Code for char t - 0x05, 0x00, 0x3C, 0x40, 0x20, 0x7C, 0x00, // Code for char u - 0x06, 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, // Code for char v - 0x06, 0x00, 0x3C, 0x60, 0x30, 0x60, 0x3C, // Code for char w - 0x05, 0x00, 0x6C, 0x10, 0x10, 0x6C, 0x00, // Code for char x - 0x05, 0x00, 0x9C, 0xA0, 0x60, 0x3C, 0x00, // Code for char y - 0x05, 0x00, 0x64, 0x54, 0x54, 0x4C, 0x00, // Code for char z - 0x05, 0x00, 0x08, 0x3E, 0x41, 0x41, 0x00, // Code for char { - 0x04, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, // Code for char | - 0x06, 0x00, 0x00, 0x41, 0x41, 0x3E, 0x08, // Code for char } - 0x05, 0x00, 0x02, 0x01, 0x02, 0x01, 0x00, // Code for char ~ - 0x06, 0x00, 0x3C, 0x26, 0x23, 0x26, 0x3C // Code for char -}; - - -//Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0 -//MikroElektronika 2011 -//http://www.mikroe.com - -//GLCD FontName : Terminal11x16 -//GLCD FontSize : 11 x 16 - -uint8_t Terminal11x16[] = { - 0x0B, 0x10, 0x20, 0x60, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0xFF, 0x33, 0xFF, 0x33, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ! - 0x08, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char " - 0x0B, 0x00, 0x02, 0x10, 0x1E, 0x90, 0x1F, 0xF0, 0x03, 0x7E, 0x02, 0x1E, 0x1E, 0x90, 0x1F, 0xF0, 0x03, 0x7E, 0x02, 0x1E, 0x00, 0x10, 0x00, // Code for char # - 0x09, 0x00, 0x00, 0x78, 0x04, 0xFC, 0x0C, 0xCC, 0x0C, 0xFF, 0x3F, 0xFF, 0x3F, 0xCC, 0x0C, 0xCC, 0x0F, 0x88, 0x07, 0x00, 0x00, 0x00, 0x00, // Code for char $ - 0x0B, 0x00, 0x30, 0x38, 0x38, 0x38, 0x1C, 0x38, 0x0E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x38, 0x70, 0x38, 0x38, 0x38, 0x1C, 0x00, // Code for char % - 0x0A, 0x00, 0x00, 0x00, 0x1F, 0xB8, 0x3F, 0xFC, 0x31, 0xC6, 0x21, 0xE2, 0x37, 0x3E, 0x1E, 0x1C, 0x1C, 0x00, 0x36, 0x00, 0x22, 0x00, 0x00, // Code for char & - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ' - 0x08, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x03, 0xFC, 0x0F, 0xFE, 0x1F, 0x07, 0x38, 0x01, 0x20, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ( - 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x20, 0x07, 0x38, 0xFE, 0x1F, 0xFC, 0x0F, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ) - 0x09, 0x00, 0x00, 0x98, 0x0C, 0xB8, 0x0E, 0xE0, 0x03, 0xF8, 0x0F, 0xF8, 0x0F, 0xE0, 0x03, 0xB8, 0x0E, 0x98, 0x0C, 0x00, 0x00, 0x00, 0x00, // Code for char * - 0x09, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xF0, 0x0F, 0xF0, 0x0F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char + - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB8, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char , - 0x09, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char - - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char . - 0x0B, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, // Code for char / - 0x0B, 0xF8, 0x07, 0xFE, 0x1F, 0x06, 0x1E, 0x03, 0x33, 0x83, 0x31, 0xC3, 0x30, 0x63, 0x30, 0x33, 0x30, 0x1E, 0x18, 0xFE, 0x1F, 0xF8, 0x07, // Code for char 0 - 0x0A, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x30, 0x0C, 0x30, 0x0E, 0x30, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, // Code for char 1 - 0x0B, 0x1C, 0x30, 0x1E, 0x38, 0x07, 0x3C, 0x03, 0x3E, 0x03, 0x37, 0x83, 0x33, 0xC3, 0x31, 0xE3, 0x30, 0x77, 0x30, 0x3E, 0x30, 0x1C, 0x30, // Code for char 2 - 0x0B, 0x0C, 0x0C, 0x0E, 0x1C, 0x07, 0x38, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xE7, 0x39, 0x7E, 0x1F, 0x3C, 0x0E, // Code for char 3 - 0x0B, 0xC0, 0x03, 0xE0, 0x03, 0x70, 0x03, 0x38, 0x03, 0x1C, 0x03, 0x0E, 0x03, 0x07, 0x03, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x03, 0x00, 0x03, // Code for char 4 - 0x0B, 0x3F, 0x0C, 0x7F, 0x1C, 0x63, 0x38, 0x63, 0x30, 0x63, 0x30, 0x63, 0x30, 0x63, 0x30, 0x63, 0x30, 0xE3, 0x38, 0xC3, 0x1F, 0x83, 0x0F, // Code for char 5 - 0x0B, 0xC0, 0x0F, 0xF0, 0x1F, 0xF8, 0x39, 0xDC, 0x30, 0xCE, 0x30, 0xC7, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x39, 0x80, 0x1F, 0x00, 0x0F, // Code for char 6 - 0x0B, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x30, 0x03, 0x3C, 0x03, 0x0F, 0xC3, 0x03, 0xF3, 0x00, 0x3F, 0x00, 0x0F, 0x00, 0x03, 0x00, // Code for char 7 - 0x0B, 0x00, 0x0F, 0xBC, 0x1F, 0xFE, 0x39, 0xE7, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xE7, 0x30, 0xFE, 0x39, 0xBC, 0x1F, 0x00, 0x0F, // Code for char 8 - 0x0B, 0x3C, 0x00, 0x7E, 0x00, 0xE7, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x38, 0xC3, 0x1C, 0xC3, 0x0E, 0xE7, 0x07, 0xFE, 0x03, 0xFC, 0x00, // Code for char 9 - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1C, 0x70, 0x1C, 0x70, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char : - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x9C, 0x70, 0xFC, 0x70, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ; - 0x09, 0x00, 0x00, 0xC0, 0x00, 0xE0, 0x01, 0xF0, 0x03, 0x38, 0x07, 0x1C, 0x0E, 0x0E, 0x1C, 0x07, 0x38, 0x03, 0x30, 0x00, 0x00, 0x00, 0x00, // Code for char < - 0x0A, 0x00, 0x00, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x00, 0x00, // Code for char = - 0x09, 0x00, 0x00, 0x03, 0x30, 0x07, 0x38, 0x0E, 0x1C, 0x1C, 0x0E, 0x38, 0x07, 0xF0, 0x03, 0xE0, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char > - 0x0A, 0x1C, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x03, 0x00, 0x83, 0x37, 0xC3, 0x37, 0xE3, 0x00, 0x77, 0x00, 0x3E, 0x00, 0x1C, 0x00, 0x00, 0x00, // Code for char ? - 0x0B, 0xF8, 0x0F, 0xFE, 0x1F, 0x07, 0x18, 0xF3, 0x33, 0xFB, 0x37, 0x1B, 0x36, 0xFB, 0x37, 0xFB, 0x37, 0x07, 0x36, 0xFE, 0x03, 0xF8, 0x01, // Code for char @ - 0x0A, 0x00, 0x38, 0x00, 0x3F, 0xE0, 0x07, 0xFC, 0x06, 0x1F, 0x06, 0x1F, 0x06, 0xFC, 0x06, 0xE0, 0x07, 0x00, 0x3F, 0x00, 0x38, 0x00, 0x00, // Code for char A - 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xE7, 0x30, 0xFE, 0x39, 0xBC, 0x1F, 0x00, 0x0F, 0x00, 0x00, // Code for char B - 0x0A, 0xF0, 0x03, 0xFC, 0x0F, 0x0E, 0x1C, 0x07, 0x38, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x07, 0x38, 0x0E, 0x1C, 0x0C, 0x0C, 0x00, 0x00, // Code for char C - 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x07, 0x38, 0x0E, 0x1C, 0xFC, 0x0F, 0xF0, 0x03, 0x00, 0x00, // Code for char D - 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0x03, 0x30, 0x03, 0x30, 0x00, 0x00, // Code for char E - 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, // Code for char F - 0x0A, 0xF0, 0x03, 0xFC, 0x0F, 0x0E, 0x1C, 0x07, 0x38, 0x03, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC7, 0x3F, 0xC6, 0x3F, 0x00, 0x00, // Code for char G - 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, // Code for char H - 0x08, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x03, 0x30, 0xFF, 0x3F, 0xFF, 0x3F, 0x03, 0x30, 0x03, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char I - 0x0A, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x38, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x38, 0xFF, 0x1F, 0xFF, 0x07, 0x00, 0x00, // Code for char J - 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0xC0, 0x00, 0xE0, 0x01, 0xF0, 0x03, 0x38, 0x07, 0x1C, 0x0E, 0x0E, 0x1C, 0x07, 0x38, 0x03, 0x30, 0x00, 0x00, // Code for char K - 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, // Code for char L - 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0x1E, 0x00, 0x78, 0x00, 0xE0, 0x01, 0xE0, 0x01, 0x78, 0x00, 0x1E, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, // Code for char M - 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0x0E, 0x00, 0x38, 0x00, 0xF0, 0x00, 0xC0, 0x03, 0x00, 0x07, 0x00, 0x1C, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, // Code for char N - 0x0A, 0xF0, 0x03, 0xFC, 0x0F, 0x0E, 0x1C, 0x07, 0x38, 0x03, 0x30, 0x03, 0x30, 0x07, 0x38, 0x0E, 0x1C, 0xFC, 0x0F, 0xF0, 0x03, 0x00, 0x00, // Code for char O - 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xC7, 0x01, 0xFE, 0x00, 0x7C, 0x00, 0x00, 0x00, // Code for char P - 0x0A, 0xF0, 0x03, 0xFC, 0x0F, 0x0E, 0x1C, 0x07, 0x38, 0x03, 0x30, 0x03, 0x36, 0x07, 0x3E, 0x0E, 0x1C, 0xFC, 0x3F, 0xF0, 0x33, 0x00, 0x00, // Code for char Q - 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0x83, 0x01, 0x83, 0x01, 0x83, 0x03, 0x83, 0x07, 0x83, 0x0F, 0xC7, 0x1D, 0xFE, 0x38, 0x7C, 0x30, 0x00, 0x00, // Code for char R - 0x0A, 0x3C, 0x0C, 0x7E, 0x1C, 0xE7, 0x38, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC7, 0x39, 0x8E, 0x1F, 0x0C, 0x0F, 0x00, 0x00, // Code for char S - 0x09, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char T - 0x0A, 0xFF, 0x07, 0xFF, 0x1F, 0x00, 0x38, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x38, 0xFF, 0x1F, 0xFF, 0x07, 0x00, 0x00, // Code for char U - 0x0A, 0x07, 0x00, 0x3F, 0x00, 0xF8, 0x01, 0xC0, 0x0F, 0x00, 0x3E, 0x00, 0x3E, 0xC0, 0x0F, 0xF8, 0x01, 0x3F, 0x00, 0x07, 0x00, 0x00, 0x00, // Code for char V - 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x1C, 0x00, 0x06, 0x80, 0x03, 0x80, 0x03, 0x00, 0x06, 0x00, 0x1C, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, // Code for char W - 0x0A, 0x03, 0x30, 0x0F, 0x3C, 0x1C, 0x0E, 0x30, 0x03, 0xE0, 0x01, 0xE0, 0x01, 0x30, 0x03, 0x1C, 0x0E, 0x0F, 0x3C, 0x03, 0x30, 0x00, 0x00, // Code for char X - 0x0A, 0x03, 0x00, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0xC0, 0x3F, 0xC0, 0x3F, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0x00, 0x00, 0x00, // Code for char Y - 0x0A, 0x03, 0x30, 0x03, 0x3C, 0x03, 0x3E, 0x03, 0x33, 0xC3, 0x31, 0xE3, 0x30, 0x33, 0x30, 0x1F, 0x30, 0x0F, 0x30, 0x03, 0x30, 0x00, 0x00, // Code for char Z - 0x08, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char [ - 0x0B, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x18, // Code for char BackSlash - 0x08, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ] - 0x0B, 0x60, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0x60, 0x00, // Code for char ^ - 0x0B, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, // Code for char _ - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ` - 0x0A, 0x00, 0x1C, 0x40, 0x3E, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0xE0, 0x3F, 0xC0, 0x3F, 0x00, 0x00, // Code for char a - 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0xC0, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0xE0, 0x38, 0xC0, 0x1F, 0x80, 0x0F, 0x00, 0x00, // Code for char b - 0x0A, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x38, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0xC0, 0x18, 0x80, 0x08, 0x00, 0x00, // Code for char c - 0x0A, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x38, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0xE0, 0x30, 0xC0, 0x30, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, // Code for char d - 0x0A, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3B, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0xC0, 0x13, 0x80, 0x01, 0x00, 0x00, // Code for char e - 0x08, 0xC0, 0x00, 0xC0, 0x00, 0xFC, 0x3F, 0xFE, 0x3F, 0xC7, 0x00, 0xC3, 0x00, 0xC3, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char f - 0x0A, 0x80, 0x03, 0xC0, 0xC7, 0xE0, 0xCE, 0x60, 0xCC, 0x60, 0xCC, 0x60, 0xCC, 0x60, 0xCC, 0x60, 0xE6, 0xE0, 0x7F, 0xE0, 0x3F, 0x00, 0x00, // Code for char g - 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xC0, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xC0, 0x3F, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, // Code for char h - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x30, 0xEC, 0x3F, 0xEC, 0x3F, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char i - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xC0, 0x60, 0xC0, 0xEC, 0xFF, 0xEC, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char j - 0x09, 0x00, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0xE0, 0x1C, 0x60, 0x38, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, // Code for char k - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x03, 0x30, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char l - 0x0A, 0xE0, 0x3F, 0xC0, 0x3F, 0xE0, 0x00, 0xE0, 0x00, 0xC0, 0x3F, 0xC0, 0x3F, 0xE0, 0x00, 0xE0, 0x00, 0xC0, 0x3F, 0x80, 0x3F, 0x00, 0x00, // Code for char m - 0x0A, 0x00, 0x00, 0xE0, 0x3F, 0xE0, 0x3F, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xC0, 0x3F, 0x80, 0x3F, 0x00, 0x00, // Code for char n - 0x0A, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x38, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0xE0, 0x38, 0xC0, 0x1F, 0x80, 0x0F, 0x00, 0x00, // Code for char o - 0x0A, 0xE0, 0xFF, 0xE0, 0xFF, 0x60, 0x0C, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0xE0, 0x1C, 0xC0, 0x0F, 0x80, 0x07, 0x00, 0x00, // Code for char p - 0x0A, 0x80, 0x07, 0xC0, 0x0F, 0xE0, 0x1C, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60, 0x0C, 0xE0, 0xFF, 0xE0, 0xFF, 0x00, 0x00, // Code for char q - 0x0A, 0x00, 0x00, 0xE0, 0x3F, 0xE0, 0x3F, 0xC0, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xC0, 0x00, 0x00, 0x00, // Code for char r - 0x08, 0xC0, 0x11, 0xE0, 0x33, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0x60, 0x3F, 0x40, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char s - 0x08, 0x60, 0x00, 0x60, 0x00, 0xFE, 0x1F, 0xFE, 0x3F, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char t - 0x0A, 0xE0, 0x0F, 0xE0, 0x1F, 0x00, 0x38, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x18, 0xE0, 0x3F, 0xE0, 0x3F, 0x00, 0x00, // Code for char u - 0x0A, 0x60, 0x00, 0xE0, 0x01, 0x80, 0x07, 0x00, 0x1E, 0x00, 0x38, 0x00, 0x38, 0x00, 0x1E, 0x80, 0x07, 0xE0, 0x01, 0x60, 0x00, 0x00, 0x00, // Code for char v - 0x0A, 0xE0, 0x07, 0xE0, 0x1F, 0x00, 0x38, 0x00, 0x1C, 0xE0, 0x0F, 0xE0, 0x0F, 0x00, 0x1C, 0x00, 0x38, 0xE0, 0x1F, 0xE0, 0x07, 0x00, 0x00, // Code for char w - 0x09, 0x60, 0x30, 0xE0, 0x38, 0xC0, 0x1D, 0x80, 0x0F, 0x00, 0x07, 0x80, 0x0F, 0xC0, 0x1D, 0xE0, 0x38, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, // Code for char x - 0x09, 0x00, 0x00, 0x60, 0x00, 0xE0, 0x81, 0x80, 0xE7, 0x00, 0x7E, 0x00, 0x1E, 0x80, 0x07, 0xE0, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char y - 0x09, 0x60, 0x30, 0x60, 0x38, 0x60, 0x3C, 0x60, 0x36, 0x60, 0x33, 0xE0, 0x31, 0xE0, 0x30, 0x60, 0x30, 0x20, 0x30, 0x00, 0x00, 0x00, 0x00, // Code for char z - 0x09, 0x00, 0x00, 0x80, 0x00, 0xC0, 0x01, 0xFC, 0x1F, 0x7E, 0x3F, 0x07, 0x70, 0x03, 0x60, 0x03, 0x60, 0x03, 0x60, 0x00, 0x00, 0x00, 0x00, // Code for char { - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char | - 0x09, 0x00, 0x00, 0x03, 0x60, 0x03, 0x60, 0x03, 0x60, 0x07, 0x70, 0x7E, 0x3F, 0xFC, 0x1F, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char } - 0x0A, 0x10, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x10, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x00, 0x00, // Code for char ~ - 0x0A, 0x00, 0x0F, 0x80, 0x0F, 0xC0, 0x0C, 0x60, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x60, 0x0C, 0xC0, 0x0C, 0x80, 0x0F, 0x00, 0x0F, 0x00, 0x00 // Code for char -}; - - -//Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0 -//MikroElektronika 2011 -//http://www.mikroe.com - -//GLCD FontName : Terminal12x16 -//GLCD FontSize : 12 x 16 - -uint8_t Terminal12x16[] = { - 0x0C, 0x10, 0x20, 0x60, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0xFF, 0x33, 0xFF, 0x33, 0xFF, 0x33, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ! - 0x09, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char " - 0x0C, 0x00, 0x02, 0x10, 0x1E, 0x90, 0x1F, 0xF0, 0x1F, 0xFE, 0x03, 0x7E, 0x1E, 0x9E, 0x1F, 0xF0, 0x1F, 0xFE, 0x03, 0x7E, 0x02, 0x1E, 0x00, 0x10, 0x00, // Code for char # - 0x0A, 0x00, 0x00, 0x78, 0x04, 0xFC, 0x0C, 0xFC, 0x0C, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xCC, 0x0F, 0xCC, 0x0F, 0x88, 0x07, 0x00, 0x00, 0x00, 0x00, // Code for char $ - 0x0C, 0x00, 0x30, 0x38, 0x38, 0x38, 0x3C, 0x38, 0x1E, 0x38, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x39, 0xF0, 0x38, 0x78, 0x38, 0x3C, 0x38, 0x1C, 0x00, // Code for char % - 0x0B, 0x00, 0x00, 0x00, 0x1F, 0xB8, 0x3F, 0xFC, 0x3F, 0xFE, 0x31, 0xE6, 0x37, 0xFE, 0x3F, 0x3E, 0x1E, 0x1C, 0x3E, 0x00, 0x36, 0x00, 0x22, 0x00, 0x00, // Code for char & - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ' - 0x09, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x03, 0xFC, 0x0F, 0xFE, 0x1F, 0xFF, 0x3F, 0x07, 0x38, 0x01, 0x20, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ( - 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x20, 0x07, 0x38, 0xFF, 0x3F, 0xFE, 0x1F, 0xFC, 0x0F, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ) - 0x0A, 0x00, 0x00, 0x98, 0x0C, 0xB8, 0x0E, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xB8, 0x0E, 0x98, 0x0C, 0x00, 0x00, 0x00, 0x00, // Code for char * - 0x0A, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char + - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char , - 0x0A, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char - - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char . - 0x0C, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x1E, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0E, 0x00, // Code for char / - 0x0C, 0xF8, 0x07, 0xFE, 0x1F, 0xFE, 0x1F, 0x07, 0x3F, 0x83, 0x33, 0xC3, 0x31, 0xE3, 0x30, 0x73, 0x30, 0x3F, 0x38, 0xFE, 0x1F, 0xFE, 0x1F, 0xF8, 0x07, // Code for char 0 - 0x0B, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x30, 0x0C, 0x30, 0x0E, 0x30, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, // Code for char 1 - 0x0C, 0x1C, 0x30, 0x1E, 0x38, 0x1F, 0x3C, 0x07, 0x3E, 0x03, 0x3F, 0x83, 0x37, 0xC3, 0x33, 0xE3, 0x31, 0xF7, 0x30, 0x7F, 0x30, 0x3E, 0x30, 0x1C, 0x30, // Code for char 2 - 0x0C, 0x0C, 0x0C, 0x0E, 0x1C, 0x0F, 0x3C, 0xC7, 0x38, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xE7, 0x39, 0xFF, 0x3F, 0x7E, 0x1F, 0x3C, 0x0E, // Code for char 3 - 0x0C, 0xC0, 0x03, 0xE0, 0x03, 0xF0, 0x03, 0x78, 0x03, 0x3C, 0x03, 0x1E, 0x03, 0x0F, 0x03, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x03, 0x00, 0x03, // Code for char 4 - 0x0C, 0x3F, 0x0C, 0x7F, 0x1C, 0x7F, 0x3C, 0x63, 0x38, 0x63, 0x30, 0x63, 0x30, 0x63, 0x30, 0x63, 0x30, 0xE3, 0x38, 0xE3, 0x3F, 0xC3, 0x1F, 0x83, 0x0F, // Code for char 5 - 0x0C, 0xC0, 0x0F, 0xF0, 0x1F, 0xF8, 0x3F, 0xFC, 0x39, 0xDE, 0x30, 0xCF, 0x30, 0xC7, 0x30, 0xC3, 0x30, 0xC3, 0x39, 0xC3, 0x3F, 0x80, 0x1F, 0x00, 0x0F, // Code for char 6 - 0x0C, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x30, 0x03, 0x3C, 0x03, 0x3F, 0xC3, 0x0F, 0xF3, 0x03, 0xFF, 0x00, 0x3F, 0x00, 0x0F, 0x00, 0x03, 0x00, // Code for char 7 - 0x0C, 0x00, 0x0F, 0xBC, 0x1F, 0xFE, 0x3F, 0xFF, 0x39, 0xE7, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xE7, 0x30, 0xFF, 0x39, 0xFE, 0x3F, 0xBC, 0x1F, 0x00, 0x0F, // Code for char 8 - 0x0C, 0x3C, 0x00, 0x7E, 0x00, 0xFF, 0x30, 0xE7, 0x30, 0xC3, 0x30, 0xC3, 0x38, 0xC3, 0x3C, 0xC3, 0x1E, 0xE7, 0x0F, 0xFF, 0x07, 0xFE, 0x03, 0xFC, 0x00, // Code for char 9 - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1C, 0x70, 0x1C, 0x70, 0x1C, 0x70, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char : - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x9C, 0x70, 0xFC, 0x70, 0xFC, 0x70, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ; - 0x0A, 0x00, 0x00, 0xC0, 0x00, 0xE0, 0x01, 0xF0, 0x03, 0xF8, 0x07, 0x3C, 0x0F, 0x1E, 0x1E, 0x0F, 0x3C, 0x07, 0x38, 0x03, 0x30, 0x00, 0x00, 0x00, 0x00, // Code for char < - 0x0B, 0x00, 0x00, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x00, 0x00, // Code for char = - 0x0A, 0x00, 0x00, 0x03, 0x30, 0x07, 0x38, 0x0F, 0x3C, 0x1E, 0x1E, 0x3C, 0x0F, 0xF8, 0x07, 0xF0, 0x03, 0xE0, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char > - 0x0B, 0x1C, 0x00, 0x1E, 0x00, 0x1F, 0x00, 0x07, 0x00, 0x83, 0x37, 0xC3, 0x37, 0xE3, 0x37, 0xF7, 0x00, 0x7F, 0x00, 0x3E, 0x00, 0x1C, 0x00, 0x00, 0x00, // Code for char ? - 0x0C, 0xF8, 0x0F, 0xFE, 0x1F, 0xFF, 0x1F, 0xF7, 0x3B, 0xFB, 0x37, 0xFB, 0x37, 0xFB, 0x37, 0xFB, 0x37, 0xFF, 0x37, 0xFF, 0x37, 0xFE, 0x03, 0xF8, 0x01, // Code for char @ - 0x0B, 0x00, 0x38, 0x00, 0x3F, 0xE0, 0x3F, 0xFC, 0x07, 0xFF, 0x06, 0x1F, 0x06, 0xFF, 0x06, 0xFC, 0x07, 0xE0, 0x3F, 0x00, 0x3F, 0x00, 0x38, 0x00, 0x00, // Code for char A - 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xE7, 0x30, 0xFF, 0x39, 0xFE, 0x3F, 0xBC, 0x1F, 0x00, 0x0F, 0x00, 0x00, // Code for char B - 0x0B, 0xF0, 0x03, 0xFC, 0x0F, 0xFE, 0x1F, 0x0F, 0x3C, 0x07, 0x38, 0x03, 0x30, 0x03, 0x30, 0x07, 0x38, 0x0F, 0x3C, 0x0E, 0x1C, 0x0C, 0x0C, 0x00, 0x00, // Code for char C - 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x07, 0x38, 0x0F, 0x3C, 0xFE, 0x1F, 0xFC, 0x0F, 0xF0, 0x03, 0x00, 0x00, // Code for char D - 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0x03, 0x30, 0x03, 0x30, 0x00, 0x00, // Code for char E - 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, // Code for char F - 0x0B, 0xF0, 0x03, 0xFC, 0x0F, 0xFE, 0x1F, 0x0F, 0x3C, 0x07, 0x38, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC7, 0x3F, 0xC7, 0x3F, 0xC6, 0x3F, 0x00, 0x00, // Code for char G - 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, // Code for char H - 0x09, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x03, 0x30, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x03, 0x30, 0x03, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char I - 0x0B, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x3E, 0x00, 0x38, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x38, 0xFF, 0x3F, 0xFF, 0x1F, 0xFF, 0x07, 0x00, 0x00, // Code for char J - 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xE0, 0x01, 0xF0, 0x03, 0xF8, 0x07, 0x3C, 0x0F, 0x1E, 0x1E, 0x0F, 0x3C, 0x07, 0x38, 0x03, 0x30, 0x00, 0x00, // Code for char K - 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, // Code for char L - 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x7E, 0x00, 0xF8, 0x01, 0xE0, 0x01, 0xF8, 0x01, 0x7E, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, // Code for char M - 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x3E, 0x00, 0xF8, 0x00, 0xF0, 0x03, 0xC0, 0x07, 0x00, 0x1F, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, // Code for char N - 0x0B, 0xF0, 0x03, 0xFC, 0x0F, 0xFE, 0x1F, 0x0F, 0x3C, 0x07, 0x38, 0x03, 0x30, 0x07, 0x38, 0x0F, 0x3C, 0xFE, 0x1F, 0xFC, 0x0F, 0xF0, 0x03, 0x00, 0x00, // Code for char O - 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0xC7, 0x01, 0xFF, 0x01, 0xFE, 0x00, 0x7C, 0x00, 0x00, 0x00, // Code for char P - 0x0B, 0xF0, 0x03, 0xFC, 0x0F, 0xFE, 0x1F, 0x0F, 0x3C, 0x07, 0x38, 0x03, 0x36, 0x07, 0x3E, 0x0F, 0x3E, 0xFE, 0x3F, 0xFC, 0x3F, 0xF0, 0x33, 0x00, 0x00, // Code for char Q - 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x83, 0x01, 0x83, 0x03, 0x83, 0x07, 0x83, 0x0F, 0xC7, 0x1F, 0xFF, 0x3D, 0xFE, 0x38, 0x7C, 0x30, 0x00, 0x00, // Code for char R - 0x0B, 0x3C, 0x0C, 0x7E, 0x1C, 0xFF, 0x3C, 0xE7, 0x38, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC7, 0x39, 0xCF, 0x3F, 0x8E, 0x1F, 0x0C, 0x0F, 0x00, 0x00, // Code for char S - 0x0A, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char T - 0x0B, 0xFF, 0x07, 0xFF, 0x1F, 0xFF, 0x3F, 0x00, 0x38, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x38, 0xFF, 0x3F, 0xFF, 0x1F, 0xFF, 0x07, 0x00, 0x00, // Code for char U - 0x0B, 0x07, 0x00, 0x3F, 0x00, 0xFF, 0x01, 0xF8, 0x0F, 0xC0, 0x3F, 0x00, 0x3E, 0xC0, 0x3F, 0xF8, 0x0F, 0xFF, 0x01, 0x3F, 0x00, 0x07, 0x00, 0x00, 0x00, // Code for char V - 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x1E, 0x80, 0x07, 0x80, 0x03, 0x80, 0x07, 0x00, 0x1E, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, // Code for char W - 0x0B, 0x03, 0x30, 0x0F, 0x3C, 0x1F, 0x3E, 0x3C, 0x0F, 0xF0, 0x03, 0xE0, 0x01, 0xF0, 0x03, 0x3C, 0x0F, 0x1F, 0x3E, 0x0F, 0x3C, 0x03, 0x30, 0x00, 0x00, // Code for char X - 0x0B, 0x03, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0xF0, 0x3F, 0xC0, 0x3F, 0xF0, 0x3F, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0x00, 0x03, 0x00, 0x00, 0x00, // Code for char Y - 0x0B, 0x03, 0x30, 0x03, 0x3C, 0x03, 0x3E, 0x03, 0x3F, 0xC3, 0x33, 0xE3, 0x31, 0xF3, 0x30, 0x3F, 0x30, 0x1F, 0x30, 0x0F, 0x30, 0x03, 0x30, 0x00, 0x00, // Code for char Z - 0x09, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char [ - 0x0C, 0x0E, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x18, // Code for char BackSlash - 0x09, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ] - 0x0C, 0x60, 0x00, 0x70, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0x70, 0x00, 0x60, 0x00, // Code for char ^ - 0x0C, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, // Code for char _ - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ` - 0x0B, 0x00, 0x1C, 0x40, 0x3E, 0x60, 0x3F, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0xE0, 0x3F, 0xE0, 0x3F, 0xC0, 0x3F, 0x00, 0x00, // Code for char a - 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xE0, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0xE0, 0x38, 0xE0, 0x3F, 0xC0, 0x1F, 0x80, 0x0F, 0x00, 0x00, // Code for char b - 0x0B, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x38, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0xE0, 0x38, 0xC0, 0x18, 0x80, 0x08, 0x00, 0x00, // Code for char c - 0x0B, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x38, 0x60, 0x30, 0x60, 0x30, 0xE0, 0x30, 0xE0, 0x30, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, // Code for char d - 0x0B, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x3B, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0xE0, 0x33, 0xC0, 0x13, 0x80, 0x01, 0x00, 0x00, // Code for char e - 0x09, 0xC0, 0x00, 0xC0, 0x00, 0xFC, 0x3F, 0xFE, 0x3F, 0xFF, 0x3F, 0xC7, 0x00, 0xC3, 0x00, 0xC3, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char f - 0x0B, 0x80, 0x03, 0xC0, 0xC7, 0xE0, 0xCF, 0xE0, 0xCE, 0x60, 0xCC, 0x60, 0xCC, 0x60, 0xCC, 0x60, 0xEE, 0xE0, 0xFF, 0xE0, 0x7F, 0xE0, 0x3F, 0x00, 0x00, // Code for char g - 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xE0, 0x00, 0x60, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xE0, 0x3F, 0xC0, 0x3F, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, // Code for char h - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x30, 0xEC, 0x3F, 0xEC, 0x3F, 0xEC, 0x3F, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char i - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xE0, 0x60, 0xC0, 0xEC, 0xFF, 0xEC, 0xFF, 0xEC, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char j - 0x0A, 0x00, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x80, 0x07, 0xC0, 0x0F, 0xE0, 0x1F, 0xE0, 0x3C, 0x60, 0x38, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, // Code for char k - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x03, 0x30, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char l - 0x0B, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x00, 0xE0, 0x3F, 0xC0, 0x3F, 0xE0, 0x3F, 0xE0, 0x00, 0xE0, 0x3F, 0xC0, 0x3F, 0x80, 0x3F, 0x00, 0x00, // Code for char m - 0x0B, 0x00, 0x00, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x3F, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xE0, 0x3F, 0xC0, 0x3F, 0x80, 0x3F, 0x00, 0x00, // Code for char n - 0x0B, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x38, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0xE0, 0x38, 0xE0, 0x3F, 0xC0, 0x1F, 0x80, 0x0F, 0x00, 0x00, // Code for char o - 0x0B, 0xE0, 0xFF, 0xE0, 0xFF, 0xE0, 0xFF, 0x60, 0x1C, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0xE0, 0x1C, 0xE0, 0x1F, 0xC0, 0x0F, 0x80, 0x07, 0x00, 0x00, // Code for char p - 0x0B, 0x80, 0x07, 0xC0, 0x0F, 0xE0, 0x1F, 0xE0, 0x1C, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60, 0x1C, 0xE0, 0xFF, 0xE0, 0xFF, 0xE0, 0xFF, 0x00, 0x00, // Code for char q - 0x0B, 0x00, 0x00, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xC0, 0x00, 0x00, 0x00, // Code for char r - 0x09, 0xC0, 0x11, 0xE0, 0x33, 0xE0, 0x33, 0x60, 0x33, 0x60, 0x33, 0x60, 0x33, 0x60, 0x3F, 0x60, 0x3F, 0x40, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char s - 0x09, 0x60, 0x00, 0x60, 0x00, 0xFE, 0x1F, 0xFE, 0x3F, 0xFE, 0x3F, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char t - 0x0B, 0xE0, 0x0F, 0xE0, 0x1F, 0xE0, 0x3F, 0x00, 0x38, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x38, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x3F, 0x00, 0x00, // Code for char u - 0x0B, 0x60, 0x00, 0xE0, 0x01, 0xE0, 0x07, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x38, 0x00, 0x3E, 0x80, 0x1F, 0xE0, 0x07, 0xE0, 0x01, 0x60, 0x00, 0x00, 0x00, // Code for char v - 0x0B, 0xE0, 0x07, 0xE0, 0x1F, 0xE0, 0x3F, 0x00, 0x3C, 0xE0, 0x1F, 0xE0, 0x0F, 0xE0, 0x1F, 0x00, 0x3C, 0xE0, 0x3F, 0xE0, 0x1F, 0xE0, 0x07, 0x00, 0x00, // Code for char w - 0x0A, 0x60, 0x30, 0xE0, 0x38, 0xE0, 0x3D, 0xC0, 0x1F, 0x80, 0x0F, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3D, 0xE0, 0x38, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, // Code for char x - 0x0A, 0x00, 0x00, 0x60, 0x00, 0xE0, 0x81, 0xE0, 0xE7, 0x80, 0xFF, 0x00, 0x7E, 0x80, 0x1F, 0xE0, 0x07, 0xE0, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char y - 0x0A, 0x60, 0x30, 0x60, 0x38, 0x60, 0x3C, 0x60, 0x3E, 0x60, 0x37, 0xE0, 0x33, 0xE0, 0x31, 0xE0, 0x30, 0x60, 0x30, 0x20, 0x30, 0x00, 0x00, 0x00, 0x00, // Code for char z - 0x0A, 0x00, 0x00, 0x80, 0x00, 0xC0, 0x01, 0xFC, 0x1F, 0xFE, 0x3F, 0x7F, 0x7F, 0x07, 0x70, 0x03, 0x60, 0x03, 0x60, 0x03, 0x60, 0x00, 0x00, 0x00, 0x00, // Code for char { - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char | - 0x0A, 0x00, 0x00, 0x03, 0x60, 0x03, 0x60, 0x03, 0x60, 0x07, 0x70, 0x7F, 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char } - 0x0B, 0x10, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x18, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x00, 0x00, // Code for char ~ - 0x0B, 0x00, 0x0F, 0x80, 0x0F, 0xC0, 0x0F, 0xE0, 0x0C, 0x70, 0x0C, 0x30, 0x0C, 0x70, 0x0C, 0xE0, 0x0C, 0xC0, 0x0F, 0x80, 0x0F, 0x00, 0x0F, 0x00, 0x00 // Code for char -}; - - -//Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0 -//MikroElektronika 2011 -//http://www.mikroe.com - -//GLCD FontName : Trebuchet_MS16x21 -//GLCD FontSize : 16 x 21 - -uint8_t Trebuchet_MS16x21[] = { - 0x10, 0x15, 0x2E, 0x0D, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char . - 0x0C, 0x00, 0x00, 0x10, 0x00, 0x00, 0x1E, 0x00, 0xC0, 0x1F, 0x00, 0xF0, 0x1F, 0x00, 0xFE, 0x0F, 0x80, 0xFF, 0x03, 0xF0, 0x7F, 0x00, 0xFE, 0x0F, 0x00, 0xFF, 0x03, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char / - 0x10, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0xF0, 0xFF, 0x03, 0xFC, 0xFF, 0x07, 0xFE, 0xFF, 0x0F, 0x3E, 0x80, 0x0F, 0x0F, 0x00, 0x1E, 0x07, 0x00, 0x1C, 0x07, 0x00, 0x1C, 0x07, 0x00, 0x1C, 0x0F, 0x00, 0x1E, 0x1F, 0x80, 0x0F, 0xFE, 0xFF, 0x0F, 0xFC, 0xFF, 0x07, 0xF8, 0xFF, 0x01, 0xC0, 0x7F, 0x00, // Code for char 0 - 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xFE, 0xFF, 0x1F, 0xFE, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 1 - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x18, 0x1E, 0x00, 0x1C, 0x0E, 0x00, 0x1F, 0x0F, 0x80, 0x1F, 0x07, 0xC0, 0x1F, 0x07, 0xF0, 0x1F, 0x07, 0xF8, 0x1D, 0x07, 0xFE, 0x1C, 0x0F, 0x3F, 0x1C, 0xFE, 0x1F, 0x1C, 0xFE, 0x0F, 0x1C, 0xFC, 0x03, 0x1C, 0xF8, 0x00, 0x1C, 0x00, 0x00, 0x1C, // Code for char 2 - 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x0E, 0x0E, 0x00, 0x0F, 0x0F, 0x00, 0x1E, 0x07, 0x00, 0x1C, 0x07, 0x07, 0x1C, 0x07, 0x07, 0x1C, 0x07, 0x07, 0x1C, 0x8F, 0x0F, 0x1E, 0xFF, 0x1F, 0x1E, 0xFE, 0xFD, 0x0F, 0xFC, 0xFD, 0x0F, 0x78, 0xF8, 0x07, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x00, // Code for char 3 - 0x10, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xEF, 0x00, 0x80, 0xE7, 0x00, 0xC0, 0xE3, 0x00, 0xF0, 0xE0, 0x00, 0x78, 0xE0, 0x00, 0xFC, 0xFF, 0x1F, 0xFE, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, // Code for char 4 - 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xFF, 0x03, 0x0F, 0xFF, 0x07, 0x0E, 0xFF, 0x03, 0x1C, 0xFF, 0x01, 0x1C, 0xC7, 0x01, 0x1C, 0xC7, 0x01, 0x1C, 0xC7, 0x01, 0x1E, 0xC7, 0x03, 0x1F, 0xC7, 0xFF, 0x0F, 0x87, 0xFF, 0x0F, 0x07, 0xFF, 0x07, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, // Code for char 5 - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x80, 0xFF, 0x03, 0xE0, 0xFF, 0x07, 0xF0, 0xFF, 0x0F, 0xF8, 0x0F, 0x1E, 0x7C, 0x07, 0x1C, 0x3E, 0x07, 0x1C, 0x1E, 0x07, 0x1C, 0x0F, 0x07, 0x1C, 0x07, 0x0F, 0x1E, 0x02, 0xFE, 0x0F, 0x00, 0xFE, 0x0F, 0x00, 0xFC, 0x07, 0x00, 0xF0, 0x01, // Code for char 6 - 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x18, 0x07, 0x00, 0x1E, 0x07, 0xC0, 0x1F, 0x07, 0xF0, 0x1F, 0x07, 0xFC, 0x0F, 0x07, 0xFF, 0x01, 0xC7, 0x7F, 0x00, 0xF7, 0x0F, 0x00, 0xFF, 0x03, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x03, 0x00, 0x00, // Code for char 7 - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x78, 0xF8, 0x07, 0xFC, 0xFD, 0x0F, 0xFE, 0xFF, 0x0F, 0xFF, 0x1F, 0x1E, 0x8F, 0x0F, 0x1C, 0x07, 0x07, 0x1C, 0x07, 0x0F, 0x1C, 0x8F, 0x0F, 0x1C, 0xFF, 0x3F, 0x1E, 0xFE, 0xFD, 0x0F, 0xFE, 0xFD, 0x0F, 0x78, 0xF0, 0x07, 0x00, 0xE0, 0x03, // Code for char 8 - 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0xFC, 0x07, 0x00, 0xFE, 0x0F, 0x00, 0xFE, 0x0F, 0x08, 0x0F, 0x1E, 0x1C, 0x07, 0x1C, 0x1E, 0x07, 0x1C, 0x0F, 0x07, 0x9C, 0x0F, 0x07, 0xDC, 0x07, 0x0F, 0xFE, 0x03, 0xFE, 0xFF, 0x01, 0xFC, 0xFF, 0x00, 0xF8, 0x3F, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, // Code for char 9 - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x0C, 0xC0, 0x03, 0x1E, 0xC0, 0x03, 0x1E, 0x80, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Code for char : -}; -
diff -r cc93245bb6d0 -r 251e4d020501 EN_FA_font.h --- a/EN_FA_font.h Tue Sep 01 12:16:09 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,219 +0,0 @@ -//------------------------------------------------------------------------------------------------ -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -//------------------------------------------------------------------------------------------------ -/* -....::::: In The Name Of GOD :::::.... - - -**************** ****************** - -Ported to ILI9225 by Arman Safikhani 31-08-2015 - -**************** ****************** - - - -TFT LCD (ILI9325-ILI9320 LCD Driver) Functions (ECA 2.8 inch LCD Module) -Version : 1.0 -By Ali Imanifar 11/06/2013 - -ECA Corporation........www.ECA.ir -ECA Eshop..............www.Eshop.ECA.ir -ECA Forum..............www.ECA.ir/Forum2 -ECA Video Center.......www.TV.ECA.ir -ECA Blog...............www.Blog.ECA.ir - -Important Note : -DO NOT Change LCD Register Definitions And LCD Command Codes -*/ -//------------------------------------------------------------------------------------------------ -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -//------------------------------------------------------------------------------------------------ - -const unsigned int font12x16_FA[183][16] = -{ - 0x6000,0x6000,0x6000,0x6004,0x6004,0x6004,0x6004,0x6004,0x6004,0x6004,0x6003,0x6000,0x6000,0x6000,0x6000,0x6000, //00 - 0x5001,0x5006,0x5008,0x5001,0x5006,0x5008,0x500C,0x5002,0x5001,0x5001,0x501E,0x5000,0x5000,0x5000,0x5000,0x5000, //01-FA - 0x6001,0x600E,0x6010,0x6004,0x6004,0x6004,0x6004,0x6004,0x6004,0x6004,0x6003,0x6000,0x6000,0x6000,0x6000,0x6000, //02 - 0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4002,0x4001,0x4001,0x400E,0x4000,0x4005,0x4000,0x4002,0x4000, //03-FD - 0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4002,0x4001,0x4001,0x400E,0x4000,0x4000,0x4002,0x4000,0x4000, //04 - 0x4000,0x4000,0x4000,0x4000,0x4005,0x4000,0x4000,0x4002,0x4001,0x4001,0x400E,0x4000,0x4000,0x4000,0x4000,0x4000, //05 - 0x4000,0x4000,0x4002,0x4000,0x4005,0x4000,0x4000,0x4002,0x4001,0x4001,0x400E,0x4000,0x4000,0x4000,0x4000,0x4000, //06 - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8018,0x8024,0x8002,0x80FF,0x8000,0x8000,0x8008,0x8000,0x8000, //07 - 0x9000,0x9000,0x9000,0x9000,0x9000,0x9000,0x9070,0x908F,0x9034,0x9042,0x9081,0x9088,0x9080,0x9041,0x903E,0x9000, //08 - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8018,0x8024,0x8002,0x80FF,0x8000,0x8000,0x8000,0x8000,0x8000, //09 - 0x9000,0x9000,0x9000,0x9000,0x9000,0x9000,0x9070,0x908F,0x9034,0x9042,0x9081,0x9080,0x9080,0x9041,0x903E,0x9000, //0A - 0x8000,0x8000,0x8000,0x8000,0x8010,0x8000,0x8000,0x8018,0x8024,0x8002,0x80FF,0x8000,0x8000,0x8000,0x8000,0x8000, //0B - 0x9000,0x9000,0x9000,0x9020,0x9000,0x9000,0x9070,0x908F,0x9034,0x9042,0x9081,0x9080,0x9080,0x9041,0x903E,0x9000, //0C - 0x9000,0x9000,0x9000,0x9000,0x9010,0x9008,0x9014,0x9046,0x9049,0x9019,0x91F6,0x9000,0x9000,0x9000,0x9000,0x9000, //0D-FE - 0x9000,0x9000,0x9000,0x9008,0x9000,0x9014,0x9000,0x9000,0x9049,0x9049,0x91B6,0x9000,0x9000,0x9000,0x9000,0x9000, //0E - 0xB000,0xB000,0xB000,0xB000,0xB000,0xB000,0xB000,0xB00E,0xB111,0xB121,0xB6FE,0xB000,0xB000,0xB000,0xB000,0xB000, //0F - 0x4000,0x3000,0x3000,0x3000,0x3000,0x3000,0x3000,0x3002,0x3007,0x3002,0x3000,0x3000,0x3000,0x3000,0x3000,0x3000, //10 - 0x3000,0x2000,0x2000,0x2000,0x2002,0x2002,0x2001,0x2001,0x2001,0x2001,0x2001,0x2001,0x2001,0x2000,0x2000,0x2000, //11 - 0x6000,0x5000,0x5000,0x5000,0x5011,0x5019,0x500E,0x5008,0x5004,0x5004,0x5004,0x5004,0x5004,0x5000,0x5000,0x5000, //12 - 0x7000,0x6000,0x6000,0x6000,0x6025,0x6035,0x601A,0x6010,0x6008,0x6008,0x6008,0x6008,0x6008,0x6000,0x6000,0x6000, //13 - 0x8000,0x7000,0x7000,0x7000,0x7026,0x7078,0x7039,0x7036,0x7010,0x7010,0x7010,0x7010,0x7010,0x7000,0x7000,0x7000, //14 - 0x8000,0x7000,0x7000,0x7000,0x7010,0x7008,0x7014,0x7022,0x7022,0x7041,0x7049,0x7049,0x7036,0x7000,0x7000,0x7000, //15 - 0x7000,0x6000,0x6000,0x6000,0x600C,0x6010,0x6020,0x6021,0x601E,0x6004,0x6008,0x6010,0x6020,0x6000,0x6000,0x6000, //16 - 0x8000,0x7000,0x7000,0x7000,0x7041,0x7041,0x7022,0x7022,0x7014,0x7014,0x7008,0x7008,0x7008,0x7000,0x7000,0x7000, //17 - 0x8000,0x7000,0x7000,0x7000,0x7008,0x7008,0x7008,0x7014,0x7014,0x7022,0x7022,0x7041,0x7041,0x7000,0x7000,0x7000, //18 - 0x6000,0x5000,0x5000,0x5000,0x500C,0x5012,0x5012,0x500E,0x5002,0x5002,0x5002,0x5001,0x5001,0x5000,0x5000,0x5000, //19 - 0xB000,0xB000,0xB000,0xB000,0xB010,0xB000,0xB000,0xB00E,0xB111,0xB121,0xB6FE,0xB000,0xB000,0xB000,0xB000,0xB000, //1A - 0x6000,0x6000,0x6000,0x6000,0x6000,0x6000,0x600C,0x6012,0x6010,0x6009,0x603E,0x6000,0x6000,0x6000,0x6000,0x6000, //1B - 0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4003,0x4003,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000, //1C - 0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4001,0x4002,0x4003,0x4003,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000, //1D - 0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4003,0x4003,0x4001,0x4002,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000, //1E - 0x4000,0x4000,0x4000,0x4000,0x4001,0x4002,0x4003,0x4003,0x4000,0x4000,0x4003,0x4003,0x4000,0x4000,0x4000,0x4000, //1F - 0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000, //20 space - 0x8000,0x8000,0x8018,0x803C,0x803C,0x803C,0x8018,0x8018,0x8018,0x8000,0x8018,0x8018,0x8000,0x8000,0x8000,0x8000, // ! - 0x8000,0x8063,0x8063,0x8063,0x8022,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000, // " - 0x8000,0x8000,0x8000,0x8036,0x8036,0x807F,0x8036,0x8036,0x8036,0x807F,0x8036,0x8036,0x8000,0x8000,0x8000,0x8000, // # - 0x800C,0x800C,0x803E,0x8063,0x8061,0x8060,0x803E,0x8003,0x8003,0x8043,0x8063,0x803E,0x800C,0x800C,0x8000,0x8000, // $ - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8061,0x8063,0x8006,0x800C,0x8018,0x8033,0x8063,0x8000,0x8000,0x8000,0x8000, // % - 0x8000,0x8000,0x8000,0x801C,0x8036,0x8036,0x801C,0x803B,0x806E,0x8066,0x8066,0x803B,0x8000,0x8000,0x8000,0x8000, // & - 0x8000,0x8030,0x8030,0x8030,0x8060,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000, // ' - 0x8000,0x8000,0x800C,0x8018,0x8018,0x8030,0x8030,0x8030,0x8030,0x8018,0x8018,0x800C,0x8000,0x8000,0x8000,0x8000, // ( - 0x8000,0x8000,0x8018,0x800C,0x800C,0x8006,0x8006,0x8006,0x8006,0x800C,0x800C,0x8018,0x8000,0x8000,0x8000,0x8000, // ) - 0x8000,0x8000,0x8000,0x8000,0x8042,0x8066,0x803C,0x80FF,0x803C,0x8066,0x8042,0x8000,0x8000,0x8000,0x8000,0x8000, // * - 0x8000,0x8000,0x8000,0x8000,0x8018,0x8018,0x8018,0x80FF,0x8018,0x8018,0x8018,0x8000,0x8000,0x8000,0x8000,0x8000, // + - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8018,0x8018,0x8018,0x8030,0x8000,0x8000, // , - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x80FF,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000, // - - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8018,0x8018,0x8000,0x8000,0x8000,0x8000, // . - 0x8000,0x8000,0x8001,0x8003,0x8007,0x800E,0x801C,0x8038,0x8070,0x80E0,0x80C0,0x8080,0x8000,0x8000,0x8000,0x8000, // / (forward slash) - 0x8000,0x8000,0x803E,0x8063,0x8063,0x8063,0x806B,0x806B,0x8063,0x8063,0x8063,0x803E,0x8000,0x8000,0x8000,0x8000, // 0 0x30 - 0x8000,0x8000,0x800C,0x801C,0x803C,0x800C,0x800C,0x800C,0x800C,0x800C,0x800C,0x803F,0x8000,0x8000,0x8000,0x8000, // 1 - 0x8000,0x8000,0x803E,0x8063,0x8003,0x8006,0x800C,0x8018,0x8030,0x8061,0x8063,0x807F,0x8000,0x8000,0x8000,0x8000, // 2 - 0x8000,0x8000,0x803E,0x8063,0x8003,0x8003,0x801E,0x8003,0x8003,0x8003,0x8063,0x803E,0x8000,0x8000,0x8000,0x8000, // 3 - 0x8000,0x8000,0x8006,0x800E,0x801E,0x8036,0x8066,0x8066,0x807F,0x8006,0x8006,0x800F,0x8000,0x8000,0x8000,0x8000, // 4 - 0x8000,0x8000,0x807F,0x8060,0x8060,0x8060,0x807E,0x8003,0x8003,0x8063,0x8073,0x803E,0x8000,0x8000,0x8000,0x8000, // 5 - 0x8000,0x8000,0x801C,0x8030,0x8060,0x8060,0x807E,0x8063,0x8063,0x8063,0x8063,0x803E,0x8000,0x8000,0x8000,0x8000, // 6 - 0x8000,0x8000,0x807F,0x8063,0x8003,0x8006,0x8006,0x800C,0x800C,0x8018,0x8018,0x8018,0x8000,0x8000,0x8000,0x8000, // 7 - 0x8000,0x8000,0x803E,0x8063,0x8063,0x8063,0x803E,0x8063,0x8063,0x8063,0x8063,0x803E,0x8000,0x8000,0x8000,0x8000, // 8 - 0x8000,0x8000,0x803E,0x8063,0x8063,0x8063,0x8063,0x803F,0x8003,0x8003,0x8006,0x803C,0x8000,0x8000,0x8000,0x8000, // 9 - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8018,0x8018,0x8000,0x8000,0x8000,0x8018,0x8018,0x8000,0x8000,0x8000,0x8000, // : - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8018,0x8018,0x8000,0x8000,0x8000,0x8018,0x8018,0x8018,0x8030,0x8000,0x8000, // ; - 0x8000,0x8000,0x8000,0x8006,0x800C,0x8018,0x8030,0x8060,0x8030,0x8018,0x800C,0x8006,0x8000,0x8000,0x8000,0x8000, // < - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x807E,0x8000,0x8000,0x807E,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000, // = - 0x8000,0x8000,0x8000,0x8060,0x8030,0x8018,0x800C,0x8006,0x800C,0x8018,0x8030,0x8060,0x8000,0x8000,0x8000,0x8000, // > - 0x8000,0x8000,0x803E,0x8063,0x8063,0x8006,0x800C,0x800C,0x800C,0x8000,0x800C,0x800C,0x8000,0x8000,0x8000,0x8000, // ? - 0x8000,0x8000,0x803E,0x8063,0x8063,0x806F,0x806B,0x806B,0x806E,0x8060,0x8060,0x803E,0x8000,0x8000,0x8000,0x8000, // @ 0x40 - 0x8000,0x8000,0x8008,0x801C,0x8036,0x8063,0x8063,0x8063,0x807F,0x8063,0x8063,0x8063,0x8000,0x8000,0x8000,0x8000, // A - 0x8000,0x8000,0x807E,0x8033,0x8033,0x8033,0x803E,0x8033,0x8033,0x8033,0x8033,0x807E,0x8000,0x8000,0x8000,0x8000, // B - 0x8000,0x8000,0x801E,0x8033,0x8061,0x8060,0x8060,0x8060,0x8060,0x8061,0x8033,0x801E,0x8000,0x8000,0x8000,0x8000, // C - 0x8000,0x8000,0x807C,0x8036,0x8033,0x8033,0x8033,0x8033,0x8033,0x8033,0x8036,0x807C,0x8000,0x8000,0x8000,0x8000, // D - 0x8000,0x8000,0x807F,0x8033,0x8031,0x8034,0x803C,0x8034,0x8030,0x8031,0x8033,0x807F,0x8000,0x8000,0x8000,0x8000, // E - 0x8000,0x8000,0x807F,0x8033,0x8031,0x8034,0x803C,0x8034,0x8030,0x8030,0x8030,0x8078,0x8000,0x8000,0x8000,0x8000, // F - 0x8000,0x8000,0x801E,0x8033,0x8061,0x8060,0x8060,0x806F,0x8063,0x8063,0x8037,0x801D,0x8000,0x8000,0x8000,0x8000, // G - 0x8000,0x8000,0x8063,0x8063,0x8063,0x8063,0x807F,0x8063,0x8063,0x8063,0x8063,0x8063,0x8000,0x8000,0x8000,0x8000, // H - 0x8000,0x8000,0x803C,0x8018,0x8018,0x8018,0x8018,0x8018,0x8018,0x8018,0x8018,0x803C,0x8000,0x8000,0x8000,0x8000, // I - 0x8000,0x8000,0x800F,0x8006,0x8006,0x8006,0x8006,0x8006,0x8006,0x8066,0x8066,0x803C,0x8000,0x8000,0x8000,0x8000, // J - 0x8000,0x8000,0x8073,0x8033,0x8036,0x8036,0x803C,0x8036,0x8036,0x8033,0x8033,0x8073,0x8000,0x8000,0x8000,0x8000, // K - 0x8000,0x8000,0x8078,0x8030,0x8030,0x8030,0x8030,0x8030,0x8030,0x8031,0x8033,0x807F,0x8000,0x8000,0x8000,0x8000, // L - 0x8000,0x8000,0x8063,0x8077,0x807F,0x806B,0x8063,0x8063,0x8063,0x8063,0x8063,0x8063,0x8000,0x8000,0x8000,0x8000, // M - 0x8000,0x8000,0x8063,0x8063,0x8073,0x807B,0x807F,0x806F,0x8067,0x8063,0x8063,0x8063,0x8000,0x8000,0x8000,0x8000, // N - 0x8000,0x8000,0x801C,0x8036,0x8063,0x8063,0x8063,0x8063,0x8063,0x8063,0x8036,0x801C,0x8000,0x8000,0x8000,0x8000, // O - 0x8000,0x8000,0x807E,0x8033,0x8033,0x8033,0x803E,0x8030,0x8030,0x8030,0x8030,0x8078,0x8000,0x8000,0x8000,0x8000, // P 0x50 - 0x8000,0x8000,0x803E,0x8063,0x8063,0x8063,0x8063,0x8063,0x8063,0x806B,0x806F,0x803E,0x8006,0x8007,0x8000,0x8000, // Q - 0x8000,0x8000,0x807E,0x8033,0x8033,0x8033,0x803E,0x8036,0x8036,0x8033,0x8033,0x8073,0x8000,0x8000,0x8000,0x8000, // R - 0x8000,0x8000,0x803E,0x8063,0x8063,0x8030,0x801C,0x8006,0x8003,0x8063,0x8063,0x803E,0x8000,0x8000,0x8000,0x8000, // S - 0x8000,0x8000,0x80FF,0x80DB,0x8099,0x8018,0x8018,0x8018,0x8018,0x8018,0x8018,0x803C,0x8000,0x8000,0x8000,0x8000, // T - 0x8000,0x8000,0x8063,0x8063,0x8063,0x8063,0x8063,0x8063,0x8063,0x8063,0x8063,0x803E,0x8000,0x8000,0x8000,0x8000, // U - 0x8000,0x8000,0x8063,0x8063,0x8063,0x8063,0x8063,0x8063,0x8063,0x8036,0x801C,0x8008,0x8000,0x8000,0x8000,0x8000, // V - 0x8000,0x8000,0x8063,0x8063,0x8063,0x8063,0x8063,0x806B,0x806B,0x807F,0x8036,0x8036,0x8000,0x8000,0x8000,0x8000, // W - 0x8000,0x8000,0x80C3,0x80C3,0x8066,0x803C,0x8018,0x8018,0x803C,0x8066,0x80C3,0x80C3,0x8000,0x8000,0x8000,0x8000, // X - 0x8000,0x8000,0x80C3,0x80C3,0x80C3,0x8066,0x803C,0x8018,0x8018,0x8018,0x8018,0x803C,0x8000,0x8000,0x8000,0x8000, // Y - 0x8000,0x8000,0x807F,0x8063,0x8043,0x8006,0x800C,0x8018,0x8030,0x8061,0x8063,0x807F,0x8000,0x8000,0x8000,0x8000, // Z - 0x8000,0x8000,0x803C,0x8030,0x8030,0x8030,0x8030,0x8030,0x8030,0x8030,0x8030,0x803C,0x8000,0x8000,0x8000,0x8000, // [ - 0x8000,0x8000,0x8080,0x80C0,0x80E0,0x8070,0x8038,0x801C,0x800E,0x8007,0x8003,0x8001,0x8000,0x8000,0x8000,0x8000, // \ (back slash) - 0x8000,0x8000,0x803C,0x800C,0x800C,0x800C,0x800C,0x800C,0x800C,0x800C,0x800C,0x803C,0x8000,0x8000,0x8000,0x8000, // ] - 0x8008,0x801C,0x8036,0x8063,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000, // ^ - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x80FF,0x8000,0x8000,0x8000, // _ - 0x8018,0x8018,0x800C,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000, // ` 0x60 - 0x8000,0x8000,0x8000,0x8000,0x8000,0x803C,0x8046,0x8006,0x803E,0x8066,0x8066,0x803B,0x8000,0x8000,0x8000,0x8000, // a - 0x8000,0x8000,0x8070,0x8030,0x8030,0x803C,0x8036,0x8033,0x8033,0x8033,0x8033,0x806E,0x8000,0x8000,0x8000,0x8000, // b - 0x8000,0x8000,0x8000,0x8000,0x8000,0x803E,0x8063,0x8060,0x8060,0x8060,0x8063,0x803E,0x8000,0x8000,0x8000,0x8000, // c - 0x8000,0x8000,0x800E,0x8006,0x8006,0x801E,0x8036,0x8066,0x8066,0x8066,0x8066,0x803B,0x8000,0x8000,0x8000,0x8000, // d - 0x8000,0x8000,0x8000,0x8000,0x8000,0x803E,0x8063,0x8063,0x807E,0x8060,0x8063,0x803E,0x8000,0x8000,0x8000,0x8000, // e - 0x8000,0x8000,0x801C,0x8036,0x8032,0x8030,0x807C,0x8030,0x8030,0x8030,0x8030,0x8078,0x8000,0x8000,0x8000,0x8000, // f - 0x8000,0x8000,0x8000,0x8000,0x8000,0x803B,0x8066,0x8066,0x8066,0x8066,0x803E,0x8006,0x8066,0x803C,0x8000,0x8000, // g - 0x8000,0x8000,0x8070,0x8030,0x8030,0x8036,0x803B,0x8033,0x8033,0x8033,0x8033,0x8073,0x8000,0x8000,0x8000,0x8000, // h - 0x8000,0x8000,0x800C,0x800C,0x8000,0x801C,0x800C,0x800C,0x800C,0x800C,0x800C,0x801E,0x8000,0x8000,0x8000,0x8000, // i - 0x8000,0x8000,0x8006,0x8006,0x8000,0x800E,0x8006,0x8006,0x8006,0x8006,0x8006,0x8066,0x8066,0x803C,0x8000,0x8000, // j - 0x8000,0x8000,0x8070,0x8030,0x8030,0x8033,0x8033,0x8036,0x803C,0x8036,0x8033,0x8073,0x8000,0x8000,0x8000,0x8000, // k - 0x8000,0x8000,0x801C,0x800C,0x800C,0x800C,0x800C,0x800C,0x800C,0x800C,0x800C,0x801E,0x8000,0x8000,0x8000,0x8000, // l - 0x8000,0x8000,0x8000,0x8000,0x8000,0x806E,0x807F,0x806B,0x806B,0x806B,0x806B,0x806B,0x8000,0x8000,0x8000,0x8000, // m - 0x8000,0x8000,0x8000,0x8000,0x8000,0x806E,0x8033,0x8033,0x8033,0x8033,0x8033,0x8033,0x8000,0x8000,0x8000,0x8000, // n - 0x8000,0x8000,0x8000,0x8000,0x8000,0x803E,0x8063,0x8063,0x8063,0x8063,0x8063,0x803E,0x8000,0x8000,0x8000,0x8000, // o - 0x8000,0x8000,0x8000,0x8000,0x8000,0x806E,0x8033,0x8033,0x8033,0x8033,0x803E,0x8030,0x8030,0x8078,0x8000,0x8000, // p 0x70 - 0x8000,0x8000,0x8000,0x8000,0x8000,0x803B,0x8066,0x8066,0x8066,0x8066,0x803E,0x8006,0x8006,0x800F,0x8000,0x8000, // q - 0x8000,0x8000,0x8000,0x8000,0x8000,0x806E,0x803B,0x8033,0x8030,0x8030,0x8030,0x8078,0x8000,0x8000,0x8000,0x8000, // r - 0x8000,0x8000,0x8000,0x8000,0x8000,0x803E,0x8063,0x8038,0x800E,0x8003,0x8063,0x803E,0x8000,0x8000,0x8000,0x8000, // s - 0x8000,0x8000,0x8008,0x8018,0x8018,0x807E,0x8018,0x8018,0x8018,0x8018,0x801B,0x800E,0x8000,0x8000,0x8000,0x8000, // t - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8066,0x8066,0x8066,0x8066,0x8066,0x8066,0x803B,0x8000,0x8000,0x8000,0x8000, // u - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8063,0x8063,0x8036,0x8036,0x801C,0x801C,0x8008,0x8000,0x8000,0x8000,0x8000, // v - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8063,0x8063,0x8063,0x806B,0x806B,0x807F,0x8036,0x8000,0x8000,0x8000,0x8000, // w - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8063,0x8036,0x801C,0x801C,0x801C,0x8036,0x8063,0x8000,0x8000,0x8000,0x8000, // x - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8063,0x8063,0x8063,0x8063,0x8063,0x803F,0x8003,0x8006,0x803C,0x8000,0x8000, // y - 0x8000,0x8000,0x8000,0x8000,0x8000,0x807F,0x8066,0x800C,0x8018,0x8030,0x8063,0x807F,0x8000,0x8000,0x8000,0x8000, // z - 0x8000,0x8000,0x800E,0x8018,0x8018,0x8018,0x8070,0x8018,0x8018,0x8018,0x8018,0x800E,0x8000,0x8000,0x8000,0x8000, // { - 0x8000,0x8000,0x8018,0x8018,0x8018,0x8018,0x8018,0x8000,0x8018,0x8018,0x8018,0x8018,0x8018,0x8000,0x8000,0x8000, // | - 0x8000,0x8000,0x8070,0x8018,0x8018,0x8018,0x800E,0x8018,0x8018,0x8018,0x8018,0x8070,0x8000,0x8000,0x8000,0x8000, // } - 0x8000,0x8000,0x803B,0x806E,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000, // ~ 7E - 0x7000,0x7000,0x7000,0x7008,0x7000,0x7000,0x700E,0x7012,0x700C,0x7012,0x7021,0x7020,0x7020,0x7010,0x700F,0x7000, //7F - 0x5000,0x5000,0x5000,0x5004,0x5000,0x5000,0x5006,0x5009,0x5005,0x5003,0x501E,0x5000,0x5000,0x5000,0x5000,0x5000, //80 - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8040,0x8081,0x807E,0x8028,0x8010,0x8000,0x8000,0x8000,0x8000, //81 - 0x7000,0x7000,0x7000,0x7000,0x7000,0x7000,0x7000,0x7006,0x7009,0x7019,0x7066,0x7000,0x7000,0x7000,0x7000,0x7000, //82-F8 - 0x5000,0x5000,0x5000,0x500A,0x5000,0x5000,0x5006,0x5009,0x5005,0x5003,0x501E,0x5000,0x5000,0x5000,0x5000,0x5000, //83 - 0x6000,0x6000,0x6000,0x6000,0x6002,0x6000,0x6000,0x6007,0x6009,0x6006,0x603F,0x6000,0x6000,0x6000,0x6000,0x6000, //84-F6 - 0x6000,0x6000,0x6000,0x6008,0x6000,0x6000,0x600C,0x6012,0x6010,0x6009,0x603E,0x6000,0x6000,0x6000,0x6000,0x6000, //85-F5 - 0x4000,0x4000,0x4000,0x4001,0x4001,0x4001,0x4001,0x4001,0x4001,0x4001,0x400E,0x4000,0x4000,0x4000,0x4000,0x4000, //86-F3 - 0x4000,0x4000,0x4000,0x4000,0x4002,0x4000,0x4000,0x4002,0x4001,0x4001,0x400E,0x4000,0x4000,0x4000,0x4000,0x4000, //87-F2 - 0x6000,0x6000,0x6000,0x6000,0x6000,0x6000,0x6000,0x6007,0x6009,0x6006,0x603F,0x6000,0x6000,0x6000,0x6000,0x6000, //88-F0 - 0x7000,0x7000,0x7000,0x7000,0x7000,0x7000,0x700E,0x7012,0x700C,0x7012,0x7021,0x7020,0x7020,0x7010,0x700F,0x7000, //89-F1 - 0x9000,0x9000,0x9000,0x9000,0x9000,0x9000,0x9000,0x9000,0x9049,0x9049,0x91B6,0x9000,0x9000,0x9000,0x9000,0x9000, //8A - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8008,0x8008,0x8034,0x8044,0x803A,0x8001,0x8000,0x8000,0x8000,0x8000,0x8000, //8B-E7 - 0x5000,0x5000,0x5000,0x5001,0x5006,0x5008,0x500C,0x5002,0x5001,0x5001,0x501E,0x5000,0x5000,0x5000,0x5000,0x5000, //8C - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8070,0x808F,0x8030,0x8040,0x8094,0x8080,0x8088,0x8041,0x803E,0x8000, //8D - 0x6000,0x6000,0x6000,0x6002,0x6000,0x6005,0x6000,0x6000,0x6001,0x6001,0x6001,0x6002,0x600C,0x6030,0x6000,0x6000, //8E - 0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4002,0x4001,0x4001,0x400E,0x4000,0x4000,0x4005,0x4000,0x4000, //8F-C0 - 0x9001,0x9006,0x9008,0x9001,0x9006,0x9008,0x900C,0x9042,0x9081,0x9081,0x907E,0x9000,0x9000,0x9000,0x9000,0x9000, //90 - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8004,0x800A,0x8012,0x8014,0x80F9,0x8012,0x800C,0x8006,0x8000,0x8000, //91-95 - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8047,0x8088,0x8087,0x8081,0x807E,0x8000, //92-9C - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8018,0x8024,0x8002,0x80FF,0x8000,0x8028,0x8000,0x8010,0x8000, //93-9D - 0x9000,0x9000,0x9000,0x9000,0x9000,0x9000,0x9070,0x908F,0x9034,0x9042,0x9095,0x9080,0x9088,0x9041,0x903E,0x9000, //94-9E - 0x8000,0x8000,0x8000,0x8042,0x8022,0x8012,0x800A,0x8006,0x8006,0x800A,0x8031,0x8000,0x8000,0x8000,0x8000,0x8000, //95-9F - 0x4000,0x4003,0x4004,0x4003,0x4004,0x4000,0x4000,0x4002,0x4001,0x4001,0x400E,0x4000,0x4000,0x4000,0x4000,0x4000, //96-A2 - 0x7000,0x7000,0x7000,0x7021,0x7011,0x7009,0x7005,0x7003,0x7002,0x7005,0x7009,0x700F,0x7000,0x7000,0x7000,0x7000, //97-A5 - 0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4006,0x4008,0x4007,0x400C,0x4000,0x4000,0x4000,0x4000,0x4000, //98-C1 - 0x6001,0x600E,0x6010,0x6004,0x6004,0x6004,0x6004,0x6004,0x6004,0x6004,0x6004,0x6000,0x6000,0x6000,0x6000,0x6000, //99-C2 - 0x3000,0x1000,0x1000,0x1001,0x1001,0x1001,0x1001,0x1001,0x1001,0x1001,0x1001,0x1000,0x1000,0x1000,0x1000,0x1000, //9A-C7 - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8040,0x8081,0x8081,0x807E,0x8000,0x8000,0x8010,0x8000,0x8000, //9B-C8 - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8014,0x8000,0x8040,0x8081,0x8081,0x807E,0x8000,0x8000,0x8000,0x8000,0x8000, //9C-CA - 0x8000,0x8000,0x8000,0x8008,0x8000,0x8014,0x8000,0x8040,0x8081,0x8081,0x807E,0x8000,0x8000,0x8000,0x8000,0x8000, //9D-CB - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8070,0x808F,0x8030,0x8040,0x8080,0x8088,0x8080,0x8041,0x803E,0x8000, //9E-CC - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8070,0x808F,0x8030,0x8040,0x8080,0x8080,0x8080,0x8041,0x803E,0x8000, //9F-CD - 0x8000,0x8000,0x8000,0x8020,0x8000,0x8000,0x8070,0x808F,0x8030,0x8040,0x8080,0x8080,0x8080,0x8041,0x803E,0x8000, //A0-CE - 0x5000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4004,0x4002,0x4001,0x4001,0x400E,0x4000,0x4000,0x4000,0x4000,0x4000, //A1-CF - 0x5000,0x4000,0x4000,0x4004,0x4000,0x4000,0x4004,0x4002,0x4001,0x4001,0x400E,0x4000,0x4000,0x4000,0x4000,0x4000, //A2-D0 - 0x7000,0x6000,0x6000,0x6000,0x6000,0x6000,0x6000,0x6000,0x6001,0x6001,0x6001,0x6002,0x600C,0x6030,0x6000,0x6000, //A3-D1 - 0x7000,0x6000,0x6000,0x6000,0x6000,0x6002,0x6000,0x6000,0x6001,0x6001,0x6001,0x6002,0x600C,0x6030,0x6000,0x6000, //A4-D2 - 0xC000,0xC000,0xC000,0xC000,0xC000,0xC000,0xC000,0xC000,0xC049,0xC449,0xC836,0xC820,0xC820,0xC440,0xC380,0xC000, //A5-D3 - 0xC000,0xC000,0xC000,0xC008,0xC000,0xC014,0xC000,0xC000,0xC049,0xC449,0xC836,0xC820,0xC820,0xC440,0xC380,0xC000, //A6-D4 - 0xC000,0xC000,0xC000,0xC000,0xC000,0xC000,0xC000,0xC006,0xC049,0xC451,0xC83E,0xC820,0xC820,0xC440,0xC380,0xC000, //A7-D5 - 0xC000,0xC000,0xC000,0xC000,0xC010,0xC000,0xC000,0xC006,0xC049,0xC451,0xC83E,0xC820,0xC820,0xC440,0xC380,0xC000, //A8-D6 - 0x8000,0x8000,0x8000,0x8020,0x8020,0x8020,0x8020,0x8026,0x8029,0x8031,0x80FE,0x8000,0x8000,0x8000,0x8000,0x8000, //A9-D8 - 0x8000,0x8000,0x8000,0x8020,0x8024,0x8020,0x8020,0x8026,0x8029,0x8031,0x80FE,0x8000,0x8000,0x8000,0x8000,0x8000, //AA-D9 - 0x7000,0x7000,0x7000,0x7000,0x7000,0x7030,0x7040,0x7044,0x7038,0x7020,0x7040,0x7040,0x7040,0x7021,0x701E,0x7000, //AB-DA - 0x7000,0x7000,0x7020,0x7000,0x7000,0x7030,0x7040,0x7044,0x7038,0x7020,0x7040,0x7040,0x7040,0x7021,0x701E,0x7000, //AC-DB - 0x3000,0x3000,0x3000,0x3000,0x3000,0x3000,0x3000,0x3000,0x3000,0x3000,0x3007,0x3000,0x3000,0x3000,0x3000,0x3000, //AD-DC - 0xA000,0xA000,0xA000,0xA004,0xA000,0xA000,0xA006,0xA109,0xA205,0xA203,0xA1FE,0xA000,0xA000,0xA000,0xA000,0xA000, //AE-DD - 0x8000,0x8000,0x8000,0x8000,0x800A,0x8000,0x8000,0x8006,0x8009,0x8049,0x8087,0x8081,0x8081,0x8042,0x803C,0x8000, //AF-DE - 0x8000,0x8000,0x8000,0x8001,0x8006,0x8008,0x800C,0x8042,0x8081,0x8081,0x807E,0x8000,0x8000,0x8000,0x8000,0x8000, //B0-DF - 0x7000,0x7000,0x7000,0x7001,0x7001,0x7001,0x7001,0x7001,0x7021,0x7041,0x7041,0x7042,0x703C,0x7000,0x7000,0x7000, //B1-E1 - 0x6000,0x6000,0x6000,0x6000,0x6000,0x6000,0x6000,0x6006,0x6009,0x6009,0x601E,0x6020,0x6020,0x6020,0x6020,0x6020, //B2-E3 - 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8010,0x8000,0x8002,0x8041,0x8081,0x8081,0x8081,0x8042,0x803C,0x8000, //B3-E4 - 0x5000,0x5000,0x5000,0x5000,0x5000,0x5000,0x500C,0x5012,0x5011,0x5011,0x500E,0x5000,0x5000,0x5000,0x5000,0x5000, //B4-E5 - 0x7000,0x6000,0x6000,0x6000,0x6000,0x6000,0x6000,0x6006,0x6009,0x6009,0x6007,0x6001,0x6002,0x600C,0x6030,0x6000, //B5-E6 - 0x9000,0x9000,0x9000,0x9000,0x9000,0x9000,0x9000,0x9003,0x9084,0x9108,0x910E,0x9102,0x9104,0x90F8,0x9000,0x9000 //B6-ED -}; -
diff -r cc93245bb6d0 -r 251e4d020501 Effects.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Effects.h Fri Apr 27 07:33:56 2018 +0000 @@ -0,0 +1,318 @@ +#include "ILI9225.h" +#include <time.h> + +//Initialize pins for MBED LPC1768: RST, RS, CS, SDI(MOSI), CLK(SCK), LED. +ILI9225 tft(P2_4, P2_3, P2_5, P0_9, P0_7, P0_6); +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); + +//Initialize pins for LPCXPRESSO LPC1769: RST, RS, CS, SDI(MOSI), CLK(SCK), LED. +//ILI9225 tft(P0_5, P0_10, P0_4, P0_18, P0_15, P0_16); + +//???b used out of 256kb available. +//uint16_t picture[13986] = {0}; + +uint16_t *picture = (uint16_t *)(0x2007C000); + +uint8_t puzzState[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15}; + +uint8_t cursorIndex = 0; //Refers to current index (-1 < cursorIndex < 16). + +Timer timer; //Timer used to implement wireless input +InterruptIn wirelessInput(p18); //Interrupt used to implement wireless input +float wirelessInput_Freq = 0; //Global variable used to implement wireless input + +void flip() { + //Convert period (in us) to frequency (Hz) + wirelessInput_Freq = (1/(float)timer.read_us())*1000000; + //Reset timer and wait for next interrupt + timer.reset(); +} + +int getPlayerInput(float freq) { + int specifier = (((int)freq) - (((int)freq)%1000))/1000; + wait_ms(1); + if(specifier == 1) { + //Turn on LED indicator(s): controller is in range. + led1 = led2 = led3 = led4 = 1; + return 0; + } + else if(specifier > 0 && specifier < 8) { + //Turn on LED indicator(s): controller is in range. + led1 = led2 = led3 = led4 = 1; + return specifier; + } + else { + //Turn off LED indicator(s): controller is NOT in range. + led1 = led2 = led3 = led4 = 0; + return 0; + } +} + +void printNumber(int x, int y, uint8_t number) { + //tft.fillRectangle(0, 0, 175, 91, COLOR_BLACK); + tft.setFont(Terminal12x16); + + if(number == 0) + tft.drawText(x, y, "0", COLOR_WHITE); + else if(number == 1) + tft.drawText(x, y, "1", COLOR_WHITE); + else if(number == 2) + tft.drawText(x, y, "2", COLOR_WHITE); + else if(number == 3) + tft.drawText(x, y, "3", COLOR_WHITE); + else if(number == 4) + tft.drawText(x, y, "4", COLOR_WHITE); + else if(number == 5) + tft.drawText(x, y, "5", COLOR_WHITE); + else if(number == 6) + tft.drawText(x, y, "6", COLOR_WHITE); + else if(number == 7) + tft.drawText(x, y, "7", COLOR_WHITE); + else if(number == 8) + tft.drawText(x, y, "8", COLOR_WHITE); + else if(number == 9) + tft.drawText(x, y, "9", COLOR_WHITE); + else if(number == 10) + tft.drawText(x, y, "10", COLOR_WHITE); + else if(number == 11) + tft.drawText(x, y, "11", COLOR_WHITE); + else if(number == 12) + tft.drawText(x, y, "12", COLOR_WHITE); + else if(number == 13) + tft.drawText(x, y, "13", COLOR_WHITE); + else if(number == 14) + tft.drawText(x, y, "14", COLOR_WHITE); + else if(number == 15) + tft.drawText(x, y, "15", COLOR_WHITE); + else + tft.drawText(x, y, "?", COLOR_WHITE); +} + +void printElementsInPicture() { + tft.fillRectangle(0, 0, 175, 91, COLOR_BLACK); + for(int i = 0; i < 16; i++) + printNumber((40*(i%4)) + 8, (20*((i - (i%4))/4)) + 8, puzzState[i]); +} + +//Put contents of pictureN at target index on GLCD specified by 'index'. +void printPictureN(int index, int N) { + int c = index%4; + int r = (index - c)/4; + + if(N > 13) { + tft.fillRectangle((39*c) + 11, (29*r) + 95, + (39*c) + 47, (29*r) + 121, COLOR_BLACK); + return; + } + for(int x = (39*c) + 11; x <= (39*c) + 47; x++) { + for(int y = (29*r) + 95; y <= (29*r) + 121; y++) + tft.drawPixel(x, y, picture[(999*N) + (4*y) + x]); + } +} + +void updatePuzzle() { + for(int N = 0; N < 16; N++) + printPictureN(N, puzzState[N]); +} + +int getNextPixel_index = 0; + +//**TODO** replace the contents of the following method with the code necessary +//to get the next pixel from the OV7670. The method, in its current state, is +//good for testing purposes. You should also be able to remove the +//'getNextPixel_index' variable if you correctly implement this new method. +uint16_t getNextPixel() { + uint16_t value = 0; + + int x, y; + + if(getNextPixel_index > 19199) { + getNextPixel_index = 0; + x = 0; + } + else + x = getNextPixel_index%160; + y = (getNextPixel_index - x)/160; + + //Is pixel in one of 4 outer pieces (corners)? + if((x >= 0 && x <= 40) && (y >= 0 && y <= 30)) //Upper left corner. + value = 65535; + if((x >= 119 && x <= 159) && (y >= 0 && y <= 30)) //Upper right corner. + value = 52428; + if((x >= 0 && x <= 40) && (y >= 89 && y <= 119)) //Lower left corner. + value = 13107; + if((x >= 119 && x <= 159) && (y >= 89 && y <= 119)) //Lower right corner. + value = 0; + + //Is pixel in one of 4 outer pieces (left and right)? + if((x >= 0 && x <= 40) && (y >= 31 && y <= 59)) //Upper left side. + value = 48059; + if((x >= 0 && x <= 40) && (y >= 60 && y <= 88)) //Lower left side. + value = 30583; + if((x >= 119 && x <= 159) && (y >= 31 && y <= 59)) //Upper right side. + value = 34952; + if((x >= 119 && x <= 159) && (y >= 60 && y <= 88)) //Lower right side. + value = 17476; + + //Is pixel in one of 4 outer pieces (top and bottom)? + if((x >= 41 && x <= 79) && (y >= 0 && y <= 30)) //Left top side. + value = 61166; + if((x >= 80 && x <= 118) && (y >= 0 && y <= 30)) //Right top side. + value = 56797; + if((x >= 41 && x <= 79) && (y >= 89 && y <= 119)) //Left bottom side. + value = 8738; + if((x >= 80 && x <= 118) && (y >= 89 && y <= 119)) //Right bottom side. + value = 0; + + //Is pixel in one of 4 inner pieces? + if((x >= 41 && x <= 79) && (y >= 31 && y <= 59)) //Upper left inner piece. + value = 43690; + if((x >= 80 && x <= 118) && (y >= 31 && y <= 59)) //Upper right inner piece. + value = 39321; + if((x >= 41 && x <= 79) && (y >= 60 && y <= 88)) //Lower left inner piece. + value = 26214; + if((x >= 80 && x <= 118) && (y >= 60 && y <= 88)) //Lower right inner piece. + value = 21845; + + getNextPixel_index++; + + return value; +} + +void handlePixel(int index, uint16_t pixel) { + int x = index%160; + int y = (index - x)/160; + if((x >= 3 && x <= 39) && (y >= 3 && y <= 29)) + picture[37*y + x - 114] = pixel; + else if((x >= 42 && x <= 78) && (y >= 3 && y <= 29)) + picture[37*y + x - 153 + 999] = pixel; + else if((x >= 81 && x <= 117) && (y >= 3 && y <= 29)) + picture[37*y + x - 192 + 1998] = pixel; + else if((x >= 120 && x <= 156) && (y >= 3 && y <= 29)) + picture[37*y + x - 231 + 2997] = pixel; + else if((x >= 3 && x <= 39) && (y >= 32 && y <= 58)) + picture[37*y + x - 1187 + 3996] = pixel; + else if((x >= 42 && x <= 78) && (y >= 32 && y <= 58)) + picture[37*y + x - 1226 + 4995] = pixel; + else if((x >= 81 && x <= 117) && (y >= 32 && y <= 58)) + picture[37*y + x - 1265 + 5994] = pixel; + else if((x >= 120 && x <= 156) && (y >= 32 && y <= 58)) + picture[37*y + x - 1304 + 6993] = pixel; + else if((x >= 3 && x <= 39) && (y >= 61 && y <= 87)) + picture[37*y + x - 2260 + 7992] = pixel; + else if((x >= 42 && x <= 78) && (y >= 61 && y <= 87)) + picture[37*y + x - 2299 + 8991] = pixel; + else if((x >= 81 && x <= 117) && (y >= 61 && y <= 87)) + picture[37*y + x - 2338 + 9990] = pixel; + else if((x >= 120 && x <= 156) && (y >= 61 && y <= 87)) + picture[37*y + x - 2377 + 10989] = pixel; + else if((x >= 3 && x <= 39) && (y >= 90 && y <= 116)) + picture[37*y + x - 3333 + 11988] = pixel; + else if((x >= 42 && x <= 78) && (y >= 90 && y <= 116)) + picture[37*y + x - 3372 + 12987] = pixel; +} + +//A utility function to swap 2 numbers +void swap(uint8_t *a, uint8_t *b) { + uint8_t temp = *a; + *a = *b; + *b = temp; +} + +void shuffleGridIndices() { + int n = sizeof(puzzState)/sizeof(puzzState[0]); + + //Use a different seed value so that we don't get same result each time we + //run this program. + srand(time(NULL)); + + //Start from the last element and swap one by one. We don't need to run for + //the first element, which is why i > 0. + for (int i = n-1; i > 0; i--) { + int j = rand()%(i+1); //Pick a random index b.w. 0 & i. + swap(&puzzState[i], &puzzState[j]); //Swap w| element @ random index. + } +} + +//This method puts a picture on the screen that is/was helpful during testing. +void putTestPicture() { + //Add 4 outer pieces (corners). + tft.fillRectangle(8, 92, 48, 122, 65535); //Upper left corner. + tft.fillRectangle(127, 92, 167, 122, 52428); //Upper right corner. + tft.fillRectangle(8, 181, 48, 211, 13107); //Lower left corner. + tft.fillRectangle(127, 181, 167, 211, 0); //Lower right corner. + + //Add 4 outer pieces (left and right). + tft.fillRectangle(8, 123, 48, 151, 48059); //Upper left side. + tft.fillRectangle(8, 152, 48, 180, 30583); //Lower left side. + tft.fillRectangle(127, 123, 167, 151, 34952); //Upper right side. + tft.fillRectangle(127, 152, 167, 180, 17476); //Lower right side. + + //Add 4 outer pieces (top and bottom). + tft.fillRectangle(49, 92, 87, 122, 61166); //Left top side. + tft.fillRectangle(88, 92, 126, 122, 56797); //Right top side. + tft.fillRectangle(49, 181, 87, 211, 8738); //Left bottom side. + tft.fillRectangle(88, 181, 126, 211, 0); //Right bottom side. + + //Add 4 inner pieces. + tft.fillRectangle(49, 123, 87, 151, 43690); //Upper left inner piece. + tft.fillRectangle(88, 123, 126, 151, 39321); //Upper right inner piece. + tft.fillRectangle(49, 152, 87, 180, 26214); //Lower left inner piece. + tft.fillRectangle(88, 152, 126, 180, 21845); //Lower right inner piece. +} + +void putGrid() { + tft.drawRectangle(8, 92, 167, 211, COLOR_WHITE); + tft.drawRectangle(9, 93, 166, 210, COLOR_WHITE); + + for(int r = 0; r < 4; r++) { + for(int c = 0; c < 4; c++) + tft.drawRectangle(39*c + 10, 29*r + 94, 39*c + 48, 29*r + 122, + COLOR_WHITE); + } +} + +void highlightGridIndex(uint8_t index, bool hasSelected) { + int c = index%4; + int r = (index - c)/4; + putGrid(); + if(hasSelected) //Red highlight means player has selected an index. + tft.drawRectangle(39*c + 10, 29*r + 94, 39*c + 48, 29*r + 122, + COLOR_RED); + if(!hasSelected) //Green highlight means player has not selected an index. + tft.drawRectangle(39*c + 10, 29*r + 94, 39*c + 48, 29*r + 122, + COLOR_GREEN); + cursorIndex = index; +} + +bool selectionMode_indexVerified(uint8_t index) { + //index must satisfy 2 characteristics for method to return true. + + //1) Target puzzle piece is NOT one of the 2 missing puzzle pieces. + if(puzzState[index] > 13) + return false; + + //2) Target puzzle piece is NOT locked on all 4 sides. + if(index - 4 > -1) { //NOT out of bounds above. + if(puzzState[index - 4] > 13) //Empty space above? + return true; + } + if(index + 4 < 16) { //NOT out of bounds below. + if(puzzState[index + 4] > 13) //Empty space below? + return true; + } + if((index%4) - 1 > -1) { //NOT out of bounds to the left. + if(puzzState[index - 1] > 13) //Empty space to the left? + return true; + } + if((index%4) + 1 < 4) { //NOT out of bounds to the right. + if(puzzState[index + 1] > 13) //Empty space to the right? + return true; + } + + return false; +} \ No newline at end of file
diff -r cc93245bb6d0 -r 251e4d020501 FAmap.h --- a/FAmap.h Tue Sep 01 12:16:09 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -//------------------------------------------------------------------------------------------------ -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -//------------------------------------------------------------------------------------------------ -/* -....::::: In The Name Of GOD :::::.... - - -**************** ****************** - -Ported to ILI9225 by Arman Safikhani 31-08-2015 - -**************** ****************** - - -TFT LCD (ILI9325-ILI9320 LCD Driver) Functions (ECA 2.8 inch LCD Module) -Version : 1.0 -By Ali Imanifar 11/06/2013 - -ECA Corporation........www.ECA.ir -ECA Eshop..............www.Eshop.ECA.ir -ECA Forum..............www.ECA.ir/Forum2 -ECA Video Center.......www.TV.ECA.ir -ECA Blog...............www.Blog.ECA.ir - -Important Note : -DO NOT Change LCD Register Definitions And LCD Command Codes -*/ -//------------------------------------------------------------------------------------------------ -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -//------------------------------------------------------------------------------------------------ - - -const unsigned char FAmap[50][6] = -{ - //x-C1+5 - 0xB0,0x8C,0xB0,0x8C,1,1, //34 ک - 223 - 0x81,0x03,0x81,0x03,1,1, //0 پ - 234 - 0x8D,0x93,0x94,0x93,1,1, //1 چ - 235 - 0x8E,0x8E,0x8E,0x8E,1,0, //2 ژ - 238 - 0x90,0x01,0x90,0x01,1,1, //3 گ - 239 - 0x98,0x96,0x98,0x96,0,1, //4 ئ - 193 - 0x99,0x99,0x02,0x02,1,0, //5 آ - 194 - 0xC3,0xC3,0x01,0x01,1,0, //6 - 195 - 0xC4,0xC4,0xC4,0xC4,0,0, //7 - 196 - 0xC5,0xC5,0x03,0x03,1,0, //8 - 197 - 0xC6,0xC6,0xC6,0xC6,0,0, //9 - 198 - 0x9A,0x9A,0x00,0x00,1,0, //10 ا - 199 - 0x9B,0x04,0x9B,0x04,1,1, //11 ب - 200 - 0xC9,0xFE,0xE9,0x95,1,1, //12 - 201 - 0x9C,0x05,0x9C,0x05,1,1, //13 ت - 202 - 0x9D,0x06,0x9D,0x06,1,1, //14 ث - 203 - 0x9E,0x07,0x08,0x07,1,1, //15 ج - 204 - 0x9F,0x09,0x0A,0x09,1,1, //16 ح - 205 - 0xA0,0x0B,0x0C,0x0B,1,1, //17 خ - 206 - 0xA1,0xA1,0xA1,0xA1,1,0, //18 د - 207 - 0xA2,0xA2,0xA2,0xA2,1,0, //19 ذ - 208 - 0xA3,0xA3,0xA3,0xA3,1,0, //20 ر - 209 - 0xA4,0xA4,0xA4,0xA4,1,0, //21 ز - 210 - 0xA5,0x8A,0xA5,0x8A,1,1, //22 س - 211 - 0xA6,0x0E,0xA6,0x0E,1,1, //23 ش - 212 - 0xA7,0x0F,0xA7,0x0F,1,1, //24 ص - 213 - 0xA8,0x1A,0xA8,0x1A,1,1, //25 ض - 214 - 0xD7,0xD7,0xD7,0xD7,0,0, //26 - 215 - 0xA9,0xA9,0xA9,0xA9,1,1, //27 ط - 216 - 0xAA,0xAA,0xAA,0xAA,1,1, //28 ظ - 217 - 0xAB,0x1B,0x89,0x88,1,1, //29 ع - 218 - 0xAC,0x85,0x7F,0x84,1,1, //30 غ - 219 - 0xAD,0xAD,0xAD,0xAD,1,1, //31 - - 220 - 0xAE,0x80,0xAE,0x80,1,1, //32 ف - 221 - 0xAF,0x83,0xAF,0x83,1,1, //33 ق - 222 - 0xB0,0x8C,0xB0,0x8C,1,1, //34 ک - 223 - 0xE0,0xE0,0xE0,0xE0,0,0, //35 - 224 - 0xB1,0x86,0xB1,0x86,1,1, //36 ل - 225 - 0xE2,0xE2,0xE2,0xE2,0,0, //37 - 226 - 0xB2,0x82,0xB2,0x82,1,1, //38 م - 227 - 0xB3,0x87,0xB3,0x87,1,1, //39 ن - 228 - 0xB4,0x0D,0x8B,0x91,1,1, //40 ه - 229 - 0xB5,0xB5,0xB5,0xB5,1,0, //41 و - 230 - 0xE7,0xE7,0xE7,0xE7,0,0, //42 - 231 - 0xE8,0xE8,0xE8,0xE8,0,0, //43 - 232 - 0xE9,0xE9,0xE9,0xE9,0,0, //44 - 233 - 0xFE,0xFE,0xFE,0xFE,0,0, //45 - 254 - 0xFF,0xFF,0xFF,0xFF,0,0, //46 - 255 - 0xEC,0xC0,0xA0,0xC0,1,1, //47 - 236 - 0xB6,0x8F,0x92,0x8F,1,1 //48 ي - 237 - -};
diff -r cc93245bb6d0 -r 251e4d020501 Fonts.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Fonts.h Fri Apr 27 07:33:56 2018 +0000 @@ -0,0 +1,294 @@ +#include "Effects.h" + +//GLCD FontName : Terminal12x16 +//GLCD FontSize : 12 x 16 +const uint8_t Terminal12x16[] = { + 0x0C, 0x10, 0x20, 0x60, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, //Code for char + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0xFF, 0x33, 0xFF, + 0x33, 0xFF, 0x33, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char ! + 0x09, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x00, + 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char " + 0x0C, 0x00, 0x02, 0x10, 0x1E, 0x90, 0x1F, 0xF0, 0x1F, 0xFE, 0x03, 0x7E, + 0x1E, 0x9E, 0x1F, 0xF0, 0x1F, 0xFE, 0x03, 0x7E, 0x02, 0x1E, 0x00, 0x10, + 0x00, //Code for char # + 0x0A, 0x00, 0x00, 0x78, 0x04, 0xFC, 0x0C, 0xFC, 0x0C, 0xFF, 0x3F, 0xFF, + 0x3F, 0xFF, 0x3F, 0xCC, 0x0F, 0xCC, 0x0F, 0x88, 0x07, 0x00, 0x00, 0x00, + 0x00, //Code for char $ + 0x0C, 0x00, 0x30, 0x38, 0x38, 0x38, 0x3C, 0x38, 0x1E, 0x38, 0x0F, 0x80, + 0x07, 0xC0, 0x03, 0xE0, 0x39, 0xF0, 0x38, 0x78, 0x38, 0x3C, 0x38, 0x1C, + 0x00, //Code for char % + 0x0B, 0x00, 0x00, 0x00, 0x1F, 0xB8, 0x3F, 0xFC, 0x3F, 0xFE, 0x31, 0xE6, + 0x37, 0xFE, 0x3F, 0x3E, 0x1E, 0x1C, 0x3E, 0x00, 0x36, 0x00, 0x22, 0x00, + 0x00, //Code for char & + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x3F, 0x00, 0x3F, + 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char ' + 0x09, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x03, 0xFC, 0x0F, 0xFE, 0x1F, 0xFF, + 0x3F, 0x07, 0x38, 0x01, 0x20, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char ( + 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x20, 0x07, 0x38, 0xFF, + 0x3F, 0xFE, 0x1F, 0xFC, 0x0F, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char ) + 0x0A, 0x00, 0x00, 0x98, 0x0C, 0xB8, 0x0E, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, + 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xB8, 0x0E, 0x98, 0x0C, 0x00, 0x00, 0x00, + 0x00, //Code for char * + 0x0A, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xF0, 0x0F, 0xF0, + 0x0F, 0xF0, 0x0F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, //Code for char + + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB8, 0x00, 0xF8, 0x00, + 0xF8, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char , + 0x0A, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, + 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, //Code for char - + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char . + 0x0C, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x1E, 0x00, 0x0F, 0x80, 0x07, 0xC0, + 0x03, 0xE0, 0x01, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0E, + 0x00, //Code for char / + 0x0C, 0xF8, 0x07, 0xFE, 0x1F, 0xFE, 0x1F, 0x07, 0x3F, 0x83, 0x33, 0xC3, + 0x31, 0xE3, 0x30, 0x73, 0x30, 0x3F, 0x38, 0xFE, 0x1F, 0xFE, 0x1F, 0xF8, + 0x07, //Code for char 0 + 0x0B, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x30, 0x0C, 0x30, 0x0E, 0x30, 0xFF, + 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, //Code for char 1 + 0x0C, 0x1C, 0x30, 0x1E, 0x38, 0x1F, 0x3C, 0x07, 0x3E, 0x03, 0x3F, 0x83, + 0x37, 0xC3, 0x33, 0xE3, 0x31, 0xF7, 0x30, 0x7F, 0x30, 0x3E, 0x30, 0x1C, + 0x30, //Code for char 2 + 0x0C, 0x0C, 0x0C, 0x0E, 0x1C, 0x0F, 0x3C, 0xC7, 0x38, 0xC3, 0x30, 0xC3, + 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xE7, 0x39, 0xFF, 0x3F, 0x7E, 0x1F, 0x3C, + 0x0E, //Code for char 3 + 0x0C, 0xC0, 0x03, 0xE0, 0x03, 0xF0, 0x03, 0x78, 0x03, 0x3C, 0x03, 0x1E, + 0x03, 0x0F, 0x03, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x03, 0x00, + 0x03, //Code for char 4 + 0x0C, 0x3F, 0x0C, 0x7F, 0x1C, 0x7F, 0x3C, 0x63, 0x38, 0x63, 0x30, 0x63, + 0x30, 0x63, 0x30, 0x63, 0x30, 0xE3, 0x38, 0xE3, 0x3F, 0xC3, 0x1F, 0x83, + 0x0F, //Code for char 5 + 0x0C, 0xC0, 0x0F, 0xF0, 0x1F, 0xF8, 0x3F, 0xFC, 0x39, 0xDE, 0x30, 0xCF, + 0x30, 0xC7, 0x30, 0xC3, 0x30, 0xC3, 0x39, 0xC3, 0x3F, 0x80, 0x1F, 0x00, + 0x0F, //Code for char 6 + 0x0C, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x30, 0x03, 0x3C, 0x03, + 0x3F, 0xC3, 0x0F, 0xF3, 0x03, 0xFF, 0x00, 0x3F, 0x00, 0x0F, 0x00, 0x03, + 0x00, //Code for char 7 + 0x0C, 0x00, 0x0F, 0xBC, 0x1F, 0xFE, 0x3F, 0xFF, 0x39, 0xE7, 0x30, 0xC3, + 0x30, 0xC3, 0x30, 0xE7, 0x30, 0xFF, 0x39, 0xFE, 0x3F, 0xBC, 0x1F, 0x00, + 0x0F, //Code for char 8 + 0x0C, 0x3C, 0x00, 0x7E, 0x00, 0xFF, 0x30, 0xE7, 0x30, 0xC3, 0x30, 0xC3, + 0x38, 0xC3, 0x3C, 0xC3, 0x1E, 0xE7, 0x0F, 0xFF, 0x07, 0xFE, 0x03, 0xFC, + 0x00, //Code for char 9 + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1C, 0x70, 0x1C, 0x70, + 0x1C, 0x70, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char : + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x9C, 0x70, 0xFC, 0x70, + 0xFC, 0x70, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char ; + 0x0A, 0x00, 0x00, 0xC0, 0x00, 0xE0, 0x01, 0xF0, 0x03, 0xF8, 0x07, 0x3C, + 0x0F, 0x1E, 0x1E, 0x0F, 0x3C, 0x07, 0x38, 0x03, 0x30, 0x00, 0x00, 0x00, + 0x00, //Code for char < + 0x0B, 0x00, 0x00, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, + 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x00, + 0x00, //Code for char = + 0x0A, 0x00, 0x00, 0x03, 0x30, 0x07, 0x38, 0x0F, 0x3C, 0x1E, 0x1E, 0x3C, + 0x0F, 0xF8, 0x07, 0xF0, 0x03, 0xE0, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char > + 0x0B, 0x1C, 0x00, 0x1E, 0x00, 0x1F, 0x00, 0x07, 0x00, 0x83, 0x37, 0xC3, + 0x37, 0xE3, 0x37, 0xF7, 0x00, 0x7F, 0x00, 0x3E, 0x00, 0x1C, 0x00, 0x00, + 0x00, //Code for char ? + 0x0C, 0xF8, 0x0F, 0xFE, 0x1F, 0xFF, 0x1F, 0xF7, 0x3B, 0xFB, 0x37, 0xFB, + 0x37, 0xFB, 0x37, 0xFB, 0x37, 0xFF, 0x37, 0xFF, 0x37, 0xFE, 0x03, 0xF8, + 0x01, //Code for char @ + 0x0B, 0x00, 0x38, 0x00, 0x3F, 0xE0, 0x3F, 0xFC, 0x07, 0xFF, 0x06, 0x1F, + 0x06, 0xFF, 0x06, 0xFC, 0x07, 0xE0, 0x3F, 0x00, 0x3F, 0x00, 0x38, 0x00, + 0x00, //Code for char A + 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xC3, 0x30, 0xC3, 0x30, 0xC3, + 0x30, 0xE7, 0x30, 0xFF, 0x39, 0xFE, 0x3F, 0xBC, 0x1F, 0x00, 0x0F, 0x00, + 0x00, //Code for char B + 0x0B, 0xF0, 0x03, 0xFC, 0x0F, 0xFE, 0x1F, 0x0F, 0x3C, 0x07, 0x38, 0x03, + 0x30, 0x03, 0x30, 0x07, 0x38, 0x0F, 0x3C, 0x0E, 0x1C, 0x0C, 0x0C, 0x00, + 0x00, //Code for char C + 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x03, 0x30, 0x03, 0x30, 0x03, + 0x30, 0x07, 0x38, 0x0F, 0x3C, 0xFE, 0x1F, 0xFC, 0x0F, 0xF0, 0x03, 0x00, + 0x00, //Code for char D + 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xC3, 0x30, 0xC3, 0x30, 0xC3, + 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC3, 0x30, 0x03, 0x30, 0x03, 0x30, 0x00, + 0x00, //Code for char E + 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xC3, 0x00, 0xC3, 0x00, 0xC3, + 0x00, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, + 0x00, //Code for char F + 0x0B, 0xF0, 0x03, 0xFC, 0x0F, 0xFE, 0x1F, 0x0F, 0x3C, 0x07, 0x38, 0xC3, + 0x30, 0xC3, 0x30, 0xC3, 0x30, 0xC7, 0x3F, 0xC7, 0x3F, 0xC6, 0x3F, 0x00, + 0x00, //Code for char G + 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xC0, 0x00, 0xC0, 0x00, 0xC0, + 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, + 0x00, //Code for char H + 0x09, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x03, 0x30, 0xFF, 0x3F, 0xFF, + 0x3F, 0xFF, 0x3F, 0x03, 0x30, 0x03, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char I + 0x0B, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x3E, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x38, 0xFF, 0x3F, 0xFF, 0x1F, 0xFF, 0x07, 0x00, + 0x00, //Code for char J + 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xE0, 0x01, 0xF0, 0x03, 0xF8, + 0x07, 0x3C, 0x0F, 0x1E, 0x1E, 0x0F, 0x3C, 0x07, 0x38, 0x03, 0x30, 0x00, + 0x00, //Code for char K + 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, //Code for char L + 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x7E, 0x00, 0xF8, 0x01, 0xE0, + 0x01, 0xF8, 0x01, 0x7E, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, + 0x00, //Code for char M + 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x3E, 0x00, 0xF8, 0x00, 0xF0, + 0x03, 0xC0, 0x07, 0x00, 0x1F, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, + 0x00, //Code for char N + 0x0B, 0xF0, 0x03, 0xFC, 0x0F, 0xFE, 0x1F, 0x0F, 0x3C, 0x07, 0x38, 0x03, + 0x30, 0x07, 0x38, 0x0F, 0x3C, 0xFE, 0x1F, 0xFC, 0x0F, 0xF0, 0x03, 0x00, + 0x00, //Code for char O + 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x83, 0x01, 0x83, 0x01, 0x83, + 0x01, 0x83, 0x01, 0xC7, 0x01, 0xFF, 0x01, 0xFE, 0x00, 0x7C, 0x00, 0x00, + 0x00, //Code for char P + 0x0B, 0xF0, 0x03, 0xFC, 0x0F, 0xFE, 0x1F, 0x0F, 0x3C, 0x07, 0x38, 0x03, + 0x36, 0x07, 0x3E, 0x0F, 0x3E, 0xFE, 0x3F, 0xFC, 0x3F, 0xF0, 0x33, 0x00, + 0x00, //Code for char Q + 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x83, 0x01, 0x83, 0x03, 0x83, + 0x07, 0x83, 0x0F, 0xC7, 0x1F, 0xFF, 0x3D, 0xFE, 0x38, 0x7C, 0x30, 0x00, + 0x00, //Code for char R + 0x0B, 0x3C, 0x0C, 0x7E, 0x1C, 0xFF, 0x3C, 0xE7, 0x38, 0xC3, 0x30, 0xC3, + 0x30, 0xC3, 0x30, 0xC7, 0x39, 0xCF, 0x3F, 0x8E, 0x1F, 0x0C, 0x0F, 0x00, + 0x00, //Code for char S + 0x0A, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0xFF, 0x3F, 0xFF, + 0x3F, 0xFF, 0x3F, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char T + 0x0B, 0xFF, 0x07, 0xFF, 0x1F, 0xFF, 0x3F, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x38, 0xFF, 0x3F, 0xFF, 0x1F, 0xFF, 0x07, 0x00, + 0x00, //Code for char U + 0x0B, 0x07, 0x00, 0x3F, 0x00, 0xFF, 0x01, 0xF8, 0x0F, 0xC0, 0x3F, 0x00, + 0x3E, 0xC0, 0x3F, 0xF8, 0x0F, 0xFF, 0x01, 0x3F, 0x00, 0x07, 0x00, 0x00, + 0x00, //Code for char V + 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x1E, 0x80, 0x07, 0x80, + 0x03, 0x80, 0x07, 0x00, 0x1E, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, + 0x00, //Code for char W + 0x0B, 0x03, 0x30, 0x0F, 0x3C, 0x1F, 0x3E, 0x3C, 0x0F, 0xF0, 0x03, 0xE0, + 0x01, 0xF0, 0x03, 0x3C, 0x0F, 0x1F, 0x3E, 0x0F, 0x3C, 0x03, 0x30, 0x00, + 0x00, //Code for char X + 0x0B, 0x03, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0xF0, 0x3F, 0xC0, + 0x3F, 0xF0, 0x3F, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0x00, 0x03, 0x00, 0x00, + 0x00, //Code for char Y + 0x0B, 0x03, 0x30, 0x03, 0x3C, 0x03, 0x3E, 0x03, 0x3F, 0xC3, 0x33, 0xE3, + 0x31, 0xF3, 0x30, 0x3F, 0x30, 0x1F, 0x30, 0x0F, 0x30, 0x03, 0x30, 0x00, + 0x00, //Code for char Z + 0x09, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x03, + 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char [ + 0x0C, 0x0E, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x00, 0xE0, + 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x1C, 0x00, + 0x18, //Code for char BackSlash + 0x09, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, + 0x30, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char ] + 0x0C, 0x60, 0x00, 0x70, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0F, + 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0x70, 0x00, 0x60, + 0x00, //Code for char ^ + 0x0C, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, + 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, + 0xC0, //Code for char _ + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x7E, + 0x00, 0x7E, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char ` + 0x0B, 0x00, 0x1C, 0x40, 0x3E, 0x60, 0x3F, 0x60, 0x33, 0x60, 0x33, 0x60, + 0x33, 0x60, 0x33, 0x60, 0x33, 0xE0, 0x3F, 0xE0, 0x3F, 0xC0, 0x3F, 0x00, + 0x00, //Code for char a + 0x0B, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xE0, 0x30, 0x60, 0x30, 0x60, + 0x30, 0x60, 0x30, 0xE0, 0x38, 0xE0, 0x3F, 0xC0, 0x1F, 0x80, 0x0F, 0x00, + 0x00, //Code for char b + 0x0B, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x38, 0x60, 0x30, 0x60, + 0x30, 0x60, 0x30, 0x60, 0x30, 0xE0, 0x38, 0xC0, 0x18, 0x80, 0x08, 0x00, + 0x00, //Code for char c + 0x0B, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x38, 0x60, 0x30, 0x60, + 0x30, 0xE0, 0x30, 0xE0, 0x30, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, + 0x00, //Code for char d + 0x0B, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x3B, 0x60, 0x33, 0x60, + 0x33, 0x60, 0x33, 0x60, 0x33, 0xE0, 0x33, 0xC0, 0x13, 0x80, 0x01, 0x00, + 0x00, //Code for char e + 0x09, 0xC0, 0x00, 0xC0, 0x00, 0xFC, 0x3F, 0xFE, 0x3F, 0xFF, 0x3F, 0xC7, + 0x00, 0xC3, 0x00, 0xC3, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char f + 0x0B, 0x80, 0x03, 0xC0, 0xC7, 0xE0, 0xCF, 0xE0, 0xCE, 0x60, 0xCC, 0x60, + 0xCC, 0x60, 0xCC, 0x60, 0xEE, 0xE0, 0xFF, 0xE0, 0x7F, 0xE0, 0x3F, 0x00, + 0x00, //Code for char g + 0x0A, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xE0, 0x00, 0x60, 0x00, 0x60, + 0x00, 0xE0, 0x00, 0xE0, 0x3F, 0xC0, 0x3F, 0x80, 0x3F, 0x00, 0x00, 0x00, + 0x00, //Code for char h + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x30, 0xEC, 0x3F, 0xEC, + 0x3F, 0xEC, 0x3F, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char i + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xE0, 0x60, + 0xC0, 0xEC, 0xFF, 0xEC, 0xFF, 0xEC, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char j + 0x0A, 0x00, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x80, 0x07, 0xC0, + 0x0F, 0xE0, 0x1F, 0xE0, 0x3C, 0x60, 0x38, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, //Code for char k + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x03, 0x30, 0xFF, 0x3F, 0xFF, + 0x3F, 0xFF, 0x3F, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char l + 0x0B, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x00, 0xE0, 0x3F, 0xC0, + 0x3F, 0xE0, 0x3F, 0xE0, 0x00, 0xE0, 0x3F, 0xC0, 0x3F, 0x80, 0x3F, 0x00, + 0x00, //Code for char m + 0x0B, 0x00, 0x00, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x3F, 0x60, 0x00, 0x60, + 0x00, 0x60, 0x00, 0xE0, 0x00, 0xE0, 0x3F, 0xC0, 0x3F, 0x80, 0x3F, 0x00, + 0x00, //Code for char n + 0x0B, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x38, 0x60, 0x30, 0x60, + 0x30, 0x60, 0x30, 0xE0, 0x38, 0xE0, 0x3F, 0xC0, 0x1F, 0x80, 0x0F, 0x00, + 0x00, //Code for char o + 0x0B, 0xE0, 0xFF, 0xE0, 0xFF, 0xE0, 0xFF, 0x60, 0x1C, 0x60, 0x18, 0x60, + 0x18, 0x60, 0x18, 0xE0, 0x1C, 0xE0, 0x1F, 0xC0, 0x0F, 0x80, 0x07, 0x00, + 0x00, //Code for char p + 0x0B, 0x80, 0x07, 0xC0, 0x0F, 0xE0, 0x1F, 0xE0, 0x1C, 0x60, 0x18, 0x60, + 0x18, 0x60, 0x18, 0x60, 0x1C, 0xE0, 0xFF, 0xE0, 0xFF, 0xE0, 0xFF, 0x00, + 0x00, //Code for char q + 0x0B, 0x00, 0x00, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x00, 0x60, + 0x00, 0x60, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xC0, 0x00, 0x00, + 0x00, //Code for char r + 0x09, 0xC0, 0x11, 0xE0, 0x33, 0xE0, 0x33, 0x60, 0x33, 0x60, 0x33, 0x60, + 0x33, 0x60, 0x3F, 0x60, 0x3F, 0x40, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char s + 0x09, 0x60, 0x00, 0x60, 0x00, 0xFE, 0x1F, 0xFE, 0x3F, 0xFE, 0x3F, 0x60, + 0x30, 0x60, 0x30, 0x60, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char t + 0x0B, 0xE0, 0x0F, 0xE0, 0x1F, 0xE0, 0x3F, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x38, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x3F, 0x00, + 0x00, //Code for char u + 0x0B, 0x60, 0x00, 0xE0, 0x01, 0xE0, 0x07, 0x80, 0x1F, 0x00, 0x3E, 0x00, + 0x38, 0x00, 0x3E, 0x80, 0x1F, 0xE0, 0x07, 0xE0, 0x01, 0x60, 0x00, 0x00, + 0x00, //Code for char v + 0x0B, 0xE0, 0x07, 0xE0, 0x1F, 0xE0, 0x3F, 0x00, 0x3C, 0xE0, 0x1F, 0xE0, + 0x0F, 0xE0, 0x1F, 0x00, 0x3C, 0xE0, 0x3F, 0xE0, 0x1F, 0xE0, 0x07, 0x00, + 0x00, //Code for char w + 0x0A, 0x60, 0x30, 0xE0, 0x38, 0xE0, 0x3D, 0xC0, 0x1F, 0x80, 0x0F, 0x80, + 0x0F, 0xC0, 0x1F, 0xE0, 0x3D, 0xE0, 0x38, 0x60, 0x30, 0x00, 0x00, 0x00, + 0x00, //Code for char x + 0x0A, 0x00, 0x00, 0x60, 0x00, 0xE0, 0x81, 0xE0, 0xE7, 0x80, 0xFF, 0x00, + 0x7E, 0x80, 0x1F, 0xE0, 0x07, 0xE0, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char y + 0x0A, 0x60, 0x30, 0x60, 0x38, 0x60, 0x3C, 0x60, 0x3E, 0x60, 0x37, 0xE0, + 0x33, 0xE0, 0x31, 0xE0, 0x30, 0x60, 0x30, 0x20, 0x30, 0x00, 0x00, 0x00, + 0x00, //Code for char z + 0x0A, 0x00, 0x00, 0x80, 0x00, 0xC0, 0x01, 0xFC, 0x1F, 0xFE, 0x3F, 0x7F, + 0x7F, 0x07, 0x70, 0x03, 0x60, 0x03, 0x60, 0x03, 0x60, 0x00, 0x00, 0x00, + 0x00, //Code for char { + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0xFF, + 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char | + 0x0A, 0x00, 0x00, 0x03, 0x60, 0x03, 0x60, 0x03, 0x60, 0x07, 0x70, 0x7F, + 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, //Code for char } + 0x0B, 0x10, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x1C, + 0x00, 0x18, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x00, + 0x00, //Code for char ~ + 0x0B, 0x00, 0x0F, 0x80, 0x0F, 0xC0, 0x0F, 0xE0, 0x0C, 0x70, 0x0C, 0x30, + 0x0C, 0x70, 0x0C, 0xE0, 0x0C, 0xC0, 0x0F, 0x80, 0x0F, 0x00, 0x0F, 0x00, + 0x00 //Code for char +}; \ No newline at end of file
diff -r cc93245bb6d0 -r 251e4d020501 ILI9225.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ILI9225.cpp Fri Apr 27 07:33:56 2018 +0000 @@ -0,0 +1,535 @@ +#include "ILI9225.h" +#define bitRead(value, bit) (((value) >> (bit)) & 0x01) + +int font_color, x_font, y_font; + +//Global Variables +int x_text = 0, y_text = 0; +int x_base = 0; + +//Constructor when using software SPI. All output pins are configurable. +ILI9225::ILI9225(PinName rst, PinName rs, PinName cs, + PinName sdi, PinName clk, PinName led) : + _rst(rst), _rs(rs), _cs(cs), _sdi(sdi), _clk(clk), spi(sdi, NC, clk), + _led(led), _rstInOut(_rst), _rsInOut(_rs), _csInOut(_cs), _ledInOut(_led), + hwSPI(true) +{} + +void ILI9225::_orientCoordinates(uint16_t &x1, uint16_t &y1) { + switch (_orientation) { + case 0: + break; + case 1: + y1 = _maxY - y1 - 1; + _swap(x1, y1); + break; + case 2: + x1 = _maxX - x1 - 1; + y1 = _maxY - y1 - 1; + break; + case 3: + x1 = _maxX - x1 - 1; + _swap(x1, y1); + break; + } +} + +void ILI9225::_setWindow(uint16_t x0, uint16_t y0, uint16_t x1, + uint16_t y1) { + _orientCoordinates(x0, y0); + _orientCoordinates(x1, y1); + + if (x1 < x0) + _swap(x0, x1); + if (y1 < y0) + _swap(y0, y1); + + _writeRegister(ILI9225_HORIZONTAL_WINDOW_ADDR1, x1); + _writeRegister(ILI9225_HORIZONTAL_WINDOW_ADDR2, x0); + + _writeRegister(ILI9225_VERTICAL_WINDOW_ADDR1, y1); + _writeRegister(ILI9225_VERTICAL_WINDOW_ADDR2, y0); + + _writeRegister(ILI9225_RAM_ADDR_SET1, x0); + _writeRegister(ILI9225_RAM_ADDR_SET2, y0); + + _writeCommand(0x00, 0x22); +} + +void ILI9225::begin() { + //Set up pins + _rsInOut.output(); + _csInOut.output(); + _rstInOut.output(); + + if (_led) + _ledInOut.output(); + if (hwSPI) { //Using hardware SPI + spi.frequency(16000000); + spi.format(8, 0); + } + else { + DigitalInOut _clkInOut(_clk); + _clkInOut.output(); + DigitalInOut _sdiInOut(_sdi); + _sdiInOut.output(); + } + + //Turn on backlight + if (_led) + _ledInOut = 1; + + //Initialization Code + _rstInOut = 1; //Put reset pin high to release ILI9225C from reset status + wait_ms(1); + _rstInOut = 0; //Put reset pin low to reset ILI9225 + wait_ms(10); + _rstInOut = 1; //Put reset pin high to release ILI9225C from reset status + wait_ms(50); + + //Start Initial Sequence + //Set SS bit and direction output from S528 to S1 + _writeRegister(ILI9225_POWER_CTRL1, 0x0000); //Set SAP,DSTB,STB + _writeRegister(ILI9225_POWER_CTRL2, 0x0000); //Set APON,PON,AON,VCI1EN,VC + _writeRegister(ILI9225_POWER_CTRL3, 0x0000); //Set BT,DC1,DC2,DC3 + _writeRegister(ILI9225_POWER_CTRL4, 0x0000); //Set GVDD + _writeRegister(ILI9225_POWER_CTRL5, 0x0000); //Set VCOMH/VCOML voltage + wait_ms(40); + + //Power-on sequence + _writeRegister(ILI9225_POWER_CTRL2, 0x0018); //Set APON,PON,AON,VCI1EN,VC + _writeRegister(ILI9225_POWER_CTRL3, 0x6121); //Set BT,DC1,DC2,DC3 + _writeRegister(ILI9225_POWER_CTRL4, 0x006F); //Set GVDD /*007F 0088 */ + _writeRegister(ILI9225_POWER_CTRL5, 0x495F); //Set VCOMH/VCOML voltage + _writeRegister(ILI9225_POWER_CTRL1, 0x0800); //Set SAP,DSTB,STB + wait_ms(10); + _writeRegister(ILI9225_POWER_CTRL2, 0x103B); //Set APON,PON,AON,VCI1EN,VC + wait_ms(50); + + //Set disp line # & disp dir + _writeRegister(ILI9225_DRIVER_OUTPUT_CTRL, 0x011C); + _writeRegister(ILI9225_LCD_AC_DRIVING_CTRL, 0x0100); //Set 1 line inversion + _writeRegister(ILI9225_ENTRY_MODE, 0x1030); //Set GRAM write dir & BGR=1. + _writeRegister(ILI9225_DISP_CTRL1, 0x0000); //Display off + _writeRegister(ILI9225_BLANK_PERIOD_CTRL1, 0x0808); //Set back & front porch + _writeRegister(ILI9225_FRAME_CYCLE_CTRL, 0x1100); //Set clocks # per line + _writeRegister(ILI9225_INTERFACE_CTRL, 0x0000); //CPU interface + _writeRegister(ILI9225_OSC_CTRL, 0x0D01); //Set Osc /*0e01*/ + _writeRegister(ILI9225_VCI_RECYCLING, 0x0020); //Set VCI recycling + _writeRegister(ILI9225_RAM_ADDR_SET1, 0x0000); //RAM Address + _writeRegister(ILI9225_RAM_ADDR_SET2, 0x0000); //RAM Address + + //Set GRAM area + _writeRegister(ILI9225_GATE_SCAN_CTRL, 0x0000); + _writeRegister(ILI9225_VERTICAL_SCROLL_CTRL1, 0x00DB); + _writeRegister(ILI9225_VERTICAL_SCROLL_CTRL2, 0x0000); + _writeRegister(ILI9225_VERTICAL_SCROLL_CTRL3, 0x0000); + _writeRegister(ILI9225_PARTIAL_DRIVING_POS1, 0x00DB); + _writeRegister(ILI9225_PARTIAL_DRIVING_POS2, 0x0000); + _writeRegister(ILI9225_HORIZONTAL_WINDOW_ADDR1, 0x00AF); + _writeRegister(ILI9225_HORIZONTAL_WINDOW_ADDR2, 0x0000); + _writeRegister(ILI9225_VERTICAL_WINDOW_ADDR1, 0x00DB); + _writeRegister(ILI9225_VERTICAL_WINDOW_ADDR2, 0x0000); + + //Set GAMMA curve + _writeRegister(ILI9225_GAMMA_CTRL1, 0x0000); + _writeRegister(ILI9225_GAMMA_CTRL2, 0x0808); + _writeRegister(ILI9225_GAMMA_CTRL3, 0x080A); + _writeRegister(ILI9225_GAMMA_CTRL4, 0x000A); + _writeRegister(ILI9225_GAMMA_CTRL5, 0x0A08); + _writeRegister(ILI9225_GAMMA_CTRL6, 0x0808); + _writeRegister(ILI9225_GAMMA_CTRL7, 0x0000); + _writeRegister(ILI9225_GAMMA_CTRL8, 0x0A00); + _writeRegister(ILI9225_GAMMA_CTRL9, 0x0710); + _writeRegister(ILI9225_GAMMA_CTRL10, 0x0710); + + _writeRegister(ILI9225_DISP_CTRL1, 0x0012); + wait_ms(50); + _writeRegister(ILI9225_DISP_CTRL1, 0x1017); + + setBacklight(true); + setOrientation(0); + + //Initialize variables + setBackgroundColor(COLOR_BLACK); + + clear(); +} + +void ILI9225::clear() { + uint8_t old = _orientation; + setOrientation(0); + fillRectangle(0, 0, _maxX - 1, _maxY - 1, COLOR_BLACK); + setOrientation(old); + wait_ms(10); +} + +void ILI9225::fill(uint16_t color) { + fillRectangle(0, 0, _maxX - 1, _maxY - 1, color); +} + +void ILI9225::invert(bool flag) { + _writeCommand(0x00, flag ? ILI9225C_INVON : ILI9225C_INVOFF); +} + +void ILI9225::setBacklight(bool flag) { + if (_led) _ledInOut = flag ? 1 : 0; +} + +void ILI9225::setDisplay(bool flag) { + if (flag) { + _writeRegister(0x00ff, 0x0000); + _writeRegister(ILI9225_POWER_CTRL1, 0x0000); + wait_ms(50); + _writeRegister(ILI9225_DISP_CTRL1, 0x1017); + wait_ms(200); + } + else { + _writeRegister(0x00ff, 0x0000); + _writeRegister(ILI9225_DISP_CTRL1, 0x0000); + wait_ms(50); + _writeRegister(ILI9225_POWER_CTRL1, 0x0003); + wait_ms(200); + } +} + +void ILI9225::setOrientation(uint8_t orientation) { + _orientation = orientation % 4; + + switch (_orientation) { + case 0: + _maxX = ILI9225_LCD_WIDTH; + _maxY = ILI9225_LCD_HEIGHT; + break; + case 1: + _maxX = ILI9225_LCD_HEIGHT; + _maxY = ILI9225_LCD_WIDTH; + break; + case 2: + _maxX = ILI9225_LCD_WIDTH; + _maxY = ILI9225_LCD_HEIGHT; + break; + case 3: + _maxX = ILI9225_LCD_HEIGHT; + _maxY = ILI9225_LCD_WIDTH; + break; + } +} + +void ILI9225::drawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, + uint16_t y2, uint16_t color) { + drawLine(x1, y1, x1, y2, color); + drawLine(x1, y1, x2, y1, color); + drawLine(x1, y2, x2, y2, color); + drawLine(x2, y1, x2, y2, color); +} + +void ILI9225::fillRectangle(uint16_t x1, uint16_t y1, uint16_t x2, + uint16_t y2, uint16_t color) { + _setWindow(x1, y1, x2, y2); + + for (uint16_t t = (y2 - y1 + 1) * (x2 - x1 + 1); t > 0; t--) + _writeData(color >> 8, color); +} + +void ILI9225::drawLine(uint16_t x1, uint16_t y1, uint16_t x2, + uint16_t y2, uint16_t color) { + //Bresenham algorithm + int16_t steep = abs(y2 - y1) > abs(x2 - x1); + int16_t dx, dy; + + if (steep) { + _swap(x1, y1); + _swap(x2, y2); + } + + if (x1 > x2) { + _swap(x1, x2); + _swap(y1, y2); + } + + dx = x2 - x1; + dy = abs(y2 - y1); + + int16_t err = dx / 2; + int16_t ystep; + + if (y1 < y2) + ystep = 1; + else + ystep = -1; + + for (; x1 <= x2; x1++) { + if(steep) + drawPixel(y1, x1, color); + else + drawPixel(x1, y1, color); + + err -= dy; + if (err < 0) { + y1 += ystep; + err += dx; + } + } +} + +void ILI9225::drawPixel(uint16_t x1, uint16_t y1, uint16_t color) { + if ((x1 >= _maxX) || (y1 >= _maxY)) + return; + + _setWindow(x1, y1, x1 + 1, y1 + 1); + _orientCoordinates(x1, y1); + _writeData(color >> 8, color); +} + +uint16_t ILI9225::maxX() { + return _maxX; +} + +uint16_t ILI9225::maxY() { + return _maxY; +} + +uint16_t ILI9225::setColor(uint8_t red8, uint8_t green8, uint8_t blue8) { + //RGB16 = red5 green6 blue5 + return (red8 >> 3) << 11 | (green8 >> 2) << 5 | (blue8 >> 3); +} + +void ILI9225::splitColor(uint16_t rgb, uint8_t &red, uint8_t &green, + uint8_t &blue) { + //RGB16 = red5 green6 blue5 + red = (rgb & 0xF800) >> 11 << 3; + green = (rgb & 0x7E0) >> 5 << 2; + blue = (rgb & 0x1F) << 3; +} + +void ILI9225::_swap(uint16_t &a, uint16_t &b) { + uint16_t w = a; + a = b; + b = w; +} + +//Utilities +void ILI9225::_writeCommand(uint8_t HI, uint8_t LO) { + _rsInOut = 0; + _csInOut = 0; + spi.write(HI); + spi.write(LO); + _csInOut = 1; +} + +void ILI9225::_writeData(uint8_t HI, uint8_t LO) { + _rsInOut = 1; + _csInOut = 0; + spi.write(HI); + spi.write(LO); + _csInOut = 1; +} + +void ILI9225::_writeRegister(uint16_t reg, uint16_t data) { + _writeCommand(reg >> 8, reg & 255); + _writeData(data >> 8, data & 255); +} + +void ILI9225::setBackgroundColor(uint16_t color) { + _bgColor = color; +} + +void ILI9225::setFont(const uint8_t* font) { + cfont.font = font; + cfont.width = font[0]; + cfont.height = font[1]; + cfont.offset = font[2]; + cfont.numchars = font[3]; + cfont.nbrows = cfont.height / 8; + + if (cfont.height % 8) + cfont.nbrows++; //Set # of bytes used by font height in multiples of 8. +} + +void ILI9225::drawText(uint16_t x, uint16_t y, char *s, uint16_t color) { + uint16_t currx = x; + + //Print every character in string + for (uint8_t k = 0; k < strlen(s); k++) + currx += drawChar(currx, y, s[k], color) + 1; +} + +uint16_t ILI9225::drawChar(uint16_t x, uint16_t y, uint16_t ch, + uint16_t color) { + uint8_t charData, charWidth; + uint8_t h, i, j; + uint16_t charOffset; + + //Bytes used by each character + charOffset = (cfont.width * cfont.nbrows) + 1; + //Char offset (add 4 for font header) + charOffset = (charOffset * (ch - cfont.offset)) + FONT_HEADER_SIZE; + //Get font width from 1st byte + charWidth = cfont.font[charOffset]; + //Increment pointer to first character data byte + charOffset++; + + //Loop through each font "column" (+1 blank column for spacing) + for (i = 0; i <= charWidth; i++) { + h = 0; //Keep track of char height + for (j = 0; j < cfont.nbrows; j++) { //Each column byte + if (i == charWidth) + charData = (uint8_t)0x0; //Insert blank column + else + charData = cfont.font[charOffset]; + charOffset++; + + //Process every row in font character + for (uint8_t k = 0; k < 8; k++) { + if (h >= cfont.height) + break; //No need to process excess bits + if (bitRead(charData, k)) + drawPixel(x + i, y + (j * 8) + k, color); + else + drawPixel(x + i, y + (j * 8) + k, _bgColor); + h++; + } + } + } + return charWidth; +} + +//------------------------------------------------------------------------------ +//************************************* ECA 2.8 inch LCD Module **************** +//------------------------------------------------------------------------------ +//Description : Draws a beveled figure on the screen. +//Input : x0, y0 - coordinate position of the upper left center +// : x1, y1 - coordinate position of the lower right center +// : rad - defines the redius of the circle, +// : fill - fill yes or no +//------------------------------------------------------------------------------ +void ILI9225::roundRectangle(int x0, int y0, int x1, int y1, int rad, + bool fill, int color) { + signed int a, b, P; + + a = 0; //Increment by 1 + b = rad; //Decrement by 1 using P + P = 1 - rad; + if (fill) { + fillRectangle(x0, y0 + rad, x1, y1 - rad, color); + + do { + fillRectangle(x0 - a + rad, y0 - b + rad, a + x1 - rad, + y0 - b + rad, color); //8 --> 1 + fillRectangle(x0 - b + rad, y0 - a + rad, b + x1 - rad, + y0 - a + rad, color); //7 --> 2 + fillRectangle(x0 - b + rad, a + y1 - rad, b + x1 - rad, + a + y1 - rad, color); //6 --> 3 + fillRectangle(x0 - a + rad, b + y1 - rad, a + x1 - rad, + b + y1 - rad, color); //5 --> 4 + + if (P < 0) + P += 3 + 2 * a++; + else + P += 5 + 2 * (a++ - b--); + + } while (a <= b); + } //Fill + else { + fillRectangle(x0 + rad, y0, x1 - rad, y0, color); //Top + fillRectangle(x0 + rad, y1, x1 - rad, y1, color); //Bottom + fillRectangle(x0, y0 + rad, x0, y1 - rad, color); //Left + fillRectangle(x1, y0 + rad, x1, y1 - rad, color); //Right + + do { + drawPixel(a + x1 - rad, y0 - b + rad, color); // `````` Segment 1 + drawPixel(b + x1 - rad, y0 - a + rad, color); // `````` Segment 2 + + drawPixel(b + x1 - rad, a + y1 - rad, color); // `````` Segment 3 + drawPixel(a + x1 - rad, b + y1 - rad, color); // `````` Segment 4 + + drawPixel(x0 - a + rad, b + y1 - rad, color); // `````` Segment 5 + drawPixel(x0 - b + rad, a + y1 - rad, color); // `````` Segment 6 + + drawPixel(x0 - b + rad, y0 - a + rad, color); // `````` Segment 7 + drawPixel(x0 - a + rad, y0 - b + rad, color); // `````` Segment 8 + + if (P < 0) + P += 3 + 2 * a++; + else + P += 5 + 2 * (a++ - b--); + } while (a <= b); + } //No fill +} //RoundRectangle + +//------------------------------------------------------------------------------ +//************************************* ECA 2.8 inch LCD Module **************** +//------------------------------------------------------------------------------ +//Go to a specific pont for farsi font (x:0..TS_SIZE_X , y:0..TS_SIZE_Y) +//------------------------------------------------------------------------------ +void ILI9225::goToXY(int x, int y) { + if ((x >= _maxX) || (x < 0)) { + x_font = 0; + x_base = 0; + } + else { + x_font = x; + x_base = x; + } + if ((y >= _maxY) || (y < 0)) + y_font = 0; + else + y_font = y; +} + +//------------------------------------------------------------------------------ +//************************************* ECA 2.8 inch LCD Module **************** +//------------------------------------------------------------------------------ +//Make an ascii string from an unicode string +//------------------------------------------------------------------------------ + +void ILI9225::unicode2ascii(char *uni_str, char *ascii_str) { + int counter = 0; + int Uch = 0; + char chl, chh; + + while (*uni_str) { + chl = *uni_str++; + chh = *uni_str++; + + Uch = 0; + Uch = ((Uch | chh) << 8) | chl; + + if (Uch > 1574 && Uch < 1591) + *(ascii_str + counter) = (char)(Uch - 1376); + else if (Uch > 1590 && Uch < 1595) + *(ascii_str + counter) = (char)(Uch - 1375); + else if (Uch > 1600 && Uch < 1603) + *(ascii_str + counter) = (char)(Uch - 1380); + else if (Uch == 1705) + *(ascii_str + counter) = (char)(Uch - 1482); + else if (Uch == 1604) + *(ascii_str + counter) = (char)(Uch - 1379); + else if (Uch > 1604 && Uch < 1609) + *(ascii_str + counter) = (char)(Uch - 1378); + else if (Uch == 1740) + *(ascii_str + counter) = (char)(Uch - 1503); + else if (Uch == 1574) + *(ascii_str + counter) = (char)(Uch - 1381); + else if (Uch == 1662) + *(ascii_str + counter) = (char)(Uch - 1533); + else if (Uch == 1670) + *(ascii_str + counter) = (char)(Uch - 1529); + else if (Uch == 1688) + *(ascii_str + counter) = (char)(Uch - 1546); + else if (Uch == 1711) + *(ascii_str + counter) = (char)(Uch - 1567); + else if (Uch == 1570) + *(ascii_str + counter) = (char)(Uch - 1376); + else if (Uch > 1631 && Uch < 1642) + *(ascii_str + counter) = (char)(Uch - 1584); + else if (Uch == 65536) + *(ascii_str + counter) = NULL; + else + *(ascii_str + counter) = (char)Uch; + + counter++; + } + *(ascii_str + counter) = NULL; +} \ No newline at end of file
diff -r cc93245bb6d0 -r 251e4d020501 ILI9225.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ILI9225.h Fri Apr 27 07:33:56 2018 +0000 @@ -0,0 +1,256 @@ +#include "mbed.h" +#include "SPI.h" + +//ILI9225 Aspect ratio +#define ILI9225_LCD_WIDTH 176 +#define ILI9225_LCD_HEIGHT 220 + +//ILI9225 Registers +#define ILI9225_DRIVER_OUTPUT_CTRL (0x01u) //Driver Output Control +#define ILI9225_LCD_AC_DRIVING_CTRL (0x02u) //LCD AC Driving Control +#define ILI9225_ENTRY_MODE (0x03u) //Entry Mode +#define ILI9225_DISP_CTRL1 (0x07u) //Display Control 1 +#define ILI9225_BLANK_PERIOD_CTRL1 (0x08u) //Blank Period Control +#define ILI9225_FRAME_CYCLE_CTRL (0x0Bu) //Frame Cycle Control +#define ILI9225_INTERFACE_CTRL (0x0Cu) //Interface Control +#define ILI9225_OSC_CTRL (0x0Fu) //Osc Control +#define ILI9225_POWER_CTRL1 (0x10u) //Power Control 1 +#define ILI9225_POWER_CTRL2 (0x11u) //Power Control 2 +#define ILI9225_POWER_CTRL3 (0x12u) //Power Control 3 +#define ILI9225_POWER_CTRL4 (0x13u) //Power Control 4 +#define ILI9225_POWER_CTRL5 (0x14u) //Power Control 5 +#define ILI9225_VCI_RECYCLING (0x15u) //VCI Recycling +#define ILI9225_RAM_ADDR_SET1 (0x20u) //Horizontal GRAM Address Set +#define ILI9225_RAM_ADDR_SET2 (0x21u) //Vertical GRAM Address Set +#define ILI9225_GRAM_DATA_REG (0x22u) //GRAM Data Register +#define ILI9225_GATE_SCAN_CTRL (0x30u) //Gate Scan Control Register +#define ILI9225_VERTICAL_SCROLL_CTRL1 (0x31u) //Vertical Scroll Cont 1 Reg +#define ILI9225_VERTICAL_SCROLL_CTRL2 (0x32u) //Vertical Scroll Cont 2 Reg +#define ILI9225_VERTICAL_SCROLL_CTRL3 (0x33u) //Vertical Scroll Cont 3 Reg +#define ILI9225_PARTIAL_DRIVING_POS1 (0x34u) //Partial Driving Pos 1 Reg +#define ILI9225_PARTIAL_DRIVING_POS2 (0x35u) //Partial Driving Pos 2 Reg +#define ILI9225_HORIZONTAL_WINDOW_ADDR1 (0x36u) //Horizontal Address Start Pos +#define ILI9225_HORIZONTAL_WINDOW_ADDR2 (0x37u) //Horizontal Address End Pos +#define ILI9225_VERTICAL_WINDOW_ADDR1 (0x38u) //Vertical Address Start Pos +#define ILI9225_VERTICAL_WINDOW_ADDR2 (0x39u) //Vertical Address End Pos +#define ILI9225_GAMMA_CTRL1 (0x50u) //Gamma Control 1 +#define ILI9225_GAMMA_CTRL2 (0x51u) //Gamma Control 2 +#define ILI9225_GAMMA_CTRL3 (0x52u) //Gamma Control 3 +#define ILI9225_GAMMA_CTRL4 (0x53u) //Gamma Control 4 +#define ILI9225_GAMMA_CTRL5 (0x54u) //Gamma Control 5 +#define ILI9225_GAMMA_CTRL6 (0x55u) //Gamma Control 6 +#define ILI9225_GAMMA_CTRL7 (0x56u) //Gamma Control 7 +#define ILI9225_GAMMA_CTRL8 (0x57u) //Gamma Control 8 +#define ILI9225_GAMMA_CTRL9 (0x58u) //Gamma Control 9 +#define ILI9225_GAMMA_CTRL10 (0x59u) //Gamma Control 10 + +#define ILI9225C_INVOFF 0x20 +#define ILI9225C_INVON 0x21 + +//RGB 24-bits color table definition (RGB888). +#define RGB888_RGB565(color) ((((color) >> 19) & 0x1f) << 11) | \ + ((((color) >> 10) & 0x3f) << 5) | (((color) >> 3) & 0x1f) + +#define COLOR_BLACK RGB888_RGB565(0x000000u) +#define COLOR_WHITE RGB888_RGB565(0xFFFFFFu) +#define COLOR_BLUE RGB888_RGB565(0x0000FFu) +#define COLOR_GREEN RGB888_RGB565(0x00FF00u) +#define COLOR_RED RGB888_RGB565(0xFF0000u) +#define COLOR_NAVY RGB888_RGB565(0x000080u) +#define COLOR_DARKBLUE RGB888_RGB565(0x00008Bu) +#define COLOR_DARKGREEN RGB888_RGB565(0x006400u) +#define COLOR_DARKCYAN RGB888_RGB565(0x008B8Bu) +#define COLOR_CYAN RGB888_RGB565(0x00FFFFu) +#define COLOR_TURQUOISE RGB888_RGB565(0x40E0D0u) +#define COLOR_INDIGO RGB888_RGB565(0x4B0082u) +#define COLOR_DARKRED RGB888_RGB565(0x800000u) +#define COLOR_OLIVE RGB888_RGB565(0x808000u) +#define COLOR_GRAY RGB888_RGB565(0x808080u) +#define COLOR_SKYBLUE RGB888_RGB565(0x87CEEBu) +#define COLOR_BLUEVIOLET RGB888_RGB565(0x8A2BE2u) +#define COLOR_LIGHTGREEN RGB888_RGB565(0x90EE90u) +#define COLOR_DARKVIOLET RGB888_RGB565(0x9400D3u) +#define COLOR_YELLOWGREEN RGB888_RGB565(0x9ACD32u) +#define COLOR_BROWN RGB888_RGB565(0xA52A2Au) +#define COLOR_DARKGRAY RGB888_RGB565(0xA9A9A9u) +#define COLOR_SIENNA RGB888_RGB565(0xA0522Du) +#define COLOR_LIGHTBLUE RGB888_RGB565(0xADD8E6u) +#define COLOR_GREENYELLOW RGB888_RGB565(0xADFF2Fu) +#define COLOR_SILVER RGB888_RGB565(0xC0C0C0u) +#define COLOR_LIGHTGREY RGB888_RGB565(0xD3D3D3u) +#define COLOR_LIGHTCYAN RGB888_RGB565(0xE0FFFFu) +#define COLOR_VIOLET RGB888_RGB565(0xEE82EEu) +#define COLOR_AZUR RGB888_RGB565(0xF0FFFFu) +#define COLOR_BEIGE RGB888_RGB565(0xF5F5DCu) +#define COLOR_MAGENTA RGB888_RGB565(0xFF00FFu) +#define COLOR_TOMATO RGB888_RGB565(0xFF6347u) +#define COLOR_GOLD RGB888_RGB565(0xFFD700u) +#define COLOR_ORANGE RGB888_RGB565(0xFFA500u) +#define COLOR_SNOW RGB888_RGB565(0xFFFAFAu) +#define COLOR_YELLOW RGB888_RGB565(0xFFFF00u) + +//Font definitions +#define FONT_HEADER_SIZE 4 //1: pixel width of 1 font char, 2: pixel height +#define readFontByte(x) pgm_read_byte(&cfont.font[x]) + +extern const uint8_t Terminal12x16[]; + +struct _currentFont { + const uint8_t* font; + uint8_t width; + uint8_t height; + uint8_t offset; + uint8_t numchars; + uint8_t nbrows; +}; + +//Main and core class +class ILI9225 { + public: + ILI9225(PinName RST, PinName RS, PinName CS, PinName SDI, + PinName CLK, PinName LED); + + //Initialization + void begin(void); + + //Clear the screen + void clear(void); + + //Fill the screen with color: + void fill(uint16_t color); + + //Invert screen + //@param flag true to invert, false for normal screen + void invert(bool flag); + + //Switch backlight on or off + //@param flag true=on, false=off + void setBacklight(bool flag); + + //Switch display on or off + //@param flag true=on, false=off + void setDisplay(bool flag); + + //Set orientation + //@param orientation orientation, 0=portrait, 1=right rotated landscape, + //2=reverse portrait, 3=left rotated landscape + void setOrientation(uint8_t orientation); + + //Font size, x-axis + //@return horizontal size of current font, in pixels + uint8_t fontX(void); + + //Font size, y-axis + //@return vertical size of current font, in pixels + uint8_t fontY(void); + + //Screen size, x-axis + //@return horizontal size of the screen, in pixels + //@note 240 means 240 pixels and thus 0..239 coordinates (decimal) + uint16_t maxX(void); + + //Screen size, y-axis + //@return vertical size of the screen, in pixels + //@note 220 means 220 pixels and thus 0..219 coordinates (decimal) + uint16_t maxY(void); + + //Set background color + //@param color background color, default=black + void setBackgroundColor(uint16_t color = COLOR_BLACK); + + //Draw line, rectangle coordinates + //@param x1 top left coordinate, x-axis + //@param y1 top left coordinate, y-axis + //@param x2 bottom right coordinate, x-axis + //@param y2 bottom right coordinate, y-axis + //@param color 16-bit color + void drawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, + uint16_t color); + + //Draw rectangle, rectangle coordinates + //@param x1 top left coordinate, x-axis + //@param y1 top left coordinate, y-axis + //@param x2 bottom right coordinate, x-axis + //@param y2 bottom right coordinate, y-axis + //@param color 16-bit color + void drawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, + uint16_t color); + + //Draw solid rectangle, rectangle coordinates + //@param x1 top left coordinate, x-axis + //@param y1 top left coordinate, y-axis + //@param x2 bottom right coordinate, x-axis + //@param y2 bottom right coordinate, y-axis + //@param color 16-bit color + void fillRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, + uint16_t color); + + //Draw pixel + //@param x1 point coordinate, x-axis + //@param y1 point coordinate, y-axis + //@param color 16-bit color + void drawPixel(uint16_t x1, uint16_t y1, uint16_t color); + + //Draw ASCII Text (pixel coordinates) + //@param x point coordinate, x-axis + //@param y point coordinate, y-axis + //@param s text string + //@param color 16-bit color, default=white + void drawText(uint16_t x, uint16_t y, char *s, + uint16_t color = COLOR_WHITE); + + //Calculate 16-bit color from 8-bit Red-Green-Blue components + //@param red red component, 0x00..0xff + //@param green green component, 0x00..0xff + //@param blue blue component, 0x00..0xff + //@return 16-bit color + uint16_t setColor(uint8_t red, uint8_t green, uint8_t blue); + + //Calculate 8-bit Red-Green-Blue components from 16-bit color + //@param rgb 16-bit color + //@param red red component, 0x00..0xff + //@param green green component, 0x00..0xff + //@param blue blue component, 0x00..0xff + void splitColor(uint16_t rgb, uint8_t &red, uint8_t &green, + uint8_t &blue); + + //Set current font + //@param font Font name + void setFont(const uint8_t* font); + + //Draw single character (pixel coordinates) + //@param x point coordinate, x-axis + //@param y point coordinate, y-axis + //@param ch ASCII character + //@param color 16-bit color, default=white + uint16_t drawChar(uint16_t x, uint16_t y, uint16_t ch, + uint16_t color = COLOR_WHITE); + + void goToXY(int x, int y); + void unicode2ascii(char *uni_str, char *ascii_str); + void roundRectangle(int x0, int y0, int x1, int y1, int rad, bool fill, + int color); + + private: + SPI spi; + + void _swap(uint16_t &a, uint16_t &b), + _setWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1), + _orientCoordinates(uint16_t &x1, uint16_t &y1), + _writeRegister(uint16_t reg, uint16_t data), + _writeData(uint8_t HI, uint8_t LO), + _writeCommand(uint8_t HI, uint8_t LO); + + uint16_t _maxX, _maxY, _bgColor; + + PinName _rst, _rs, _cs, _sdi, _clk, _led; + DigitalInOut _rsInOut; + DigitalInOut _csInOut; + DigitalInOut _rstInOut; + DigitalInOut _ledInOut; + uint8_t _orientation; + + bool hwSPI; + + _currentFont cfont; +}; \ No newline at end of file
diff -r cc93245bb6d0 -r 251e4d020501 States.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/States.h Fri Apr 27 07:33:56 2018 +0000 @@ -0,0 +1,193 @@ +#include "Fonts.h" + +//STATE 0 +//GLCD Displays the start screen - encouraging the player to start the game +//by displaying the message "PRESS SELECT TO START". +// +//Player must press the SELECT button to trigger the next STATE. +void greetingScreen() { + tft.clear(); + tft.setFont(Terminal12x16); + tft.drawText(60, 40, "PRESS", COLOR_RED); + tft.drawText(54, 65, "SELECT", COLOR_RED); + tft.drawText(77, 90, "TO", COLOR_RED); + tft.drawText(60, 115, "START", COLOR_RED); + + while(1) { + if(getPlayerInput(wirelessInput_Freq) == 6) //SELECT -> 6 + return; + } +} + +//STATE 1 +//GLCD encourages player to take a picture of something by displaying the +//message "SELECT TO TAKE PICTURE". +// +//Player must press the SELECT button to take a picture and trigger the next +//STATE. +void takePicture() { + tft.clear(); + tft.setFont(Terminal12x16); + tft.drawText(54, 40, "SELECT", COLOR_RED); + tft.drawText(77, 65, "TO", COLOR_RED); + tft.drawText(65, 90, "TAKE", COLOR_RED); + tft.drawText(50, 115, "PICTURE", COLOR_RED); + + while(1) { + if(getPlayerInput(wirelessInput_Freq) == 6) { //SELECT -> 6 + for(int index = 0; index < 19200; index++) + handlePixel(index, getNextPixel()); + return; + } + } +} + +//STATE 2 +//GLCD will display the picture taken in STATE 1 @ the bottom of the screen. +// +//Player input is ignored during this STATE. +void previewPicture() { + tft.clear(); + updatePuzzle(); +} + +//STATE 3 +//GLCD will display the message "SELECT > ACCEPT" atop "OR" atop +//"CANCEL > RETAKE" at the top of the screen. +// +//Player may press SELECT to continue (STATE 4) w| picture or CANCEL to retake +//the picture (STATE 1). +bool confirmPicture() { + tft.fillRectangle(0, 0, 175, 91, COLOR_BLACK); + tft.setFont(Terminal12x16); + tft.drawText(4, 8, "SELECT > ACCEPT", COLOR_RED); + tft.drawText(77, 33, "OR", COLOR_RED); + tft.drawText(4, 58, "CANCEL > RETAKE", COLOR_RED); + //printElementsInPicture(); + + while(1) { + if(getPlayerInput(wirelessInput_Freq) == 6) //SELECT -> 6 + return true; //Confirm the picture by returning true + else if(getPlayerInput(wirelessInput_Freq) == 7) //CANCEL -> 7 + return false; //Retake the picture by returning false + } +} + +//STATE 4 +//GLCD will display the message "LOADING" and keeps it there until the +//LPC1769 has finished shuffling the pieces in the background. When it is done, +//it will black out the screen, populate the 4x4 grid with the puzzle pieces, +//and start the player off at index 0 of the puzzle grid. +//Remark: 2 out of 16 of the puzzle pieces will be missing. There were 3 reasons +//that led us to this design choice: +//1) We had to remove, at the very least, 1 puzzle piece to make a classic +//sliding puzzle game. +//2) We desired that the sizeof(picture) << 32kB but we still wanted a colored +//image (i.e., 16 bit aray element) so we needed to get rid of 2 pieces to reach +//our goal. +//3) If puzzle piece positions for a classic sliding puzzle game are generated +//completely randomly then they are only solvable 50% of the time based off +//whether there is an even amount of permutations. There are applicable methods +//for only generating solvable puzzles but another (and easier) solution is to +//just remove a second puzzle piece. +// +//The player's button presses are ignored during this time. +void shufflePuzzle() { + tft.clear(); + tft.setFont(Terminal12x16); + tft.drawText(47, 40, "LOADING", COLOR_RED); + + shuffleGridIndices(); + + tft.clear(); + updatePuzzle(); + cursorIndex = 0; + highlightGridIndex(cursorIndex, false); +} + +//STATE 5 +//We wait for the player to press SELECT. If the player presses SELECT we must +//verify 2 characteristics about the target piece before we may trigger STATE 6: +//1) Target puzzle piece is NOT one of the 2 missing puzzle pieces. +//2) Target puzzle piece is NOT locked on all 4 sides. +// +//At this point, the player is able to use the UP, DOWN, LEFT, and RIGHT buttons +//to move around their cursor until they find a piece that they want to swap +//for another piece. While their cursor is hovering over the target piece, they +//would press SELECT to "grab it". The cursor is green in this state. +uint8_t selectionMode() { + highlightGridIndex(cursorIndex, false); + //printElementsInPicture(); + while(1) { + if(getPlayerInput(wirelessInput_Freq) == 6) { //SELECT -> 6 + if(selectionMode_indexVerified(cursorIndex)) //& index verified + return cursorIndex; + } + else if(getPlayerInput(wirelessInput_Freq) == 2 //UP -> 2 + && cursorIndex - 4 > -1) + highlightGridIndex(cursorIndex - 4, false); + else if(getPlayerInput(wirelessInput_Freq) == 3 //DOWN -> 3 + && cursorIndex + 4 < 16) + highlightGridIndex(cursorIndex + 4, false); + else if(getPlayerInput(wirelessInput_Freq) == 4 //LEFT -> 4 + && ((cursorIndex%4) - 1) > -1) + highlightGridIndex(cursorIndex - 1, false); + else if(getPlayerInput(wirelessInput_Freq) == 5 //RIGHT -> 5 + && ((cursorIndex%4) + 1) < 4) + highlightGridIndex(cursorIndex + 1, false); + } +} + +//STATE 6 +//If player presses UP, DOWN, LEFT, or RIGHT, we verify that target index is an +//empty space before making the move and triggering STATE 5. A piece may only be +//moved 1 index position and it may only be moved to 1 of the 2 missing puzzle +//piece indices. +// +//Only UP, DOWN, LEFT, RIGHT, and CANCEL are monitored during this state. +//Pressing CANCEL, at any time, would restore us back to STATE 5 and no swapping +//would occur. The cursor is red in this state. +void selectedMode(uint8_t selectedIndex) { + highlightGridIndex(selectedIndex, true); + + while(1) { + if(getPlayerInput(wirelessInput_Freq) == 7) //CANCEL -> 7 + return; + if(getPlayerInput(wirelessInput_Freq) == 2 //UP -> 2 + && selectedIndex - 4 > -1) { + if(puzzState[selectedIndex - 4] > 13) { //Empty space above? + swap(&puzzState[selectedIndex], &puzzState[selectedIndex - 4]); + updatePuzzle(); + cursorIndex = selectedIndex - 4; + return; + } + } + if(getPlayerInput(wirelessInput_Freq) == 3 //DOWN -> 3 + && selectedIndex + 4 < 16) { + if(puzzState[selectedIndex + 4] > 13) { //Empty space below? + swap(&puzzState[selectedIndex], &puzzState[selectedIndex + 4]); + updatePuzzle(); + cursorIndex = selectedIndex + 4; + return; + } + } + if(getPlayerInput(wirelessInput_Freq) == 4 //LEFT -> 4 + && ((selectedIndex%4) - 1) > -1) { + if(puzzState[selectedIndex - 1] > 13) { //Empty space to the left? + swap(&puzzState[selectedIndex], &puzzState[selectedIndex - 1]); + updatePuzzle(); + cursorIndex = selectedIndex - 1; + return; + } + } + if(getPlayerInput(wirelessInput_Freq) == 5 //RIGHT -> 5 + && ((selectedIndex%4) + 1) < 4) { + if(puzzState[selectedIndex + 1] > 13) { //Empty space to the right? + swap(&puzzState[selectedIndex], &puzzState[selectedIndex + 1]); + updatePuzzle(); + cursorIndex = selectedIndex + 1; + return; + } + } + } +} \ No newline at end of file
diff -r cc93245bb6d0 -r 251e4d020501 TFT_22_ILI9225.cpp --- a/TFT_22_ILI9225.cpp Tue Sep 01 12:16:09 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1215 +0,0 @@ -/* -**************** ****************** - -Ported to mbed platform -Added Persian Support - -by Arman Safikhani 31 - 08-2015 - -* *************** ****************** -*/ - - - - -#include "TFT_22_ILI9225.h" -#define bitRead(value, bit) (((value) >> (bit)) & 0x01) - -int font_color, x_font, y_font; -char highlight, fa_num; -int effect = 0, italic = 0; -unsigned int highlight_color; -/* Global Variables */ -int x_text = 0, y_text = 0; -int x_base = 0; - -// Constructor when using software SPI. All output pins are configurable. -TFT_22_ILI9225::TFT_22_ILI9225(PinName rst, PinName rs, PinName cs, PinName sdi, PinName clk, PinName led) : - _rst(rst), _rs(rs), _cs(cs), _sdi(sdi), _clk(clk), spi(sdi, NC, clk), _led(led), - _rstInOut(_rst), _rsInOut(_rs), _csInOut(_cs), _ledInOut(_led), - hwSPI(true) -{ -} - -// Constructor when using hardware SPI. Faster, but must use SPI pins -// specific to each board type (e.g. 11,13 for Uno, 51,52 for Mega, etc.) -//TFT_22_ILI9225::TFT_22_ILI9225(PinName rst, PinName rs, PinName cs, PinName led) : -// _rst(rst), _rs(rs), _cs(cs), _sdi(NC), _clk(NC), _led(led), -// _rstInOut(_rst), _rsInOut(_rs), _csInOut(_cs), _ledInOut(_led), -// hwSPI(true), spi(SPI_MOSI, NC, SPI_SCK) -//{ -//} - - - - -void TFT_22_ILI9225::_orientCoordinates(uint16_t &x1, uint16_t &y1) { - - switch (_orientation) { - case 0: // ok - break; - case 1: // ok - y1 = _maxY - y1 - 1; - _swap(x1, y1); - break; - case 2: // ok - x1 = _maxX - x1 - 1; - y1 = _maxY - y1 - 1; - break; - case 3: // ok - x1 = _maxX - x1 - 1; - _swap(x1, y1); - break; - } -} - - -void TFT_22_ILI9225::_setWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { - _orientCoordinates(x0, y0); - _orientCoordinates(x1, y1); - - if (x1 < x0) _swap(x0, x1); - if (y1 < y0) _swap(y0, y1); - - _writeRegister(ILI9225_HORIZONTAL_WINDOW_ADDR1, x1); - _writeRegister(ILI9225_HORIZONTAL_WINDOW_ADDR2, x0); - - _writeRegister(ILI9225_VERTICAL_WINDOW_ADDR1, y1); - _writeRegister(ILI9225_VERTICAL_WINDOW_ADDR2, y0); - - _writeRegister(ILI9225_RAM_ADDR_SET1, x0); - _writeRegister(ILI9225_RAM_ADDR_SET2, y0); - - _writeCommand(0x00, 0x22); -} - - -void TFT_22_ILI9225::begin() { - - // Set up pins - - - _rsInOut.output(); - _csInOut.output(); - _rstInOut.output(); - - if (_led) _ledInOut.output(); - - if (hwSPI) { // Using hardware SPI - spi.frequency(16000000); - spi.format(8, 0); - - } - else { - DigitalInOut _clkInOut(_clk); - _clkInOut.output(); - DigitalInOut _sdiInOut(_sdi); - _sdiInOut.output(); - } - - // Turn on backlight - if (_led) _ledInOut = 1; - - // Initialization Code - _rstInOut = 1; // Pull the reset pin high to release the ILI9225C from the reset status - wait_ms(1); - _rstInOut = 0;// Pull the reset pin low to reset ILI9225 - wait_ms(10); - _rstInOut = 1;// Pull the reset pin high to release the ILI9225C from the reset status - wait_ms(50); - - /* Start Initial Sequence */ - /* Set SS bit and direction output from S528 to S1 */ - _writeRegister(ILI9225_POWER_CTRL1, 0x0000); // Set SAP,DSTB,STB - _writeRegister(ILI9225_POWER_CTRL2, 0x0000); // Set APON,PON,AON,VCI1EN,VC - _writeRegister(ILI9225_POWER_CTRL3, 0x0000); // Set BT,DC1,DC2,DC3 - _writeRegister(ILI9225_POWER_CTRL4, 0x0000); // Set GVDD - _writeRegister(ILI9225_POWER_CTRL5, 0x0000); // Set VCOMH/VCOML voltage - wait_ms(40); - - // Power-on sequence - _writeRegister(ILI9225_POWER_CTRL2, 0x0018); // Set APON,PON,AON,VCI1EN,VC - _writeRegister(ILI9225_POWER_CTRL3, 0x6121); // Set BT,DC1,DC2,DC3 - _writeRegister(ILI9225_POWER_CTRL4, 0x006F); // Set GVDD /*007F 0088 */ - _writeRegister(ILI9225_POWER_CTRL5, 0x495F); // Set VCOMH/VCOML voltage - _writeRegister(ILI9225_POWER_CTRL1, 0x0800); // Set SAP,DSTB,STB - wait_ms(10); - _writeRegister(ILI9225_POWER_CTRL2, 0x103B); // Set APON,PON,AON,VCI1EN,VC - wait_ms(50); - - _writeRegister(ILI9225_DRIVER_OUTPUT_CTRL, 0x011C); // set the display line number and display direction - _writeRegister(ILI9225_LCD_AC_DRIVING_CTRL, 0x0100); // set 1 line inversion - _writeRegister(ILI9225_ENTRY_MODE, 0x1030); // set GRAM write direction and BGR=1. - _writeRegister(ILI9225_DISP_CTRL1, 0x0000); // Display off - _writeRegister(ILI9225_BLANK_PERIOD_CTRL1, 0x0808); // set the back porch and front porch - _writeRegister(ILI9225_FRAME_CYCLE_CTRL, 0x1100); // set the clocks number per line - _writeRegister(ILI9225_INTERFACE_CTRL, 0x0000); // CPU interface - _writeRegister(ILI9225_OSC_CTRL, 0x0D01); // Set Osc /*0e01*/ - _writeRegister(ILI9225_VCI_RECYCLING, 0x0020); // Set VCI recycling - _writeRegister(ILI9225_RAM_ADDR_SET1, 0x0000); // RAM Address - _writeRegister(ILI9225_RAM_ADDR_SET2, 0x0000); // RAM Address - - /* Set GRAM area */ - _writeRegister(ILI9225_GATE_SCAN_CTRL, 0x0000); - _writeRegister(ILI9225_VERTICAL_SCROLL_CTRL1, 0x00DB); - _writeRegister(ILI9225_VERTICAL_SCROLL_CTRL2, 0x0000); - _writeRegister(ILI9225_VERTICAL_SCROLL_CTRL3, 0x0000); - _writeRegister(ILI9225_PARTIAL_DRIVING_POS1, 0x00DB); - _writeRegister(ILI9225_PARTIAL_DRIVING_POS2, 0x0000); - _writeRegister(ILI9225_HORIZONTAL_WINDOW_ADDR1, 0x00AF); - _writeRegister(ILI9225_HORIZONTAL_WINDOW_ADDR2, 0x0000); - _writeRegister(ILI9225_VERTICAL_WINDOW_ADDR1, 0x00DB); - _writeRegister(ILI9225_VERTICAL_WINDOW_ADDR2, 0x0000); - - /* Set GAMMA curve */ - _writeRegister(ILI9225_GAMMA_CTRL1, 0x0000); - _writeRegister(ILI9225_GAMMA_CTRL2, 0x0808); - _writeRegister(ILI9225_GAMMA_CTRL3, 0x080A); - _writeRegister(ILI9225_GAMMA_CTRL4, 0x000A); - _writeRegister(ILI9225_GAMMA_CTRL5, 0x0A08); - _writeRegister(ILI9225_GAMMA_CTRL6, 0x0808); - _writeRegister(ILI9225_GAMMA_CTRL7, 0x0000); - _writeRegister(ILI9225_GAMMA_CTRL8, 0x0A00); - _writeRegister(ILI9225_GAMMA_CTRL9, 0x0710); - _writeRegister(ILI9225_GAMMA_CTRL10, 0x0710); - - _writeRegister(ILI9225_DISP_CTRL1, 0x0012); - wait_ms(50); - _writeRegister(ILI9225_DISP_CTRL1, 0x1017); - - setBacklight(true); - setOrientation(0); - - // Initialize variables - setBackgroundColor(COLOR_BLACK); - - clear(); -} - - -void TFT_22_ILI9225::clear() { - uint8_t old = _orientation; - setOrientation(0); - fillRectangle(0, 0, _maxX - 1, _maxY - 1, COLOR_BLACK); - setOrientation(old); - wait_ms(10); -} - -void TFT_22_ILI9225::fill(uint16_t color) -{ - fillRectangle(0, 0, _maxX - 1, _maxY - 1, color); -} - - -void TFT_22_ILI9225::invert(bool flag) { - _writeCommand(0x00, flag ? ILI9225C_INVON : ILI9225C_INVOFF); -} - - -void TFT_22_ILI9225::setBacklight(bool flag) { - if (_led) _ledInOut = flag ? 1 : 0; -} - - -void TFT_22_ILI9225::setDisplay(bool flag) { - if (flag) { - _writeRegister(0x00ff, 0x0000); - _writeRegister(ILI9225_POWER_CTRL1, 0x0000); - wait_ms(50); - _writeRegister(ILI9225_DISP_CTRL1, 0x1017); - wait_ms(200); - } - else { - _writeRegister(0x00ff, 0x0000); - _writeRegister(ILI9225_DISP_CTRL1, 0x0000); - wait_ms(50); - _writeRegister(ILI9225_POWER_CTRL1, 0x0003); - wait_ms(200); - } -} - - -void TFT_22_ILI9225::setOrientation(uint8_t orientation) { - - _orientation = orientation % 4; - - switch (_orientation) { - case 0: - _maxX = ILI9225_LCD_WIDTH; - _maxY = ILI9225_LCD_HEIGHT; - break; - case 1: - _maxX = ILI9225_LCD_HEIGHT; - _maxY = ILI9225_LCD_WIDTH; - break; - case 2: - _maxX = ILI9225_LCD_WIDTH; - _maxY = ILI9225_LCD_HEIGHT; - break; - case 3: - _maxX = ILI9225_LCD_HEIGHT; - _maxY = ILI9225_LCD_WIDTH; - break; - } -} - - -uint8_t TFT_22_ILI9225::getOrientation() { - return _orientation; -} - - -void TFT_22_ILI9225::drawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color) { - drawLine(x1, y1, x1, y2, color); - drawLine(x1, y1, x2, y1, color); - drawLine(x1, y2, x2, y2, color); - drawLine(x2, y1, x2, y2, color); -} - - -void TFT_22_ILI9225::fillRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color) { - - _setWindow(x1, y1, x2, y2); - - for (uint16_t t = (y2 - y1 + 1) * (x2 - x1 + 1); t > 0; t--) - _writeData(color >> 8, color); -} - - -void TFT_22_ILI9225::drawCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color) { - - int16_t f = 1 - r; - int16_t ddF_x = 1; - int16_t ddF_y = -2 * r; - int16_t x = 0; - int16_t y = r; - - drawPixel(x0, y0 + r, color); - drawPixel(x0, y0 - r, color); - drawPixel(x0 + r, y0, color); - drawPixel(x0 - r, y0, color); - - while (x < y) { - if (f >= 0) { - y--; - ddF_y += 2; - f += ddF_y; - } - x++; - ddF_x += 2; - f += ddF_x; - - drawPixel(x0 + x, y0 + y, color); - drawPixel(x0 - x, y0 + y, color); - drawPixel(x0 + x, y0 - y, color); - drawPixel(x0 - x, y0 - y, color); - drawPixel(x0 + y, y0 + x, color); - drawPixel(x0 - y, y0 + x, color); - drawPixel(x0 + y, y0 - x, color); - drawPixel(x0 - y, y0 - x, color); - } -} - - -void TFT_22_ILI9225::fillCircle(uint8_t x0, uint8_t y0, uint8_t radius, uint16_t color) { - - int16_t f = 1 - radius; - int16_t ddF_x = 1; - int16_t ddF_y = -2 * radius; - int16_t x = 0; - int16_t y = radius; - - while (x < y) { - if (f >= 0) { - y--; - ddF_y += 2; - f += ddF_y; - } - x++; - ddF_x += 2; - f += ddF_x; - - drawLine(x0 + x, y0 + y, x0 - x, y0 + y, color); // bottom - drawLine(x0 + x, y0 - y, x0 - x, y0 - y, color); // top - drawLine(x0 + y, y0 - x, x0 + y, y0 + x, color); // right - drawLine(x0 - y, y0 - x, x0 - y, y0 + x, color); // left - } - fillRectangle(x0 - x, y0 - y, x0 + x, y0 + y, color); -} - - -void TFT_22_ILI9225::drawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color) { - - // Classic Bresenham algorithm - int16_t steep = abs(y2 - y1) > abs(x2 - x1); - int16_t dx, dy; - - if (steep) { - _swap(x1, y1); - _swap(x2, y2); - } - - if (x1 > x2) { - _swap(x1, x2); - _swap(y1, y2); - } - - dx = x2 - x1; - dy = abs(y2 - y1); - - int16_t err = dx / 2; - int16_t ystep; - - if (y1 < y2) ystep = 1; - else ystep = -1; - - - for (; x1 <= x2; x1++) { - if (steep) drawPixel(y1, x1, color); - else drawPixel(x1, y1, color); - - err -= dy; - if (err < 0) { - y1 += ystep; - err += dx; - } - } -} - - -void TFT_22_ILI9225::drawPixel(uint16_t x1, uint16_t y1, uint16_t color) { - - if ((x1 >= _maxX) || (y1 >= _maxY)) return; - - _setWindow(x1, y1, x1 + 1, y1 + 1); - _orientCoordinates(x1, y1); - _writeData(color >> 8, color); -} - - -uint16_t TFT_22_ILI9225::maxX() { - return _maxX; -} - - -uint16_t TFT_22_ILI9225::maxY() { - return _maxY; -} - - -uint16_t TFT_22_ILI9225::setColor(uint8_t red8, uint8_t green8, uint8_t blue8) { - // rgb16 = red5 green6 blue5 - return (red8 >> 3) << 11 | (green8 >> 2) << 5 | (blue8 >> 3); -} - - -void TFT_22_ILI9225::splitColor(uint16_t rgb, uint8_t &red, uint8_t &green, uint8_t &blue) { - // rgb16 = red5 green6 blue5 - - red = (rgb & 0xF800) >> 11 << 3; - green = (rgb & 0x7E0) >> 5 << 2; - blue = (rgb & 0x1F) << 3; -} - - -void TFT_22_ILI9225::_swap(uint16_t &a, uint16_t &b) { - uint16_t w = a; - a = b; - b = w; -} - -// Utilities -void TFT_22_ILI9225::_writeCommand(uint8_t HI, uint8_t LO) { - _rsInOut = 0; - _csInOut = 0; - spi.write(HI); - spi.write(LO); - _csInOut = 1; -} - - -void TFT_22_ILI9225::_writeData(uint8_t HI, uint8_t LO) { - _rsInOut = 1; - _csInOut = 0; - spi.write(HI); - spi.write(LO); - _csInOut = 1; -} - - -void TFT_22_ILI9225::_writeRegister(uint16_t reg, uint16_t data) { - _writeCommand(reg >> 8, reg & 255); - _writeData(data >> 8, data & 255); -} - - -void TFT_22_ILI9225::drawTriangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t x3, uint16_t y3, uint16_t color) { - drawLine(x1, y1, x2, y2, color); - drawLine(x2, y2, x3, y3, color); - drawLine(x3, y3, x1, y1, color); -} - - -void TFT_22_ILI9225::fillTriangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t x3, uint16_t y3, uint16_t color) { - - uint16_t a, b, y, last; - - // Sort coordinates by Y order (y3 >= y2 >= y1) - if (y1 > y2) { - _swap(y1, y2); _swap(x1, x2); - } - if (y2 > y3) { - _swap(y3, y2); _swap(x3, x2); - } - if (y1 > y2) { - _swap(y1, y2); _swap(x1, x2); - } - - if (y1 == y3) { // Handle awkward all-on-same-line case as its own thing - a = b = x1; - if (x2 < a) a = x2; - else if (x2 > b) b = x2; - if (x3 < a) a = x3; - else if (x3 > b) b = x3; - drawLine(a, y1, b, y1, color); - return; - } - - uint16_t dx11 = x2 - x1, - dy11 = y2 - y1, - dx12 = x3 - x1, - dy12 = y3 - y1, - dx22 = x3 - x2, - dy22 = y3 - y2, - sa = 0, - sb = 0; - - // For upper part of triangle, find scanline crossings for segments - // 0-1 and 0-2. If y2=y3 (flat-bottomed triangle), the scanline y2 - // is included here (and second loop will be skipped, avoiding a /0 - // error there), otherwise scanline y2 is skipped here and handled - // in the second loop...which also avoids a /0 error here if y1=y2 - // (flat-topped triangle). - if (y2 == y3) last = y2; // Include y2 scanline - else last = y2 - 1; // Skip it - - for (y = y1; y <= last; y++) { - a = x1 + sa / dy11; - b = x1 + sb / dy12; - sa += dx11; - sb += dx12; - /* longhand: - a = x1 + (x2 - x1) * (y - y1) / (y2 - y1); - b = x1 + (x3 - x1) * (y - y1) / (y3 - y1); - */ - if (a > b) _swap(a, b); - drawLine(a, y, b, y, color); - } - - // For lower part of triangle, find scanline crossings for segments - // 0-2 and 1-2. This loop is skipped if y2=y3. - sa = dx22 * (y - y2); - sb = dx12 * (y - y1); - for (; y <= y3; y++) { - a = x2 + sa / dy22; - b = x1 + sb / dy12; - sa += dx22; - sb += dx12; - /* longhand: - a = x2 + (x3 - x2) * (y - y2) / (y3 - y2); - b = x1 + (x3 - x1) * (y - y1) / (y3 - y1); - */ - if (a > b) _swap(a, b); - drawLine(a, y, b, y, color); - } -} - - -void TFT_22_ILI9225::setBackgroundColor(uint16_t color) { - _bgColor = color; -} - - -void TFT_22_ILI9225::setFont(uint8_t* font) { - - cfont.font = font; - cfont.width = font[0]; - cfont.height = font[1]; - cfont.offset = font[2]; - cfont.numchars = font[3]; - cfont.nbrows = cfont.height / 8; - - if (cfont.height % 8) cfont.nbrows++; // Set number of bytes used by height of font in multiples of 8 -} - - -void TFT_22_ILI9225::drawText(uint16_t x, uint16_t y, char *s, uint16_t color) { - - uint16_t currx = x; - - // Print every character in string - for (uint8_t k = 0; k < strlen(s); k++) { - currx += drawChar(currx, y, s[k], color) + 1; - } -} - - -uint16_t TFT_22_ILI9225::drawChar(uint16_t x, uint16_t y, uint16_t ch, uint16_t color) { - - uint8_t charData, charWidth; - uint8_t h, i, j; - uint16_t charOffset; - - charOffset = (cfont.width * cfont.nbrows) + 1; // bytes used by each character - charOffset = (charOffset * (ch - cfont.offset)) + FONT_HEADER_SIZE; // char offset (add 4 for font header) - charWidth = cfont.font[charOffset]; // get font width from 1st byte - charOffset++; // increment pointer to first character data byte - - for (i = 0; i <= charWidth; i++) { // each font "column" (+1 blank column for spacing) - h = 0; // keep track of char height - for (j = 0; j < cfont.nbrows; j++) { // each column byte - if (i == charWidth) charData = (uint8_t)0x0; // Insert blank column - else charData = cfont.font[charOffset]; - charOffset++; - - // Process every row in font character - for (uint8_t k = 0; k < 8; k++) { - if (h >= cfont.height) break; // No need to process excess bits - if (bitRead(charData, k)) drawPixel(x + i, y + (j * 8) + k, color); - else drawPixel(x + i, y + (j * 8) + k, _bgColor); - h++; - }; - }; - }; - return charWidth; -} - - -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Set Farsi font color -//---------------------------------------------------------------------------------------------------- -void TFT_22_ILI9225::setFontColor(int color) -{ - font_color = color; -} -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Set number format to farsi -//---------------------------------------------------------------------------------------------------- -void TFT_22_ILI9225::setNumberFormatToFa(void) -{ - fa_num = 1; -} - -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Set number format to english -//---------------------------------------------------------------------------------------------------- -void TFT_22_ILI9225::setNumberFormatToEn(void) -{ - fa_num = 0; -} - -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Set efect of the farsi font -// ef : effect number ef:1,2,...,5 -//---------------------------------------------------------------------------------------------------- -void TFT_22_ILI9225::setFontEffect(int ef) -{ - if (ef >= 0 && ef <= 5) - effect = ef; -} - -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Enable Italic effect for farsi font -//---------------------------------------------------------------------------------------------------- -void TFT_22_ILI9225::setItalicOn(void) -{ - italic = 1; -} - -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Disable Italic effect for farsi font -//---------------------------------------------------------------------------------------------------- -void TFT_22_ILI9225::setItalicOff(void) -{ - italic = 0; -} - -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Puts a Farsi Character On The LCD Screen simlpe -//---------------------------------------------------------------------------------------------------- -void TFT_22_ILI9225::putChar(char character) -{ - //x_text - int counter_x, counter_y; - char letter_length, flag_p; - - letter_length = font12x16_FA[character][0] >> 12; - for (counter_y = 0; counter_y<16; counter_y++) - for (counter_x = 0; counter_x<letter_length; counter_x++) - { - flag_p = font12x16_FA[character][counter_y] >> (counter_x); - flag_p = flag_p & 0x01; - if (flag_p) - drawPixel(_maxX - 3 - (x_font + (counter_x)), y_font + counter_y, font_color); - else if (highlight) - drawPixel(_maxX - 3 - (x_font + (counter_x)), y_font + counter_y, highlight_color); - } - - x_font += letter_length; - if (x_font > _maxX - 1) - { - x_font = x_base; - y_font += 16; - if (y_font > _maxY - 0) - y_font = 0; - } - -} - -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Description : Draws a beveled figure on the screen. -// Input : x0, y0 - coordinate position of the upper left center -// : x1, y1 - coordinate position of the lower right center -// : rad - defines the redius of the circle, -// : fill - fill yes or no -//---------------------------------------------------------------------------------------------------- -void TFT_22_ILI9225::roundRectangle(int x0, int y0, int x1, int y1, int rad, bool fill, int color) -{ - signed int a, b, P; - - a = 0; // increment by 1 - b = rad; // decrement by 1 using P - P = 1 - rad; - - - if (fill) - { - fillRectangle(x0, y0 + rad, x1, y1 - rad, color); - - do - { - fillRectangle(x0 - a + rad, y0 - b + rad, a + x1 - rad, y0 - b + rad, color); // 8 --> 1 - fillRectangle(x0 - b + rad, y0 - a + rad, b + x1 - rad, y0 - a + rad, color); // 7 --> 2 - fillRectangle(x0 - b + rad, a + y1 - rad, b + x1 - rad, a + y1 - rad, color); // 6 --> 3 - fillRectangle(x0 - a + rad, b + y1 - rad, a + x1 - rad, b + y1 - rad, color); // 5 --> 4 - - if (P < 0) - P += 3 + 2 * a++; - else - P += 5 + 2 * (a++ - b--); - - } while (a <= b); - } //fill - else - { - fillRectangle(x0 + rad, y0, x1 - rad, y0, color); // top - fillRectangle(x0 + rad, y1, x1 - rad, y1, color); // bottom - fillRectangle(x0, y0 + rad, x0, y1 - rad, color); // left - fillRectangle(x1, y0 + rad, x1, y1 - rad, color); // right - - do - { - drawPixel(a + x1 - rad, y0 - b + rad, color); // `````` Segment 1 - drawPixel(b + x1 - rad, y0 - a + rad, color); // `````` Segment 2 - - drawPixel(b + x1 - rad, a + y1 - rad, color); // `````` Segment 3 - drawPixel(a + x1 - rad, b + y1 - rad, color); // `````` Segment 4 - - drawPixel(x0 - a + rad, b + y1 - rad, color); // `````` Segment 5 - drawPixel(x0 - b + rad, a + y1 - rad, color); // `````` Segment 6 - - drawPixel(x0 - b + rad, y0 - a + rad, color); // `````` Segment 7 - drawPixel(x0 - a + rad, y0 - b + rad, color); // `````` Segment 8 - - if (P < 0) - P += 3 + 2 * a++; - else - P += 5 + 2 * (a++ - b--); - } while (a <= b); - } //no fill -} //RoundRectangle - - - -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Puts a Farsi Character On The LCD Screen with scaling -// size : Scale factor size:1,2,3,... -//---------------------------------------------------------------------------------------------------- -void TFT_22_ILI9225::putBoldChar(char character, int size) -{ - int counter_x, counter_y, i, j; - char letter_length, flag_p; - - - letter_length = font12x16_FA[character][0] >> 12; - for (counter_y = 0; counter_y<16; counter_y++) - for (counter_x = 0; counter_x<letter_length; counter_x++) - { - flag_p = font12x16_FA[character][counter_y] >> (counter_x); - flag_p = flag_p & 0x01; - - - if (flag_p) - { - - if (effect == 0) - for (i = 0; i<size; i++) - for (j = 0; j<size; j++) - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + i - (x_font + (size*counter_x)), y_font + size*counter_y + j, font_color); - // Very good effect (1) - else if (effect == 1) - { - // good for size = 2 - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y - 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y + 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - 1 - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - } - else if (effect == 2) - { - // good for size = 2 - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y - 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y + 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - 1 - (x_font + (size*counter_x)), y_font + size*counter_y + 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y + 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - 1 - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y + 2, font_color); - } - else if (effect == 3) - { - // good for size = 3 - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y - 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y - 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - 1 - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 2 - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y + 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y + 1, font_color); - } - else if (effect == 4) - { - // good for size = 3 - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y - 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y - 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y + 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - 1 - (x_font + (size*counter_x)), y_font + size*counter_y + 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y + 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 2 - (x_font + (size*counter_x)), y_font + size*counter_y + 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - 1 - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 2 - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y + 2, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y + 2, font_color); - } - else if (effect == 5) - { - // good for size = 1,3 - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y + 1, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y + 1, font_color); - } - - //tftlcd_draw_circle(_maxX - 3 -(x_font+(size*counter_x)),y_font+size*counter_y,size,1,font_color); - - } - else if (highlight) - { - - - if (effect == 0) - for (i = 0; i<size; i++) - for (j = 0; j<size; j++) - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + i - (x_font + (size*counter_x)), y_font + size*counter_y + j, highlight_color); - // Very good effect (1) - else if (effect == 1) - { - // good for size = 2 - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y, font_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y - 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y + 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - 1 - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - } - else if (effect == 2) - { - // good for size = 2 - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y - 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y + 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - 1 - (x_font + (size*counter_x)), y_font + size*counter_y + 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y + 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - 1 - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y + 2, highlight_color); - } - else if (effect == 3) - { - // good for size = 3 - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y - 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y - 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - 1 - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 2 - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y + 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y + 1, highlight_color); - } - else if (effect == 4) - { - // good for size = 3 - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y - 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y - 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y + 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - 1 - (x_font + (size*counter_x)), y_font + size*counter_y + 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y + 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 2 - (x_font + (size*counter_x)), y_font + size*counter_y + 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - 1 - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 2 - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y + 2, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y + 2, highlight_color); - } - else if (effect == 5) - { - // good for size = 1,3 - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) - (x_font + (size*counter_x)), y_font + size*counter_y + 1, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y, highlight_color); - drawPixel(_maxX - 3 + italic*(-counter_y + 7) + 1 - (x_font + (size*counter_x)), y_font + size*counter_y + 1, highlight_color); - } - - - - //tftlcd_draw_circle(_maxX - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y,size,1,highlight_color); - - - } - } - - x_font += size*letter_length; - if (x_font > _maxX - 1) - { - x_font = x_base; - y_font += size * 16; - if (y_font > _maxY - 0) - y_font = 0; - } - -} - - -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Go to a specific pont for farsi font (x:0..TS_SIZE_X , y:0..TS_SIZE_Y) -//---------------------------------------------------------------------------------------------------- -void TFT_22_ILI9225::goToXY(int x, int y) -{ - if ((x >= _maxX) || (x < 0)) - { - x_font = 0; - x_base = 0; - } - else - { - x_font = x; - x_base = x; - } - - if ((y >= _maxY) || (y < 0)) - y_font = 0; - else - y_font = y; -} - -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Enable Farsi font Highlight -//---------------------------------------------------------------------------------------------------- -void TFT_22_ILI9225::setTextHighlightOn(void) -{ - highlight = 1; -} - -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Disable Farsi font Highlight -//---------------------------------------------------------------------------------------------------- -void TFT_22_ILI9225::setTextHighlightOff(void) -{ - highlight = 0; -} - -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Set Farsi font Highlight color -//---------------------------------------------------------------------------------------------------- -void TFT_22_ILI9225::setTextHighlightColor(unsigned int color) -{ - highlight_color = color; -} - -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Show a farsi-englisg string on the LCD with specific size -// size : Scale factor size:1,2,3,... -//---------------------------------------------------------------------------------------------------- -void TFT_22_ILI9225::putMixedEnAndFaString(const unsigned char *string, int size) -{ - unsigned char letter, nt_letter, pr_letter; - unsigned char CN = 0, CP = 0, pr_CN = 0, nt_CP = 0, place = 0, flag1 = 0; - unsigned char letter_counter = 0, letter_count = 0, length = 0, enter = 0; - unsigned char text_buffer[32]; - - - flag1 = 0; - - while (*string) - { - if (*string > 0x80) - { - while (*string > 0x80) - { - if (flag1 == 0) - pr_letter = 0x20; - else - pr_letter = *(string - 1); - - letter = *string++; - - if (*string == 0) - nt_letter = 0x20; - else - nt_letter = *string; - - flag1 = 1; - - if (letter > 0x98) letter = letter; - else if (letter == 0x98) letter = 0xBC; - else if (letter == 0x90) letter = 0xC0; - else if (letter == 0x8D) letter = 0xBE; - else if (letter == 0x81) letter = 0xBD; - else if (letter == 0x8E) letter = 0xBF; - - if (pr_letter > 0x98) pr_letter = pr_letter; - else if (pr_letter == 0x98) pr_letter = 0xBC; - else if (pr_letter == 0x90) pr_letter = 0xC0; - else if (pr_letter == 0x8D) pr_letter = 0xBE; - else if (pr_letter == 0x81) pr_letter = 0xBD; - else if (pr_letter == 0x8E) pr_letter = 0xBF; - - if (nt_letter > 0x98) nt_letter = nt_letter; - else if (nt_letter == 0x98) nt_letter = 0xBC; - else if (nt_letter == 0x90) nt_letter = 0xC0; - else if (nt_letter == 0x8D) nt_letter = 0xBE; - else if (nt_letter == 0x81) nt_letter = 0xBD; - else if (nt_letter == 0x8E) nt_letter = 0xBF; - - - - if (pr_letter > 0x80) - pr_CN = ((FAmap[(pr_letter - 0xBC)][5]) == 1); - else - pr_CN = 0; - - if (nt_letter > 0x80) - nt_CP = ((FAmap[(nt_letter - 0xBC)][4]) == 1); - else - nt_CP = 0; - - if (letter > 0x80) - CP = ((FAmap[(letter - 0xBC)][4]) == 1); - else - CP = 0; - - if (letter > 0x80) - CN = ((FAmap[(letter - 0xBC)][5]) == 1); - else - CN = 0; - - CP = pr_CN && CP; - CN = CN && nt_CP; - place = (CP << 1) | CN; - - text_buffer[letter_counter++] = FAmap[(letter - 0xBC)][place]; - - length += size*(font12x16_FA[FAmap[(letter - 0xBC)][place]][1] >> 12); - } - - - - if (length < _maxX - x_font - 3) - for (letter_count = 0; letter_count<letter_counter; letter_count++) - putBoldChar(text_buffer[letter_count], size); - else - { - - x_font = x_base; - y_font += size * 16; - if (y_font > _maxY - size * 16) - y_font = 0; - - for (letter_count = 0; letter_count<letter_counter; letter_count++) - putBoldChar(text_buffer[letter_count], size); - } - letter_counter = 0; - length = 0; - } - else if (*string == 0x20) //Space detect - putBoldChar(*string++, size); - else //English letter & Number & Enter detect - { - if (*string == 0x0D) //Enter detect - { - x_font = x_base; - y_font += size * 16; - if (y_font > _maxY - size * 16) - y_font = 0; - - string += 2; - goto p1; - } - //letter_counter = 0; - while ((*string < 0x81) && (*(string + 1) < 0x81) && (*string != 0x00)) - { - - if (fa_num) - { - if ((*string > 0x2F) && (*string < 0x3A) && (*string != 0x00)) - { - letter = (*string) - 0x20; - text_buffer[letter_counter++] = letter; - string++; - goto P2; - } - } - text_buffer[letter_counter++] = *string++; - P2: - if ((*string == 0x20) && ((letter_counter * size * 8) < (_maxX - x_font - 1))) - flag1 = letter_counter; - - if ((letter_counter * size * 8) > (_maxX - x_font - 1)) - { - string -= (letter_counter - flag1 + 1); - letter_counter = flag1 - 1; - enter = 1; - - break; - } - - } - if ((letter_counter * size * 8) < (_maxX - x_font - 1)) - { - for (letter_count = (letter_counter); letter_count>0; letter_count--) - putBoldChar(text_buffer[letter_count - 1], size); - - if (enter) - { - enter = 0; - x_font = x_base; - y_font += size * 16; - if (y_font > _maxY - size * 16) - y_font = 0; - } - } - p1: - letter_counter = 0; - flag1 = 0; - - } - } - flag1 = 0; - -} - -//---------------------------------------------------------------------------------------------------- -//************************************* ECA 2.8 inch LCD Module ************************************** -//---------------------------------------------------------------------------------------------------- -// Make an ascii string from an unicode string -//---------------------------------------------------------------------------------------------------- - -void TFT_22_ILI9225::unicode2ascii(char *uni_str, char *ascii_str) -{ - int counter = 0; - int Uch = 0; - char chl, chh; - - - while (*uni_str) - { - chl = *uni_str++; - chh = *uni_str++; - - Uch = 0; - Uch = ((Uch | chh) << 8) | chl; - - if (Uch > 1574 && Uch < 1591) - *(ascii_str + counter) = (char)(Uch - 1376); - else if (Uch > 1590 && Uch < 1595) - *(ascii_str + counter) = (char)(Uch - 1375); - else if (Uch > 1600 && Uch < 1603) - *(ascii_str + counter) = (char)(Uch - 1380); - else if (Uch == 1705) - *(ascii_str + counter) = (char)(Uch - 1482); - else if (Uch == 1604) - *(ascii_str + counter) = (char)(Uch - 1379); - else if (Uch > 1604 && Uch < 1609) - *(ascii_str + counter) = (char)(Uch - 1378); - else if (Uch == 1740) - *(ascii_str + counter) = (char)(Uch - 1503); - else if (Uch == 1574) - *(ascii_str + counter) = (char)(Uch - 1381); - else if (Uch == 1662) - *(ascii_str + counter) = (char)(Uch - 1533); - else if (Uch == 1670) - *(ascii_str + counter) = (char)(Uch - 1529); - else if (Uch == 1688) - *(ascii_str + counter) = (char)(Uch - 1546); - else if (Uch == 1711) - *(ascii_str + counter) = (char)(Uch - 1567); - else if (Uch == 1570) - *(ascii_str + counter) = (char)(Uch - 1376); - else if (Uch > 1631 && Uch < 1642) - *(ascii_str + counter) = (char)(Uch - 1584); - else if (Uch == 65536) - *(ascii_str + counter) = NULL; - else - *(ascii_str + counter) = (char)Uch; - - - counter++; - - } - *(ascii_str + counter) = NULL; - -} -
diff -r cc93245bb6d0 -r 251e4d020501 TFT_22_ILI9225.h --- a/TFT_22_ILI9225.h Tue Sep 01 12:16:09 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,316 +0,0 @@ -#ifndef TFT_22_ILI9225_h -#define TFT_22_ILI9225_h -#include "mbed.h" -#include "FAmap.h" -#include "EN_FA_font.h" - -// Other libraries -#include "SPI.h" - -/* ILI9225 screen size */ -#define ILI9225_LCD_WIDTH 176 -#define ILI9225_LCD_HEIGHT 220 - -/* ILI9225 LCD Registers */ -#define ILI9225_DRIVER_OUTPUT_CTRL (0x01u) // Driver Output Control -#define ILI9225_LCD_AC_DRIVING_CTRL (0x02u) // LCD AC Driving Control -#define ILI9225_ENTRY_MODE (0x03u) // Entry Mode -#define ILI9225_DISP_CTRL1 (0x07u) // Display Control 1 -#define ILI9225_BLANK_PERIOD_CTRL1 (0x08u) // Blank Period Control -#define ILI9225_FRAME_CYCLE_CTRL (0x0Bu) // Frame Cycle Control -#define ILI9225_INTERFACE_CTRL (0x0Cu) // Interface Control -#define ILI9225_OSC_CTRL (0x0Fu) // Osc Control -#define ILI9225_POWER_CTRL1 (0x10u) // Power Control 1 -#define ILI9225_POWER_CTRL2 (0x11u) // Power Control 2 -#define ILI9225_POWER_CTRL3 (0x12u) // Power Control 3 -#define ILI9225_POWER_CTRL4 (0x13u) // Power Control 4 -#define ILI9225_POWER_CTRL5 (0x14u) // Power Control 5 -#define ILI9225_VCI_RECYCLING (0x15u) // VCI Recycling -#define ILI9225_RAM_ADDR_SET1 (0x20u) // Horizontal GRAM Address Set -#define ILI9225_RAM_ADDR_SET2 (0x21u) // Vertical GRAM Address Set -#define ILI9225_GRAM_DATA_REG (0x22u) // GRAM Data Register -#define ILI9225_GATE_SCAN_CTRL (0x30u) // Gate Scan Control Register -#define ILI9225_VERTICAL_SCROLL_CTRL1 (0x31u) // Vertical Scroll Control 1 Register -#define ILI9225_VERTICAL_SCROLL_CTRL2 (0x32u) // Vertical Scroll Control 2 Register -#define ILI9225_VERTICAL_SCROLL_CTRL3 (0x33u) // Vertical Scroll Control 3 Register -#define ILI9225_PARTIAL_DRIVING_POS1 (0x34u) // Partial Driving Position 1 Register -#define ILI9225_PARTIAL_DRIVING_POS2 (0x35u) // Partial Driving Position 2 Register -#define ILI9225_HORIZONTAL_WINDOW_ADDR1 (0x36u) // Horizontal Address Start Position -#define ILI9225_HORIZONTAL_WINDOW_ADDR2 (0x37u) // Horizontal Address End Position -#define ILI9225_VERTICAL_WINDOW_ADDR1 (0x38u) // Vertical Address Start Position -#define ILI9225_VERTICAL_WINDOW_ADDR2 (0x39u) // Vertical Address End Position -#define ILI9225_GAMMA_CTRL1 (0x50u) // Gamma Control 1 -#define ILI9225_GAMMA_CTRL2 (0x51u) // Gamma Control 2 -#define ILI9225_GAMMA_CTRL3 (0x52u) // Gamma Control 3 -#define ILI9225_GAMMA_CTRL4 (0x53u) // Gamma Control 4 -#define ILI9225_GAMMA_CTRL5 (0x54u) // Gamma Control 5 -#define ILI9225_GAMMA_CTRL6 (0x55u) // Gamma Control 6 -#define ILI9225_GAMMA_CTRL7 (0x56u) // Gamma Control 7 -#define ILI9225_GAMMA_CTRL8 (0x57u) // Gamma Control 8 -#define ILI9225_GAMMA_CTRL9 (0x58u) // Gamma Control 9 -#define ILI9225_GAMMA_CTRL10 (0x59u) // Gamma Control 10 - -#define ILI9225C_INVOFF 0x20 -#define ILI9225C_INVON 0x21 - - -/* RGB 24-bits color table definition (RGB888). */ -#define RGB888_RGB565(color) ((((color) >> 19) & 0x1f) << 11) | ((((color) >> 10) & 0x3f) << 5) | (((color) >> 3) & 0x1f) - -#define COLOR_BLACK RGB888_RGB565(0x000000u) -#define COLOR_WHITE RGB888_RGB565(0xFFFFFFu) -#define COLOR_BLUE RGB888_RGB565(0x0000FFu) -#define COLOR_GREEN RGB888_RGB565(0x00FF00u) -#define COLOR_RED RGB888_RGB565(0xFF0000u) -#define COLOR_NAVY RGB888_RGB565(0x000080u) -#define COLOR_DARKBLUE RGB888_RGB565(0x00008Bu) -#define COLOR_DARKGREEN RGB888_RGB565(0x006400u) -#define COLOR_DARKCYAN RGB888_RGB565(0x008B8Bu) -#define COLOR_CYAN RGB888_RGB565(0x00FFFFu) -#define COLOR_TURQUOISE RGB888_RGB565(0x40E0D0u) -#define COLOR_INDIGO RGB888_RGB565(0x4B0082u) -#define COLOR_DARKRED RGB888_RGB565(0x800000u) -#define COLOR_OLIVE RGB888_RGB565(0x808000u) -#define COLOR_GRAY RGB888_RGB565(0x808080u) -#define COLOR_SKYBLUE RGB888_RGB565(0x87CEEBu) -#define COLOR_BLUEVIOLET RGB888_RGB565(0x8A2BE2u) -#define COLOR_LIGHTGREEN RGB888_RGB565(0x90EE90u) -#define COLOR_DARKVIOLET RGB888_RGB565(0x9400D3u) -#define COLOR_YELLOWGREEN RGB888_RGB565(0x9ACD32u) -#define COLOR_BROWN RGB888_RGB565(0xA52A2Au) -#define COLOR_DARKGRAY RGB888_RGB565(0xA9A9A9u) -#define COLOR_SIENNA RGB888_RGB565(0xA0522Du) -#define COLOR_LIGHTBLUE RGB888_RGB565(0xADD8E6u) -#define COLOR_GREENYELLOW RGB888_RGB565(0xADFF2Fu) -#define COLOR_SILVER RGB888_RGB565(0xC0C0C0u) -#define COLOR_LIGHTGREY RGB888_RGB565(0xD3D3D3u) -#define COLOR_LIGHTCYAN RGB888_RGB565(0xE0FFFFu) -#define COLOR_VIOLET RGB888_RGB565(0xEE82EEu) -#define COLOR_AZUR RGB888_RGB565(0xF0FFFFu) -#define COLOR_BEIGE RGB888_RGB565(0xF5F5DCu) -#define COLOR_MAGENTA RGB888_RGB565(0xFF00FFu) -#define COLOR_TOMATO RGB888_RGB565(0xFF6347u) -#define COLOR_GOLD RGB888_RGB565(0xFFD700u) -#define COLOR_ORANGE RGB888_RGB565(0xFFA500u) -#define COLOR_SNOW RGB888_RGB565(0xFFFAFAu) -#define COLOR_YELLOW RGB888_RGB565(0xFFFF00u) - -/* Font defines */ -#define FONT_HEADER_SIZE 4 // 1: pixel width of 1 font character, 2: pixel height, -#define readFontByte(x) pgm_read_byte(&cfont.font[x]) - -extern uint8_t Terminal6x8[]; -extern uint8_t Terminal11x16[]; -extern uint8_t Terminal12x16[]; -extern uint8_t Trebuchet_MS16x21[]; - -struct _currentFont -{ - uint8_t* font; - uint8_t width; - uint8_t height; - uint8_t offset; - uint8_t numchars; - uint8_t nbrows; -}; - -/// Main and core class -class TFT_22_ILI9225 { - -public: - - TFT_22_ILI9225(PinName RST, PinName RS, PinName CS, PinName SDI, PinName CLK, PinName LED); - //TFT_22_ILI9225(PinName RST, PinName RS, PinName CS, PinName LED); - - - /// Initialization - void begin(void); - - /// Clear the screen - void clear(void); - - /// fill the screen with color: - void fill(uint16_t color); - - /// Invert screen - /// @param flag true to invert, false for normal screen - void invert(bool flag); - - /// Switch backlight on or off - /// @param flag true=on, false=off - void setBacklight(bool flag); - - /// Switch display on or off - /// @param flag true=on, false=off - void setDisplay(bool flag); - - /// Set orientation - /// @param orientation orientation, 0=portrait, 1=right rotated landscape, 2=reverse portrait, 3=left rotated landscape - void setOrientation(uint8_t orientation); - - /// Get orientation - /// @return orientation orientation, 0=portrait, 1=right rotated landscape, 2=reverse portrait, 3=left rotated landscape - uint8_t getOrientation(void); - - /// Font size, x-axis - /// @return horizontal size of current font, in pixels - uint8_t fontX(void); - - /// Font size, y-axis - /// @return vertical size of current font, in pixels - uint8_t fontY(void); - - /// Screen size, x-axis - /// @return horizontal size of the screen, in pixels - /// @note 240 means 240 pixels and thus 0..239 coordinates (decimal) - uint16_t maxX(void); - - /// Screen size, y-axis - /// @return vertical size of the screen, in pixels - /// @note 220 means 220 pixels and thus 0..219 coordinates (decimal) - uint16_t maxY(void); - - /// Draw circle - /// @param x0 center, point coordinate, x-axis - /// @param y0 center, point coordinate, y-axis - /// @param radius radius - /// @param color 16-bit color - void drawCircle(uint16_t x0, uint16_t y0, uint16_t radius, uint16_t color); - - /// Draw solid circle - /// @param x0 center, point coordinate, x-axis - /// @param y0 center, point coordinate, y-axis - /// @param radius radius - /// @param color 16-bit color - void fillCircle(uint8_t x0, uint8_t y0, uint8_t radius, uint16_t color); - - /// Set background color - /// @param color background color, default=black - void setBackgroundColor(uint16_t color = COLOR_BLACK); - - /// Draw line, rectangle coordinates - /// @param x1 top left coordinate, x-axis - /// @param y1 top left coordinate, y-axis - /// @param x2 bottom right coordinate, x-axis - /// @param y2 bottom right coordinate, y-axis - /// @param color 16-bit color - void drawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); - - /// Draw rectangle, rectangle coordinates - /// @param x1 top left coordinate, x-axis - /// @param y1 top left coordinate, y-axis - /// @param x2 bottom right coordinate, x-axis - /// @param y2 bottom right coordinate, y-axis - /// @param color 16-bit color - void drawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); - - /// Draw solid rectangle, rectangle coordinates - /// @param x1 top left coordinate, x-axis - /// @param y1 top left coordinate, y-axis - /// @param x2 bottom right coordinate, x-axis - /// @param y2 bottom right coordinate, y-axis - /// @param color 16-bit color - void fillRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); - - /// Draw pixel - /// @param x1 point coordinate, x-axis - /// @param y1 point coordinate, y-axis - /// @param color 16-bit color - void drawPixel(uint16_t x1, uint16_t y1, uint16_t color); - - /// Draw ASCII Text (pixel coordinates) - /// @param x point coordinate, x-axis - /// @param y point coordinate, y-axis - /// @param s text string - /// @param color 16-bit color, default=white - void drawText(uint16_t x, uint16_t y, char *s, uint16_t color = COLOR_WHITE); - - /// Calculate 16-bit color from 8-bit Red-Green-Blue components - /// @param red red component, 0x00..0xff - /// @param green green component, 0x00..0xff - /// @param blue blue component, 0x00..0xff - /// @return 16-bit color - uint16_t setColor(uint8_t red, uint8_t green, uint8_t blue); - - /// Calculate 8-bit Red-Green-Blue components from 16-bit color - /// @param rgb 16-bit color - /// @param red red component, 0x00..0xff - /// @param green green component, 0x00..0xff - /// @param blue blue component, 0x00..0xff - void splitColor(uint16_t rgb, uint8_t &red, uint8_t &green, uint8_t &blue); - - /// Draw triangle, triangle coordinates - /// @param x1 corner 1 coordinate, x-axis - /// @param y1 corner 1 coordinate, y-axis - /// @param x2 corner 2 coordinate, x-axis - /// @param y2 corner 2 coordinate, y-axis - /// @param x3 corner 3 coordinate, x-axis - /// @param y3 corner 3 coordinate, y-axis - /// @param color 16-bit color - void drawTriangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t x3, uint16_t y3, uint16_t color); - - /// Draw solid triangle, triangle coordinates - /// @param x1 corner 1 coordinate, x-axis - /// @param y1 corner 1 coordinate, y-axis - /// @param x2 corner 2 coordinate, x-axis - /// @param y2 corner 2 coordinate, y-axis - /// @param x3 corner 3 coordinate, x-axis - /// @param y3 corner 3 coordinate, y-axis - /// @param color 16-bit color - void fillTriangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t x3, uint16_t y3, uint16_t color); - - /// Set current font - /// @param font Font name - void setFont(uint8_t* font); - - /// Draw single character (pixel coordinates) - /// @param x point coordinate, x-axis - /// @param y point coordinate, y-axis - /// @param ch ASCII character - /// @param color 16-bit color, default=white - uint16_t drawChar(uint16_t x, uint16_t y, uint16_t ch, uint16_t color = COLOR_WHITE); - - void setFontColor(int color); - void setNumberFormatToFa(void); - void setNumberFormatToEn(void); - void setFontEffect(int ef); - void setItalicOn(void); - void setItalicOff(void); - void putChar(char character); - void putBoldChar(char character, int size); - void goToXY(int x, int y); - void setTextHighlightOn(void); - void setTextHighlightOff(void); - void setTextHighlightColor(unsigned int color); - void putMixedEnAndFaString(const unsigned char *string, int size); - void unicode2ascii(char *uni_str, char *ascii_str); - void roundRectangle(int x0, int y0, int x1, int y1, int rad, bool fill, int color); - - -private: - SPI spi; - - void _swap(uint16_t &a, uint16_t &b), - _setWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1), - _orientCoordinates(uint16_t &x1, uint16_t &y1), - _writeRegister(uint16_t reg, uint16_t data), - _writeData(uint8_t HI, uint8_t LO), - _writeCommand(uint8_t HI, uint8_t LO); - - uint16_t _maxX, _maxY, _bgColor; - - PinName _rst, _rs, _cs, _sdi, _clk, _led; - DigitalInOut _rsInOut; - DigitalInOut _csInOut; - DigitalInOut _rstInOut; - DigitalInOut _ledInOut; - uint8_t _orientation; - - - bool hwSPI; - - _currentFont cfont; - -}; - -#endif