From 1af82576bb50f51beb7d41e77792a8ea1da9eb64 Mon Sep 17 00:00:00 2001 From: Eduardo Date: Sun, 10 Dec 2023 22:57:58 +0100 Subject: [PATCH] ill be using theese --- fonts/ArcadePix9x11.c | 111 +++++++++++++++++++++++++++ libs/ili9341.py | 2 +- libs/xglcd_font.py | 170 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 282 insertions(+), 1 deletion(-) create mode 100644 fonts/ArcadePix9x11.c create mode 100644 libs/xglcd_font.py diff --git a/fonts/ArcadePix9x11.c b/fonts/ArcadePix9x11.c new file mode 100644 index 0000000..737de4e --- /dev/null +++ b/fonts/ArcadePix9x11.c @@ -0,0 +1,111 @@ + +//WARNING: This Font Require X-GLCD Lib. +// You can not use it with MikroE GLCD Lib. + +//Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0 +//MikroElektronika 2011 +//http://www.mikroe.com + +//GLCD FontName : Arcadepix9x11 +//Based on a font created by Reekee of Dimenzioned - reekee@00.co.uk +//GLCD FontSize : 9 x 11 + +const unsigned short Arcadepix9x11[] = { + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char + 0x03, 0xBE, 0x01, 0xBE, 0x01, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ! + 0x07, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char " + 0x07, 0x00, 0x00, 0x48, 0x00, 0xFC, 0x00, 0x48, 0x00, 0xFC, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char # + 0x06, 0x98, 0x00, 0xA4, 0x00, 0xA6, 0x01, 0xA4, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char $ + 0x08, 0x04, 0x00, 0x8A, 0x00, 0x44, 0x00, 0x20, 0x00, 0x10, 0x00, 0x88, 0x00, 0x44, 0x01, 0x80, 0x00, 0x00, 0x00, // Code for char % + 0x07, 0xC0, 0x00, 0xE4, 0x01, 0x3E, 0x01, 0x32, 0x01, 0x4C, 0x01, 0xC4, 0x00, 0xA0, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char & + 0x02, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ' + 0x03, 0xFC, 0x00, 0xFE, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ( + 0x03, 0x02, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ) + 0x06, 0x00, 0x00, 0xAC, 0x00, 0x70, 0x00, 0xFE, 0x01, 0x78, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char * + 0x07, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xFC, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char + + 0x03, 0x00, 0x02, 0x80, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char , + 0x07, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char - + 0x02, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char . + 0x06, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x30, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char / + 0x08, 0x38, 0x00, 0xFC, 0x00, 0x84, 0x00, 0x02, 0x01, 0x02, 0x01, 0x06, 0x01, 0xFC, 0x00, 0x38, 0x00, 0x00, 0x00, // Code for char 0 + 0x07, 0x00, 0x01, 0x04, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char 1 + 0x08, 0x84, 0x01, 0xC6, 0x01, 0xE2, 0x01, 0x62, 0x01, 0x62, 0x01, 0x72, 0x01, 0x3E, 0x01, 0x0C, 0x01, 0x00, 0x00, // Code for char 2 + 0x08, 0x80, 0x00, 0x82, 0x01, 0x22, 0x01, 0x22, 0x01, 0x32, 0x01, 0x3E, 0x01, 0xE6, 0x01, 0xC2, 0x00, 0x00, 0x00, // Code for char 3 + 0x08, 0x60, 0x00, 0x70, 0x00, 0x4C, 0x00, 0x44, 0x00, 0x46, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x40, 0x00, 0x00, 0x00, // Code for char 4 + 0x08, 0x8E, 0x00, 0x8E, 0x01, 0x0A, 0x01, 0x0A, 0x01, 0x0A, 0x01, 0x0A, 0x01, 0xFA, 0x01, 0xE2, 0x00, 0x00, 0x00, // Code for char 5 + 0x08, 0xF8, 0x00, 0xFC, 0x01, 0x26, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0xE2, 0x01, 0xC2, 0x00, 0x00, 0x00, // Code for char 6 + 0x08, 0x06, 0x00, 0x06, 0x00, 0xC2, 0x01, 0xE2, 0x01, 0x22, 0x00, 0x1A, 0x00, 0x0E, 0x00, 0x06, 0x00, 0x00, 0x00, // Code for char 7 + 0x08, 0xCC, 0x00, 0x3E, 0x01, 0x32, 0x01, 0x22, 0x01, 0x22, 0x01, 0x32, 0x01, 0xCC, 0x01, 0xC0, 0x00, 0x00, 0x00, // Code for char 8 + 0x08, 0x0C, 0x00, 0x3E, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0xA2, 0x01, 0xFE, 0x00, 0x7C, 0x00, 0x00, 0x00, // Code for char 9 + 0x02, 0x98, 0x01, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char : + 0x03, 0x00, 0x02, 0x98, 0x03, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ; + 0x05, 0x00, 0x00, 0x20, 0x00, 0x70, 0x00, 0xCC, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char < + 0x07, 0x00, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char = + 0x05, 0x00, 0x00, 0x84, 0x00, 0xCC, 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char > + 0x08, 0x0C, 0x00, 0x0E, 0x00, 0x02, 0x05, 0x02, 0x05, 0x82, 0x00, 0xC2, 0x00, 0x7E, 0x00, 0x1C, 0x00, 0x00, 0x00, // Code for char ? + 0x09, 0x00, 0x00, 0xF8, 0x00, 0x04, 0x01, 0x72, 0x02, 0x8A, 0x02, 0x8A, 0x02, 0x92, 0x00, 0xE2, 0x00, 0xFC, 0x01, // Code for char @ + 0x08, 0xF8, 0x01, 0xFC, 0x01, 0x46, 0x00, 0x42, 0x00, 0x42, 0x00, 0x46, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0x00, 0x00, // Code for char A + 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0xFE, 0x01, 0xCC, 0x00, 0x00, 0x00, // Code for char B + 0x08, 0x38, 0x00, 0xFC, 0x00, 0x86, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x86, 0x01, 0x84, 0x00, 0x00, 0x00, // Code for char C + 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x86, 0x01, 0xFC, 0x00, 0x70, 0x00, 0x00, 0x00, // Code for char D + 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x02, 0x01, 0x00, 0x00, // Code for char E + 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x02, 0x00, 0x00, 0x00, // Code for char F + 0x08, 0x70, 0x00, 0xFC, 0x00, 0x86, 0x01, 0x02, 0x01, 0x02, 0x01, 0x22, 0x01, 0xE2, 0x01, 0xE2, 0x01, 0x00, 0x00, // Code for char G + 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00, // Code for char H + 0x07, 0x02, 0x01, 0x02, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char I + 0x08, 0xC0, 0x00, 0xC0, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFE, 0x01, 0xFE, 0x00, 0x00, 0x00, // Code for char J + 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x60, 0x00, 0x70, 0x00, 0xD8, 0x00, 0xCC, 0x01, 0x86, 0x01, 0x02, 0x01, 0x00, 0x00, // Code for char K + 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, // Code for char L + 0x08, 0x00, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x1C, 0x00, 0x38, 0x00, 0x1C, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00, // Code for char M + 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00, // Code for char N + 0x08, 0xFC, 0x00, 0xFE, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x00, // Code for char O + 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x7E, 0x00, 0x1C, 0x00, 0x00, 0x00, // Code for char P + 0x08, 0xFC, 0x00, 0xFE, 0x01, 0x02, 0x01, 0x42, 0x01, 0x42, 0x01, 0xC2, 0x01, 0xFE, 0x00, 0x7C, 0x01, 0x00, 0x00, // Code for char Q + 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x42, 0x00, 0x42, 0x00, 0xC2, 0x00, 0xF2, 0x01, 0xBE, 0x01, 0x3C, 0x01, 0x00, 0x00, // Code for char R + 0x08, 0x8C, 0x00, 0xBE, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x26, 0x01, 0xE4, 0x01, 0xC0, 0x00, 0x00, 0x00, // Code for char S + 0x07, 0x02, 0x00, 0x02, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char T + 0x08, 0xFE, 0x00, 0xFE, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFE, 0x01, 0xFE, 0x00, 0x00, 0x00, // Code for char U + 0x08, 0x00, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0xE0, 0x00, 0xC0, 0x01, 0xE0, 0x00, 0x7E, 0x00, 0x3E, 0x00, 0x00, 0x00, // Code for char V + 0x08, 0x00, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0xE0, 0x00, 0x38, 0x00, 0xE0, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00, // Code for char W + 0x07, 0x86, 0x01, 0xCE, 0x01, 0xFC, 0x00, 0x38, 0x00, 0xFC, 0x00, 0xCE, 0x01, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char X + 0x06, 0x1E, 0x00, 0x3E, 0x00, 0xE0, 0x01, 0xE0, 0x01, 0x3E, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Y + 0x08, 0x82, 0x01, 0xC2, 0x01, 0xE2, 0x01, 0x72, 0x01, 0x3A, 0x01, 0x1E, 0x01, 0x0E, 0x01, 0x06, 0x01, 0x00, 0x00, // Code for char Z + 0x04, 0xFE, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char [ + 0x06, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char BackSlash + 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ] + 0x07, 0x10, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ^ + 0x08, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, // Code for char _ + 0x05, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ` + 0x07, 0xC0, 0x00, 0xE4, 0x01, 0x24, 0x01, 0x24, 0x01, 0x24, 0x01, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char a + 0x07, 0xFE, 0x01, 0xFE, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0x01, 0xF8, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char b + 0x07, 0xF8, 0x00, 0xFC, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x8C, 0x01, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char c + 0x07, 0xF0, 0x00, 0xF8, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char d + 0x07, 0xF0, 0x00, 0xFC, 0x01, 0x44, 0x01, 0x44, 0x01, 0x44, 0x01, 0x7C, 0x01, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char e + 0x06, 0x08, 0x00, 0xFC, 0x01, 0xFE, 0x01, 0x0A, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char f + 0x07, 0xF8, 0x00, 0xFC, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0xFC, 0x07, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, // Code for char g + 0x07, 0xFE, 0x01, 0xFE, 0x01, 0x18, 0x00, 0x08, 0x00, 0x08, 0x00, 0xF8, 0x01, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char h + 0x03, 0x04, 0x00, 0xFD, 0x01, 0xFD, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char i + 0x05, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0xFD, 0x07, 0xFD, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char j + 0x06, 0xFE, 0x01, 0xFE, 0x01, 0x40, 0x00, 0xE0, 0x00, 0xB8, 0x01, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char k + 0x03, 0x02, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char l + 0x08, 0x00, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0x7C, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0x00, 0x00, // Code for char m + 0x07, 0xFC, 0x01, 0xFC, 0x01, 0x0C, 0x00, 0x04, 0x00, 0x04, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char n + 0x07, 0xF8, 0x00, 0xFC, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char o + 0x07, 0xFC, 0x07, 0xFC, 0x07, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char p + 0x07, 0xF8, 0x00, 0xFC, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFC, 0x07, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, // Code for char q + 0x07, 0xFC, 0x01, 0xFC, 0x01, 0x0C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char r + 0x07, 0x88, 0x00, 0xBC, 0x01, 0x24, 0x01, 0x24, 0x01, 0x24, 0x01, 0xE4, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char s + 0x05, 0x04, 0x00, 0xFE, 0x00, 0xFE, 0x01, 0x04, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char t + 0x07, 0xFC, 0x00, 0xFC, 0x01, 0x00, 0x01, 0x00, 0x01, 0x80, 0x01, 0xFC, 0x01, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char u + 0x06, 0x7C, 0x00, 0xFC, 0x00, 0x80, 0x01, 0x80, 0x01, 0xFC, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char v + 0x07, 0xFC, 0x00, 0xFC, 0x01, 0xE0, 0x01, 0xF0, 0x00, 0xE0, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char w + 0x07, 0x84, 0x01, 0xCC, 0x01, 0x78, 0x00, 0x30, 0x00, 0x78, 0x00, 0xCC, 0x01, 0x84, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char x + 0x07, 0xFC, 0x00, 0xFC, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0xFC, 0x07, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, // Code for char y + 0x07, 0x84, 0x01, 0xC4, 0x01, 0xC4, 0x01, 0x64, 0x01, 0x3C, 0x01, 0x1C, 0x01, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char z + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char | + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char } + 0x08, 0x20, 0x00, 0x38, 0x00, 0x08, 0x00, 0x18, 0x00, 0x20, 0x00, 0x20, 0x00, 0x38, 0x00, 0x08, 0x00, 0x00, 0x00, // Code for char ~ + 0x02, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Code for char  + }; + diff --git a/libs/ili9341.py b/libs/ili9341.py index 5fd9118..31ecacf 100644 --- a/libs/ili9341.py +++ b/libs/ili9341.py @@ -2,7 +2,7 @@ from time import sleep from math import cos, sin, pi, radians from sys import implementation -from framebuf import FrameBuffer, RGB565 # type: ignore +from framebuf import FrameBuffer, RGB565 def color565(r, g, b): diff --git a/libs/xglcd_font.py b/libs/xglcd_font.py new file mode 100644 index 0000000..5d28853 --- /dev/null +++ b/libs/xglcd_font.py @@ -0,0 +1,170 @@ +"""XGLCD Font Utility.""" +from math import ceil, floor + + +class XglcdFont(object): + """Font data in X-GLCD format. + + Attributes: + letters: A bytearray of letters (columns consist of bytes) + width: Maximum pixel width of font + height: Pixel height of font + start_letter: ASCII number of first letter + height_bytes: How many bytes comprises letter height + + Note: + Font files can be generated with the free version of MikroElektronika + GLCD Font Creator: www.mikroe.com/glcd-font-creator + The font file must be in X-GLCD 'C' format. + To save text files from this font creator program in Win7 or higher + you must use XP compatibility mode or you can just use the clipboard. + """ + + # Dict to tranlate bitwise values to byte position + BIT_POS = {1: 0, 2: 2, 4: 4, 8: 6, 16: 8, 32: 10, 64: 12, 128: 14, 256: 16} + + def __init__(self, path, width, height, start_letter=32, letter_count=96): + """Constructor for X-GLCD Font object. + + Args: + path (string): Full path of font file + width (int): Maximum width in pixels of each letter + height (int): Height in pixels of each letter + start_letter (int): First ACII letter. Default is 32. + letter_count (int): Total number of letters. Default is 96. + """ + self.width = width + self.height = max(height, 8) + self.start_letter = start_letter + self.letter_count = letter_count + self.bytes_per_letter = (floor( + (self.height - 1) / 8) + 1) * self.width + 1 + self.__load_xglcd_font(path) + + def __load_xglcd_font(self, path): + """Load X-GLCD font data from text file. + + Args: + path (string): Full path of font file. + """ + bytes_per_letter = self.bytes_per_letter + # Buffer to hold letter byte values + self.letters = bytearray(bytes_per_letter * self.letter_count) + mv = memoryview(self.letters) + offset = 0 + with open(path, 'r') as f: + for line in f: + # Skip lines that do not start with hex values + line = line.strip() + if len(line) == 0 or line[0:2] != '0x': + continue + # Remove comments + comment = line.find('//') + if comment != -1: + line = line[0:comment].strip() + # Remove trailing commas + if line.endswith(','): + line = line[0:len(line) - 1] + # Convert hex strings to bytearray and insert in to letters + mv[offset: offset + bytes_per_letter] = bytearray( + int(b, 16) for b in line.split(',')) + offset += bytes_per_letter + + def lit_bits(self, n): + """Return positions of 1 bits only.""" + while n: + b = n & (~n+1) + yield self.BIT_POS[b] + n ^= b + + def get_letter(self, letter, color, background=0, landscape=False): + """Convert letter byte data to pixels. + + Args: + letter (string): Letter to return (must exist within font). + color (int): RGB565 color value. + background (int): RGB565 background color (default: black). + landscape (bool): Orientation (default: False = portrait) + Returns: + (bytearray): Pixel data. + (int, int): Letter width and height. + """ + # Get index of letter + letter_ord = ord(letter) - self.start_letter + # Confirm font contains letter + if letter_ord >= self.letter_count: + print('Font does not contain character: ' + letter) + return b'', 0, 0 + bytes_per_letter = self.bytes_per_letter + offset = letter_ord * bytes_per_letter + mv = memoryview(self.letters[offset:offset + bytes_per_letter]) + + # Get width of letter (specified by first byte) + letter_width = mv[0] + letter_height = self.height + # Get size in bytes of specified letter + letter_size = letter_height * letter_width + # Create buffer (double size to accommodate 16 bit colors) + if background: + buf = bytearray(background.to_bytes(2, 'big') * letter_size) + else: + buf = bytearray(letter_size * 2) + + msb, lsb = color.to_bytes(2, 'big') + + if landscape: + # Populate buffer in order for landscape + pos = (letter_size * 2) - (letter_height * 2) + lh = letter_height + # Loop through letter byte data and convert to pixel data + for b in mv[1:]: + # Process only colored bits + for bit in self.lit_bits(b): + buf[bit + pos] = msb + buf[bit + pos + 1] = lsb + if lh > 8: + # Increment position by double byte + pos += 16 + lh -= 8 + else: + # Descrease position to start of previous column + pos -= (letter_height * 4) - (lh * 2) + lh = letter_height + else: + # Populate buffer in order for portrait + col = 0 # Set column to first column + bytes_per_letter = ceil(letter_height / 8) + letter_byte = 0 + # Loop through letter byte data and convert to pixel data + for b in mv[1:]: + # Process only colored bits + segment_size = letter_byte * letter_width * 16 + for bit in self.lit_bits(b): + pos = (bit * letter_width) + (col * 2) + segment_size + buf[pos] = msb + pos = (bit * letter_width) + (col * 2) + 1 + segment_size + buf[pos] = lsb + letter_byte += 1 + if letter_byte + 1 > bytes_per_letter: + col += 1 + letter_byte = 0 + + return buf, letter_width, letter_height + + def measure_text(self, text, spacing=1): + """Measure length of text string in pixels. + + Args: + text (string): Text string to measure + spacing (optional int): Pixel spacing between letters. Default: 1. + Returns: + int: length of text + """ + length = 0 + for letter in text: + # Get index of letter + letter_ord = ord(letter) - self.start_letter + offset = letter_ord * self.bytes_per_letter + # Add length of letter and spacing + length += self.letters[offset] + spacing + return length -- 2.30.2