├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── demo_animated_sprite.py ├── demo_bouncing_boxes.py ├── demo_circuitpython.py ├── demo_clear.py ├── demo_color_palette.py ├── demo_color_wheel.py ├── demo_colored_squares.py ├── demo_fonts.py ├── demo_fonts8x8.py ├── demo_fonts8x8_bgcolor.py ├── demo_fonts_rotated.py ├── demo_images.py ├── demo_inversion.py ├── demo_mirror.py ├── demo_orientation.py ├── demo_pbm.py ├── demo_scrolling_marquee.py ├── demo_sdcard.py ├── demo_shapes.py ├── demo_sprite.py ├── demo_st7735s.py ├── demo_touch.py ├── fonts ├── ArcadePix9x11.c ├── Bally5x8.c ├── Bally7x9.c ├── Broadway17x15.c ├── Dejavu24x43.c ├── EspressoDolce18x24.c ├── FixedFont5x8.c ├── IBMPlexMono12x24.c ├── Neato5x7.c ├── NeatoReduced5x7.c ├── Robotron13x21.c ├── Robotron7x11.c ├── UbuntuMono12x24.c ├── Unispace12x24.c ├── UnispaceExt12x24.c └── Wendy7x8.c ├── ili9341.py ├── images ├── Cat221x1232.raw ├── MicroPython128x128.raw ├── Python41x49.raw ├── RaspberryPiWB128x128.raw ├── Rototron128x26.raw ├── Tabby128x128.raw ├── Tortie128x128.raw ├── blinka45x48.raw ├── invaders48x36.pbm ├── kb0.raw ├── kb1.raw ├── kb2.raw ├── kb3.raw ├── kb_sprite_320x768.raw └── keyboard_blank.png ├── pwn_search.py ├── sketchup ├── Case Bottom.skp ├── Case Bottom.stl ├── Top Cover.skp └── Top Cover.stl ├── touch_keyboard.py ├── urequests2.py ├── utils ├── fontedit2glcd.py └── img2rgb565.py ├── xglcd_font.py └── xpt2046.py /.gitattributes: -------------------------------------------------------------------------------- 1 | *.c linguist-language=python 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .flake8 2 | .ftpconfig 3 | .vscode/ 4 | main.py 5 | ftp.py -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # micropython-ili9341 2 | MicroPython ILI9341 Display and XPT2046 Touch Screen Drivers. Also compatible with ST7735. 3 | 4 | Full write up on my website [Rototron](https://www.rototron.info/projects/esp32-pwned-password-checker/) or click picture below for a YouTube video: 5 | 6 | [![ILI9341 Tutorial](https://img.youtube.com/vi/NJuOkSSfgUQ/sddefault.jpg)](https://youtu.be/NJuOkSSfgUQ ) 7 | 8 | _Tested on ESP32 (Wemos Lolin32 & Loline32 Pro)_ 9 | 10 | #### Notes 11 | 1. Use the img2rgb565.py tool located in the utils folder to change image files like JPEG and PNG into the required raw RGB565 format. 12 | 2. The fonts available in this repository were made with a free conversion tool named [GLCD Font Creator](https://www.mikroe.com/glcd-font-creator/). 13 | -------------------------------------------------------------------------------- /demo_animated_sprite.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (animated sprite). 2 | 3 | Note: This demo requires a board with additional PSRAM. 4 | """ 5 | from ili9341 import Display 6 | from machine import Pin, SPI # type: ignore 7 | from micropython import const # type: ignore 8 | from utime import sleep_us, ticks_us, ticks_diff # type: ignore 9 | 10 | SPRITE_WIDTH = const(221) 11 | SPRITE_HEIGHT = const(154) 12 | SPRITE_COUNT = const(8) 13 | SIZE = const(68068) # width (221) x height (154) x bytes of color (2) 14 | 15 | 16 | def test(): 17 | """Animated sprite.""" 18 | try: 19 | # Baud rate of 40000000 seems about the max 20 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 21 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17)) 22 | 23 | display.clear() 24 | 25 | # Load sprite 26 | cat = display.load_sprite('images/Cat221x1232.raw', 27 | SPRITE_WIDTH, SPRITE_HEIGHT * SPRITE_COUNT) 28 | # Use memoryview to improve memory usage 29 | mv_cat = memoryview(cat) 30 | 31 | x = (display.width - SPRITE_WIDTH) // 2 32 | y = (display.height - SPRITE_HEIGHT) // 2 33 | index = 0 # Sprite frame index 34 | 35 | while True: 36 | timer = ticks_us() 37 | offset = SIZE * index 38 | display.draw_sprite(mv_cat[offset: offset + SIZE], x, y, 39 | SPRITE_WIDTH, SPRITE_HEIGHT) 40 | index = (index + 1) & 7 # Next sprite index (wrap on last) 41 | 42 | # Attempt to set framerate to 30 FPS 43 | timer_dif = 33333 - ticks_diff(ticks_us(), timer) 44 | if timer_dif > 0: 45 | sleep_us(timer_dif) 46 | 47 | except KeyboardInterrupt: 48 | display.cleanup() 49 | 50 | 51 | test() 52 | -------------------------------------------------------------------------------- /demo_bouncing_boxes.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (bouncing boxes).""" 2 | from machine import Pin, SPI # type: ignore 3 | from random import random, seed 4 | from ili9341 import Display, color565 5 | from utime import sleep_us, ticks_cpu, ticks_us, ticks_diff # type: ignore 6 | 7 | 8 | class Box(object): 9 | """Bouncing box.""" 10 | 11 | def __init__(self, screen_width, screen_height, size, display, color): 12 | """Initialize box. 13 | 14 | Args: 15 | screen_width (int): Width of screen. 16 | screen_height (int): Width of height. 17 | size (int): Square side length. 18 | display (ILI9341): display object. 19 | color (int): RGB565 color value. 20 | """ 21 | self.size = size 22 | self.w = screen_width 23 | self.h = screen_height 24 | self.display = display 25 | self.color = color 26 | # Generate non-zero random speeds between -5.0 and 5.0 27 | seed(ticks_cpu()) 28 | r = random() * 10.0 29 | self.x_speed = 5.0 - r if r < 5.0 else r - 10.0 30 | r = random() * 10.0 31 | self.y_speed = 5.0 - r if r < 5.0 else r - 10.0 32 | 33 | self.x = self.w / 2.0 34 | self.y = self.h / 2.0 35 | self.prev_x = self.x 36 | self.prev_y = self.y 37 | 38 | def update_pos(self): 39 | """Update box position and speed.""" 40 | x = self.x 41 | y = self.y 42 | size = self.size 43 | w = self.w 44 | h = self.h 45 | x_speed = abs(self.x_speed) 46 | y_speed = abs(self.y_speed) 47 | self.prev_x = x 48 | self.prev_y = y 49 | 50 | if x + size >= w - x_speed: 51 | self.x_speed = -x_speed 52 | elif x - size <= x_speed + 1: 53 | self.x_speed = x_speed 54 | 55 | if y + size >= h - y_speed: 56 | self.y_speed = -y_speed 57 | elif y - size <= y_speed + 1: 58 | self.y_speed = y_speed 59 | 60 | self.x = x + self.x_speed 61 | self.y = y + self.y_speed 62 | 63 | def draw(self): 64 | """Draw box.""" 65 | x = int(self.x) 66 | y = int(self.y) 67 | size = self.size 68 | prev_x = int(self.prev_x) 69 | prev_y = int(self.prev_y) 70 | self.display.fill_hrect(prev_x - size, 71 | prev_y - size, 72 | size, size, 0) 73 | self.display.fill_hrect(x - size, 74 | y - size, 75 | size, size, self.color) 76 | 77 | 78 | def test(): 79 | """Bouncing box.""" 80 | try: 81 | # Baud rate of 40000000 seems about the max 82 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 83 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17)) 84 | 85 | display.clear() 86 | 87 | colors = [color565(255, 0, 0), 88 | color565(0, 255, 0), 89 | color565(0, 0, 255), 90 | color565(255, 255, 0), 91 | color565(0, 255, 255), 92 | color565(255, 0, 255)] 93 | sizes = [12, 11, 10, 9, 8, 7] 94 | boxes = [Box(display.width, display.height, sizes[i], display, 95 | colors[i]) for i in range(6)] 96 | 97 | while True: 98 | timer = ticks_us() 99 | for b in boxes: 100 | b.update_pos() 101 | b.draw() 102 | # Attempt to set framerate to 30 FPS 103 | timer_dif = 33333 - ticks_diff(ticks_us(), timer) 104 | if timer_dif > 0: 105 | sleep_us(timer_dif) 106 | 107 | except KeyboardInterrupt: 108 | display.cleanup() 109 | 110 | 111 | test() 112 | -------------------------------------------------------------------------------- /demo_circuitpython.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (CircuitPython Text, Shape & Sprite).""" 2 | import board # type: ignore 3 | from busio import SPI # type: ignore 4 | from digitalio import DigitalInOut # type: ignore 5 | from ili9341 import Display, color565 6 | from xglcd_font import XglcdFont 7 | from time import monotonic, sleep 8 | from sys import exit, implementation 9 | 10 | 11 | class BouncingSprite(object): 12 | """Bouncing Sprite.""" 13 | 14 | def __init__(self, path, w, h, screen_width, screen_height, 15 | speed, display): 16 | """Initialize sprite. 17 | 18 | Args: 19 | path (string): Path of sprite image. 20 | w, h (int): Width and height of image. 21 | screen_width (int): Width of screen. 22 | screen_height (int): Width of height. 23 | size (int): Square side length. 24 | speed(int): Initial XY-Speed of sprite. 25 | display (ILI9341): display object. 26 | color (int): RGB565 color value. 27 | """ 28 | self.buf = display.load_sprite(path, w, h) 29 | self.w = w 30 | self.h = h 31 | self.screen_width = screen_width 32 | self.screen_height = screen_height 33 | self.display = display 34 | self.x_speed = speed 35 | self.y_speed = speed 36 | self.x = self.screen_width // 2 37 | self.y = self.screen_height // 2 38 | self.prev_x = self.x 39 | self.prev_y = self.y 40 | 41 | def update_pos(self): 42 | """Update sprite speed and position.""" 43 | x = self.x 44 | y = self.y 45 | w = self.w 46 | h = self.h 47 | x_speed = abs(self.x_speed) 48 | y_speed = abs(self.y_speed) 49 | 50 | if x + w + x_speed >= self.screen_width: 51 | self.x_speed = -x_speed 52 | elif x - x_speed < 0: 53 | self.x_speed = x_speed 54 | 55 | if y + h + y_speed >= self.screen_height: 56 | self.y_speed = -y_speed 57 | elif y - y_speed <= 20: 58 | self.y_speed = y_speed 59 | 60 | self.prev_x = x 61 | self.prev_y = y 62 | 63 | self.x = x + self.x_speed 64 | self.y = y + self.y_speed 65 | 66 | def draw(self): 67 | """Draw sprite.""" 68 | x = self.x 69 | y = self.y 70 | prev_x = self.prev_x 71 | prev_y = self.prev_y 72 | w = self.w 73 | h = self.h 74 | x_speed = abs(self.x_speed) 75 | y_speed = abs(self.y_speed) 76 | 77 | # Determine direction and remove previous portion of sprite 78 | if prev_x > x: 79 | # Left 80 | self.display.fill_vrect(x + w, prev_y, x_speed, h, 0) 81 | elif prev_x < x: 82 | # Right 83 | self.display.fill_vrect(x - x_speed, prev_y, x_speed, h, 0) 84 | if prev_y > y: 85 | # Upward 86 | self.display.fill_vrect(prev_x, y + h, w, y_speed, 0) 87 | elif prev_y < y: 88 | # Downward 89 | self.display.fill_vrect(prev_x, y - y_speed, w, y_speed, 0) 90 | 91 | self.display.draw_sprite(self.buf, x, y, w, h) 92 | 93 | 94 | def test(): 95 | """CircuitPython Text, Shape & Sprite""" 96 | if implementation.name != 'circuitpython': 97 | print() 98 | print('This demo is for CircuitPython only!') 99 | exit() 100 | try: 101 | # Configuration for CS and DC pins: 102 | cs_pin = DigitalInOut(board.P0_15) 103 | dc_pin = DigitalInOut(board.P0_17) 104 | rst_pin = DigitalInOut(board.P0_20) 105 | 106 | # Setup SPI bus using hardware SPI: 107 | spi = SPI(clock=board.P0_24, MOSI=board.P0_22) 108 | 109 | # Create the ILI9341 display: 110 | display = Display(spi, dc=dc_pin, cs=cs_pin, rst=rst_pin) 111 | display.clear() 112 | 113 | # Load Fixed Font 114 | fixed = XglcdFont('fonts/FixedFont5x8.c', 5, 8, letter_count=96) 115 | 116 | # Title 117 | WIDTH = 128 118 | text = 'CircuitPython Demo' 119 | # Measure text and center 120 | length = fixed.measure_text(text) 121 | x = int((WIDTH / 2) - (length / 2)) 122 | display.draw_text(x, 6, text, fixed, color565(255, 255, 0)) 123 | 124 | # Draw title outline 125 | display.draw_rectangle(0, 0, 127, 20, color565(0, 255, 0)) 126 | 127 | # Load sprite 128 | logo = BouncingSprite('images/blinka45x48.raw', 129 | 45, 48, 239, 319, 1, display) 130 | 131 | while True: 132 | timer = monotonic() 133 | logo.update_pos() 134 | logo.draw() 135 | # Attempt to set framerate to 30 FPS 136 | timer_dif = .033333333 - (monotonic() - timer) 137 | if timer_dif > 0: 138 | sleep(timer_dif) 139 | 140 | except KeyboardInterrupt: 141 | display.cleanup() 142 | 143 | 144 | test() 145 | -------------------------------------------------------------------------------- /demo_clear.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (clear).""" 2 | from time import sleep, ticks_ms 3 | from ili9341 import Display, color565 4 | from machine import Pin, SPI # type: ignore 5 | import gc 6 | 7 | colors = { 8 | "RED": (255, 0, 0), 9 | "GREEN": (0, 255, 0), 10 | "BLUE": (0, 0, 255), 11 | "YELLOW": (255, 255, 0), 12 | "AQUA": (0, 255, 255), 13 | "MAROON": (128, 0, 0), 14 | "DARK_GREEN": (0, 128, 0), 15 | "NAVY": (0, 0, 128), 16 | "TEAL": (0, 128, 128), 17 | "PURPLE": (128, 0, 128), 18 | "ORANGE": (255, 128, 0), 19 | "DEEP_PINK": (255, 0, 128), 20 | "CYAN": (128, 255, 255), 21 | } 22 | 23 | 24 | def test(): 25 | """Test code.""" 26 | # Baud rate of 40000000 seems about the max 27 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 28 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17)) 29 | 30 | # Calculate valid hlines parameters for display clear method 31 | valid_hlines = [] 32 | for i in range(1, display.height): 33 | if display.height % i == 0: 34 | valid_hlines.append(i) 35 | # Ensure only 13 entries, truncate or repeat the last one 36 | valid_hlines = valid_hlines[:13] 37 | if len(valid_hlines) < 13: 38 | valid_hlines += [valid_hlines[-1]] * (13 - len(valid_hlines)) 39 | # Ensure only 13 entries, truncate or repeat the last one 40 | valid_hlines = valid_hlines[:13] 41 | if len(valid_hlines) < 13: 42 | valid_hlines += [valid_hlines[-1]] * (13 - len(valid_hlines)) 43 | 44 | print('Clearing to black...') 45 | start = ticks_ms() 46 | display.clear() 47 | end = ticks_ms() 48 | print(f'Display cleared in {end - start} ms.') 49 | sleep(2) 50 | 51 | print('Clearing to white...') 52 | start = ticks_ms() 53 | display.clear(color565(255, 255, 255)) 54 | end = ticks_ms() 55 | print(f'Display cleared in {end - start} ms.') 56 | sleep(2) 57 | 58 | for hlines, (color, rgb) in zip(valid_hlines, colors.items()): 59 | gc.collect() 60 | print(f'Clearing display to {color}, hlines={hlines}...') 61 | try: 62 | start = ticks_ms() 63 | display.clear(hlines=hlines, color=color565(*rgb)) 64 | end = ticks_ms() 65 | print(f'Display cleared in {end - start} ms.') 66 | except Exception as e: 67 | print(e) 68 | sleep(1) 69 | 70 | sleep(5) 71 | display.cleanup() 72 | 73 | 74 | test() 75 | -------------------------------------------------------------------------------- /demo_color_palette.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (color palette).""" 2 | from time import sleep 3 | from ili9341 import Display, color565 4 | from machine import Pin, SPI # type: ignore 5 | 6 | 7 | def hsv_to_rgb(h, s, v): 8 | """ 9 | Convert HSV to RGB (based on colorsys.py). 10 | 11 | Args: 12 | h (float): Hue 0 to 1. 13 | s (float): Saturation 0 to 1. 14 | v (float): Value 0 to 1 (Brightness). 15 | """ 16 | if s == 0.0: 17 | return v, v, v 18 | i = int(h * 6.0) 19 | f = (h * 6.0) - i 20 | p = v * (1.0 - s) 21 | q = v * (1.0 - s * f) 22 | t = v * (1.0 - s * (1.0 - f)) 23 | i = i % 6 24 | 25 | v = int(v * 255) 26 | t = int(t * 255) 27 | p = int(p * 255) 28 | q = int(q * 255) 29 | 30 | if i == 0: 31 | return v, t, p 32 | if i == 1: 33 | return q, v, p 34 | if i == 2: 35 | return p, v, t 36 | if i == 3: 37 | return p, q, v 38 | if i == 4: 39 | return t, p, v 40 | if i == 5: 41 | return v, p, q 42 | 43 | 44 | def test(): 45 | """Test code.""" 46 | # Baud rate of 40000000 seems about the max 47 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 48 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17)) 49 | 50 | radius = 9 51 | step_size = (radius + 1) * 2 52 | num_circles_x = (display.width // step_size) 53 | num_circles_y = (display.height // step_size) 54 | total_circles = num_circles_x * num_circles_y 55 | c = 0 56 | for x in range(0, num_circles_x): 57 | for y in range(0, num_circles_y): 58 | color = color565(*hsv_to_rgb(c / total_circles, 1, 1)) 59 | display.fill_circle(x * step_size + radius, y * step_size + radius, 60 | radius, color) 61 | c += 1 62 | 63 | sleep(9) 64 | display.cleanup() 65 | 66 | 67 | test() 68 | -------------------------------------------------------------------------------- /demo_color_wheel.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (color wheel).""" 2 | from time import sleep 3 | from ili9341 import Display, color565 4 | from machine import Pin, SPI # type: ignore 5 | from math import cos, pi, sin 6 | 7 | ANGLE_STEP_SIZE = 0.05 # Decrease step size for higher resolution 8 | PI2 = pi * 2 9 | 10 | 11 | def hsv_to_rgb(h, s, v): 12 | """ 13 | Convert HSV to RGB (based on colorsys.py). 14 | 15 | Args: 16 | h (float): Hue 0 to 1. 17 | s (float): Saturation 0 to 1. 18 | v (float): Value 0 to 1 (Brightness). 19 | """ 20 | if s == 0.0: 21 | return v, v, v 22 | i = int(h * 6.0) 23 | f = (h * 6.0) - i 24 | p = v * (1.0 - s) 25 | q = v * (1.0 - s * f) 26 | t = v * (1.0 - s * (1.0 - f)) 27 | i = i % 6 28 | 29 | v = int(v * 255) 30 | t = int(t * 255) 31 | p = int(p * 255) 32 | q = int(q * 255) 33 | 34 | if i == 0: 35 | return v, t, p 36 | if i == 1: 37 | return q, v, p 38 | if i == 2: 39 | return p, v, t 40 | if i == 3: 41 | return p, q, v 42 | if i == 4: 43 | return t, p, v 44 | if i == 5: 45 | return v, p, q 46 | 47 | 48 | def test(): 49 | """Test code.""" 50 | # Baud rate of 40000000 seems about the max 51 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 52 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17)) 53 | 54 | half_width = display.width // 2 55 | half_height = display.height // 2 56 | center_x = half_width - 1 57 | center_y = half_height - 1 58 | 59 | x, y = 0, 0 60 | angle = 0.0 61 | # Loop all angles from 0 to 2 * PI radians 62 | while angle < PI2: 63 | # Calculate x, y from a vector with known length and angle 64 | x = int(center_x * sin(angle) + half_width) 65 | y = int(center_y * cos(angle) + half_height) 66 | color = color565(*hsv_to_rgb(angle / PI2, 1, 1)) 67 | display.draw_line(x, y, center_x, center_y, color) 68 | angle += ANGLE_STEP_SIZE 69 | 70 | sleep(5) 71 | 72 | for r in range(center_x, 0, -1): 73 | color = color565(*hsv_to_rgb(r / half_width, 1, 1)) 74 | display.fill_circle(center_x, center_y, r, color) 75 | 76 | sleep(9) 77 | display.cleanup() 78 | 79 | 80 | test() 81 | -------------------------------------------------------------------------------- /demo_colored_squares.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (colored squares).""" 2 | from time import sleep 3 | from ili9341 import Display, color565 4 | from machine import Pin, SPI # type: ignore 5 | 6 | 7 | colors = { 8 | 0: color565(255, 0, 0), # Red 9 | 1: color565(0, 255, 0), # Green 10 | 2: color565(0, 0, 255), # Blue 11 | 3: color565(255, 255, 0), # Yellow 12 | 4: color565(255, 0, 255), # Fuchsia 13 | 5: color565(0, 255, 255), # Aqua 14 | 6: color565(128, 0, 0), # Maroon 15 | 7: color565(0, 128, 0), # Dark green 16 | 8: color565(0, 0, 128), # Navy 17 | 9: color565(0, 128, 128), # Teal 18 | 10: color565(128, 0, 128), # Purple 19 | 11: color565(128, 128, 0), # Olive 20 | 12: color565(255, 128, 0), # Orange 21 | 13: color565(255, 0, 128), # Deep pink 22 | 14: color565(128, 255, 0), # Chartreuse 23 | 15: color565(0, 255, 128), # Spring green 24 | 16: color565(128, 0, 255), # Indigo 25 | 17: color565(0, 128, 255), # Dodger blue 26 | 18: color565(128, 255, 255), # Cyan 27 | 19: color565(255, 128, 255), # Pink 28 | 20: color565(255, 255, 128), # Light yellow 29 | 21: color565(255, 128, 128), # Light coral 30 | 22: color565(128, 255, 128), # Light green 31 | 23: color565(128, 128, 255), # Light slate blue 32 | 24: color565(255, 255, 255), # White 33 | } 34 | 35 | 36 | def test(): 37 | """Test code.""" 38 | # Baud rate of 40000000 seems about the max 39 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 40 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17)) 41 | 42 | cols = 5 # Number of columns 43 | rows = 5 # Number of rows 44 | rect_width = display.width // cols # Width of each rectangle 45 | rect_height = display.height // rows # Height of each rectangle 46 | c = 0 # Color index 47 | for row in range(rows): # Loop through rows 48 | for col in range(cols): # Loop through columns 49 | x = col * rect_width # Calculate X coordinate 50 | y = row * rect_height # Calculate Y coordinate 51 | display.fill_rectangle(x, y, rect_width - 1, rect_height - 1, 52 | colors[c]) # Draw a filled rectangle 53 | c += 1 # Increment color index 54 | 55 | sleep(10) 56 | display.cleanup() 57 | 58 | 59 | test() 60 | -------------------------------------------------------------------------------- /demo_fonts.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (fonts).""" 2 | from time import sleep 3 | from ili9341 import Display, color565 4 | from machine import Pin, SPI # type: ignore 5 | from xglcd_font import XglcdFont 6 | 7 | 8 | def test(): 9 | """Test code.""" 10 | # Baud rate of 40000000 seems about the max 11 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 12 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17)) 13 | 14 | print('Loading fonts...') 15 | print('Loading arcadepix') 16 | arcadepix = XglcdFont('fonts/ArcadePix9x11.c', 9, 11) 17 | print('Loading bally') 18 | bally = XglcdFont('fonts/Bally7x9.c', 7, 9) 19 | print('Loading broadway') 20 | broadway = XglcdFont('fonts/Broadway17x15.c', 17, 15) 21 | print('Loading espresso_dolce') 22 | espresso_dolce = XglcdFont('fonts/EspressoDolce18x24.c', 18, 24) 23 | print('Loading fixed_font') 24 | fixed_font = XglcdFont('fonts/FixedFont5x8.c', 5, 8) 25 | print('Loading neato') 26 | neato = XglcdFont('fonts/Neato5x7.c', 5, 7, letter_count=223) 27 | print('Loading robotron') 28 | robotron = XglcdFont('fonts/Robotron13x21.c', 13, 21) 29 | print('Loading unispace') 30 | unispace = XglcdFont('fonts/Unispace12x24.c', 12, 24) 31 | print('Loading wendy') 32 | wendy = XglcdFont('fonts/Wendy7x8.c', 7, 8) 33 | print('Fonts loaded.') 34 | 35 | text_heights = [11, 9, 15, 24, 8, 7, 21, 24, 8] # Heights of each line 36 | num_lines = len(text_heights) # Number of lines 37 | total_text_height = sum(text_heights) # Total height of all text lines 38 | # Calculate available space to distribute 39 | available_height = display.height - total_text_height 40 | # Calculate the vertical gap between each line 41 | gap_between_lines = available_height // (num_lines + 1) 42 | # Start drawing the text at the first position 43 | y_position = gap_between_lines # Start of first line of text 44 | # Draw each text line with adjusted Y positions 45 | display.draw_text(0, y_position, 'Arcade Pix 9x11', arcadepix, 46 | color565(255, 0, 0)) 47 | y_position += text_heights[0] + gap_between_lines 48 | display.draw_text(0, y_position, 'Bally 7x9', bally, color565(0, 255, 0)) 49 | y_position += text_heights[1] + gap_between_lines 50 | display.draw_text(0, y_position, 'Broadway', broadway, 51 | color565(0, 0, 255)) 52 | y_position += text_heights[2] + gap_between_lines 53 | display.draw_text(0, y_position, 'Espresso', espresso_dolce, 54 | color565(0, 255, 255)) 55 | y_position += text_heights[3] + gap_between_lines 56 | display.draw_text(0, y_position, 'Fixed Font 5x8', fixed_font, 57 | color565(255, 0, 255)) 58 | y_position += text_heights[4] + gap_between_lines 59 | display.draw_text(0, y_position, 'Neato 5x7', neato, color565(255, 255, 0)) 60 | y_position += text_heights[5] + gap_between_lines 61 | display.draw_text(0, y_position, 'ROBOTRON', robotron, 62 | color565(255, 255, 255)) 63 | y_position += text_heights[6] + gap_between_lines 64 | display.draw_text(0, y_position, 'Unispace', unispace, 65 | color565(255, 128, 0)) 66 | y_position += text_heights[7] + gap_between_lines 67 | display.draw_text(0, y_position, 'Wendy 7x8', wendy, color565(255, 0, 128)) 68 | sleep(9) 69 | 70 | display.clear() 71 | y_position = gap_between_lines # Start of first line of text 72 | display.draw_text(0, y_position, 'Arcade Pix 9x11', arcadepix, 73 | color565(255, 0, 0), background=color565(0, 255, 255)) 74 | y_position += text_heights[0] + gap_between_lines 75 | display.draw_text(0, y_position, 'Bally 7x9', bally, 76 | color565(0, 255, 0), background=color565(0, 0, 128)) 77 | y_position += text_heights[1] + gap_between_lines 78 | display.draw_text(0, y_position, 'Broadway', broadway, 79 | color565(0, 0, 255), background=color565(255, 255, 0)) 80 | y_position += text_heights[2] + gap_between_lines 81 | display.draw_text(0, y_position, 'Espresso', espresso_dolce, 82 | color565(0, 255, 255), background=color565(255, 0, 0)) 83 | y_position += text_heights[3] + gap_between_lines 84 | display.draw_text(0, y_position, 'Fixed Font 5x8', fixed_font, 85 | color565(255, 0, 255), background=color565(0, 128, 0)) 86 | y_position += text_heights[4] + gap_between_lines 87 | display.draw_text(0, y_position, 'Neato 5x7', neato, 88 | color565(255, 255, 0), background=color565(0, 0, 255)) 89 | y_position += text_heights[5] + gap_between_lines 90 | display.draw_text(0, y_position, 'ROBOTRON', robotron, 91 | color565(255, 255, 255), 92 | background=color565(128, 128, 128)) 93 | y_position += text_heights[6] + gap_between_lines 94 | display.draw_text(0, y_position, 'Unispace', unispace, 95 | color565(255, 128, 0), background=color565(0, 128, 255)) 96 | y_position += text_heights[7] + gap_between_lines 97 | display.draw_text(0, y_position, 'Wendy 7x8', wendy, 98 | color565(255, 0, 128), 99 | background=color565(255, 255, 255)) 100 | sleep(9) 101 | 102 | display.clear() 103 | # Calculate available horizontal space 104 | available_width = display.width - total_text_height 105 | # Calculate the horizontal gap between each line 106 | gap_between_lines = available_width // (num_lines + 1) 107 | # Starting X position for each line 108 | x_position = gap_between_lines 109 | # Draw each text line with adjusted X positions 110 | display.draw_text(x_position, display.height - 1, 'Arcade Pix 9x11', 111 | arcadepix, color565(255, 0, 0), landscape=True) 112 | x_position += text_heights[0] + gap_between_lines 113 | display.draw_text(x_position, display.height - 1, 'Bally 7x9', bally, 114 | color565(0, 255, 0), landscape=True) 115 | x_position += text_heights[1] + gap_between_lines 116 | display.draw_text(x_position, display.height - 1, 'Broadway 17x15', 117 | broadway, color565(0, 0, 255), landscape=True) 118 | x_position += text_heights[2] + gap_between_lines 119 | display.draw_text(x_position, display.height - 1, 'Espresso', 120 | espresso_dolce, color565(0, 255, 255), landscape=True) 121 | x_position += text_heights[3] + gap_between_lines 122 | display.draw_text(x_position, display.height - 1, 'Fixed Font 5x8', 123 | fixed_font, color565(255, 0, 255), landscape=True) 124 | x_position += text_heights[4] + gap_between_lines 125 | display.draw_text(x_position, display.height - 1, 'Neato 5x7', neato, 126 | color565(255, 255, 0), landscape=True) 127 | x_position += text_heights[5] + gap_between_lines 128 | display.draw_text(x_position, display.height - 1, 'ROBOTRON', 129 | robotron, color565(255, 255, 255), landscape=True) 130 | x_position += text_heights[6] + gap_between_lines 131 | display.draw_text(x_position, display.height - 1, 'Unispace', 132 | unispace, color565(255, 128, 0), landscape=True) 133 | x_position += text_heights[7] + gap_between_lines 134 | display.draw_text(x_position, display.height - 1, 'Wendy 7x8', wendy, 135 | color565(255, 0, 128), landscape=True) 136 | sleep(9) 137 | display.cleanup() 138 | 139 | 140 | test() 141 | -------------------------------------------------------------------------------- /demo_fonts8x8.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (fonts 8x8).""" 2 | from time import sleep 3 | from ili9341 import Display, color565 4 | from machine import Pin, SPI # type: ignore 5 | 6 | 7 | def test(): 8 | """Test code.""" 9 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 10 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17)) 11 | 12 | x_center = display.width // 2 13 | y_center = display.height // 2 14 | 15 | display.draw_text8x8(0, 0, 'Built-in', color565(255, 0, 255)) 16 | display.draw_text8x8(16, 16, 'MicroPython', color565(255, 255, 0)) 17 | display.draw_text8x8(32, 32, '8x8 Font', color565(0, 0, 255)) 18 | display.draw_text8x8(0, y_center - 44, "Rotate = 90", 19 | color565(255, 0, 0), rotate=90) 20 | display.draw_text8x8(x_center - 48, display.height - 9, "Rotate = 180", 21 | color565(0, 255, 255), rotate=180) 22 | display.draw_text8x8(display.width - 9, y_center - 48, "Rotate = 270", 23 | color565(255, 255, 255), rotate=270) 24 | display.draw_text8x8(x_center - 40, 140, "Rotate = 0", 25 | color565(0, 255, 0), background=color565(255, 0, 0)) 26 | display.draw_text8x8(20, y_center - 44, "Rotate = 90", color565(255, 0, 0), 27 | rotate=90, background=color565(0, 255, 0)) 28 | display.draw_text8x8(x_center - 48, display.height - 29, "Rotate = 180", 29 | color565(0, 255, 255), rotate=180, 30 | background=color565(0, 0, 255)) 31 | display.draw_text8x8(display.width - 29, y_center - 48, "Rotate = 270", 32 | color565(255, 255, 255), rotate=270, 33 | background=color565(255, 0, 255)) 34 | sleep(15) 35 | display.cleanup() 36 | 37 | 38 | test() 39 | -------------------------------------------------------------------------------- /demo_fonts8x8_bgcolor.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (fonts 8x8 background color).""" 2 | from time import sleep 3 | from ili9341 import Display, color565 4 | from machine import Pin, SPI # type: ignore 5 | 6 | 7 | def test(): 8 | """Test code.""" 9 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 10 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17)) 11 | 12 | display.draw_text8x8(0, 0, 'Built-in', color565(255, 0, 0)) 13 | display.fill_rectangle(0, 10, 104, 12, color565(255, 0, 0)) 14 | display.draw_text8x8(0, 12, 'Built-in', color565(0, 0, 0), 15 | color565(255, 0, 0)) 16 | 17 | display.draw_text8x8(0, 30, 'MicroPython', color565(0, 255, 0)) 18 | display.fill_rectangle(0, 40, 104, 12, color565(0, 255, 0)) 19 | display.draw_text8x8(0, 42, 'MicroPython', color565(0, 0, 0), 20 | color565(0, 255, 0)) 21 | 22 | display.draw_text8x8(0, 60, '8x8 Font', color565(0, 0, 255)) 23 | display.fill_rectangle(0, 70, 104, 12, color565(0, 0, 255)) 24 | display.draw_text8x8(0, 72, '8x8 Font', color565(0, 0, 0), 25 | color565(0, 0, 255)) 26 | 27 | display.draw_text8x8(0, 90, 'No Background', color565(255, 255, 255)) 28 | display.fill_rectangle(0, 100, 104, 12, color565(255, 255, 255)) 29 | display.draw_text8x8(0, 102, 'No Background', color565(255, 255, 255)) 30 | 31 | y_center = display.height // 2 32 | display.draw_text8x8(display.width - 10, y_center - 48, "Rotate = 270", 33 | color565(0, 255, 255), color565(255, 0, 255), 34 | rotate=270) 35 | 36 | sleep(15) 37 | display.cleanup() 38 | 39 | 40 | test() 41 | -------------------------------------------------------------------------------- /demo_fonts_rotated.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (fonts rotated).""" 2 | from time import sleep 3 | from ili9341 import Display, color565 4 | from machine import Pin, SPI # type: ignore 5 | from xglcd_font import XglcdFont 6 | 7 | 8 | def test(): 9 | """Test code.""" 10 | # Baud rate of 40000000 seems about the max 11 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 12 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17)) 13 | 14 | print('Loading fonts...') 15 | print('Loading arcadepix') 16 | arcadepix = XglcdFont('fonts/ArcadePix9x11.c', 9, 11) 17 | print('loading espressodolce') 18 | espressodolce = XglcdFont('fonts/EspressoDolce18x24.c', 18, 24) 19 | print('Loading neato') 20 | neato = XglcdFont('fonts/Neato5x7.c', 5, 7, letter_count=223) 21 | print('Loading robotron') 22 | robotron = XglcdFont('fonts/Robotron13x21.c', 13, 21) 23 | print('Loading unispace') 24 | unispace = XglcdFont('fonts/Unispace12x24.c', 12, 24) 25 | 26 | # ArcadePix 27 | font_height = arcadepix.height 28 | display.draw_text(0, 0, 29 | 'Portrait', arcadepix, 30 | color565(255, 255, 0), 31 | landscape=False, rotate_180=False) 32 | text_width = arcadepix.measure_text('Landscape') 33 | display.draw_text(0, display.height - 1, 34 | 'Landscape', arcadepix, 35 | color565(255, 0, 0), 36 | landscape=True, rotate_180=False) 37 | text_width = arcadepix.measure_text('Port. Rot. 180') 38 | display.draw_text(display.width - text_width - 1, 39 | display.height - font_height, 40 | 'Port. Rot. 180', arcadepix, 41 | color565(255, 0, 255), 42 | landscape=False, rotate_180=True) 43 | text_width = arcadepix.measure_text('Land. Rot. 180') 44 | display.draw_text(display.width - font_height - 1, text_width, 45 | 'Land. Rot. 180', arcadepix, 46 | color565(0, 0, 255), 47 | landscape=True, rotate_180=True) 48 | sleep(5) 49 | 50 | # Espresso Dolce 51 | display.clear() 52 | font_height = espressodolce.height 53 | display.draw_text(0, 0, 54 | 'PORT.', espressodolce, 55 | color565(255, 255, 0), 56 | landscape=False, rotate_180=False) 57 | text_width = espressodolce.measure_text('LAND.') 58 | display.draw_text(0, display.height - 1, 59 | 'LAND.', espressodolce, 60 | color565(255, 0, 0), 61 | landscape=True, rotate_180=False) 62 | text_width = espressodolce.measure_text('PORT.') 63 | display.draw_text(display.width - text_width - 1, 64 | display.height - font_height, 65 | 'PORT.', espressodolce, 66 | color565(255, 0, 255), 67 | landscape=False, rotate_180=True) 68 | text_width = espressodolce.measure_text('ROT. 180') 69 | display.draw_text(display.width - text_width - 1, 70 | display.height - font_height * 2, 71 | 'ROT. 180', espressodolce, 72 | color565(255, 0, 255), 73 | landscape=False, rotate_180=True) 74 | text_width = espressodolce.measure_text('LAND.') 75 | display.draw_text(display.width - font_height - 1, text_width, 76 | 'LAND.', espressodolce, 77 | color565(0, 0, 255), 78 | landscape=True, rotate_180=True) 79 | text_width = espressodolce.measure_text('ROT. 180') 80 | display.draw_text(display.width - font_height * 2 - 1, text_width, 81 | 'ROT. 180', espressodolce, 82 | color565(0, 0, 255), 83 | landscape=True, rotate_180=True) 84 | sleep(5) 85 | 86 | # Neato 87 | display.clear() 88 | font_height = neato.height 89 | display.draw_text(0, 0, 90 | 'Portrait', neato, 91 | color565(255, 255, 0), 92 | landscape=False, rotate_180=False) 93 | text_width = neato.measure_text('Landscape') 94 | display.draw_text(0, display.height - 1, 95 | 'Landscape', neato, 96 | color565(255, 0, 0), 97 | landscape=True, rotate_180=False) 98 | text_width = neato.measure_text('Portrait Rotate 180') 99 | display.draw_text(display.width - text_width - 1, 100 | display.height - font_height, 101 | 'Portrait Rotate 180', neato, 102 | color565(255, 0, 255), 103 | landscape=False, rotate_180=True) 104 | text_width = neato.measure_text('Landscape Rotate 180') 105 | display.draw_text(display.width - font_height - 1, text_width, 106 | 'Landscape Rotate 180', neato, 107 | color565(0, 0, 255), 108 | landscape=True, rotate_180=True) 109 | sleep(5) 110 | 111 | # Robotron 112 | display.clear() 113 | font_height = robotron.height 114 | display.draw_text(0, 0, 115 | 'PORT.', robotron, 116 | color565(255, 255, 0), 117 | landscape=False, rotate_180=False) 118 | text_width = robotron.measure_text('LAND.') 119 | display.draw_text(0, display.height - 1, 120 | 'LAND.', robotron, 121 | color565(255, 0, 0), 122 | landscape=True, rotate_180=False) 123 | text_width = robotron.measure_text('PORT.') 124 | display.draw_text(display.width - text_width - 1, 125 | display.height - font_height, 126 | 'PORT.', robotron, 127 | color565(255, 0, 255), 128 | landscape=False, rotate_180=True) 129 | text_width = robotron.measure_text('ROT. 180') 130 | display.draw_text(display.width - text_width - 1, 131 | display.height - font_height * 2, 132 | 'ROT. 180', robotron, 133 | color565(255, 0, 255), 134 | landscape=False, rotate_180=True) 135 | text_width = robotron.measure_text('LAND.') 136 | display.draw_text(display.width - font_height - 1, text_width, 137 | 'LAND.', robotron, 138 | color565(0, 0, 255), 139 | landscape=True, rotate_180=True) 140 | text_width = robotron.measure_text('ROT. 180') 141 | display.draw_text(display.width - font_height * 2 - 1, text_width, 142 | 'ROT. 180', robotron, 143 | color565(0, 0, 255), 144 | landscape=True, rotate_180=True) 145 | sleep(5) 146 | 147 | # Unispace 148 | display.clear() 149 | font_height = unispace.height 150 | display.draw_text(0, 0, 151 | 'PORT. ', unispace, 152 | color565(255, 255, 0), 153 | background=color565(255, 0, 0), 154 | landscape=False, rotate_180=False) 155 | text_width = unispace.measure_text('LAND. ') 156 | display.draw_text(0, display.height - 1, 157 | 'LAND. ', unispace, 158 | color565(255, 0, 0), 159 | background=color565(255, 255, 0), 160 | landscape=True, rotate_180=False) 161 | text_width = unispace.measure_text('PORT. ') 162 | display.draw_text(display.width - text_width - 1, 163 | display.height - font_height, 164 | 'PORT. ', unispace, 165 | color565(255, 0, 255), 166 | background=color565(0, 255, 0), 167 | landscape=False, rotate_180=True) 168 | text_width = unispace.measure_text('ROT. 180') 169 | display.draw_text(display.width - text_width - 1, 170 | display.height - font_height * 2, 171 | 'ROT. 180', unispace, 172 | color565(255, 0, 255), 173 | background=color565(0, 255, 0), 174 | landscape=False, rotate_180=True) 175 | text_width = unispace.measure_text('LAND. ') 176 | display.draw_text(display.width - font_height - 1, text_width, 177 | 'LAND. ', unispace, 178 | color565(0, 0, 255), 179 | background=color565(255, 255, 0), 180 | landscape=True, rotate_180=True) 181 | text_width = unispace.measure_text('ROT. 180') 182 | display.draw_text(display.width - font_height * 2 - 1, text_width, 183 | 'ROT. 180', unispace, 184 | color565(0, 0, 255), 185 | background=color565(255, 255, 0), 186 | landscape=True, rotate_180=True) 187 | 188 | sleep(10) 189 | display.cleanup() 190 | 191 | 192 | test() 193 | -------------------------------------------------------------------------------- /demo_images.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (images).""" 2 | from time import sleep 3 | from ili9341 import Display 4 | from machine import Pin, SPI # type: ignore 5 | 6 | 7 | def test(): 8 | """Test code.""" 9 | # Baud rate of 40000000 seems about the max 10 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 11 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17)) 12 | 13 | if display.width >= 240 and display.height >= 240: 14 | display.draw_image('images/RaspberryPiWB128x128.raw', 0, 0, 128, 128) 15 | sleep(2) 16 | display.draw_image('images/MicroPython128x128.raw', 0, 129, 128, 128) 17 | sleep(2) 18 | display.draw_image('images/Tabby128x128.raw', 112, 0, 128, 128) 19 | sleep(2) 20 | display.draw_image('images/Tortie128x128.raw', 112, 129, 128, 128) 21 | else: 22 | display.draw_image('images/RaspberryPiWB128x128.raw', 0, 0, 128, 128) 23 | sleep(4) 24 | display.draw_image('images/MicroPython128x128.raw', 0, 0, 128, 128) 25 | sleep(4) 26 | display.draw_image('images/Tabby128x128.raw', 0, 0, 128, 128) 27 | sleep(4) 28 | display.draw_image('images/Tortie128x128.raw', 0, 0, 128, 128) 29 | 30 | sleep(9) 31 | 32 | display.cleanup() 33 | 34 | 35 | test() 36 | -------------------------------------------------------------------------------- /demo_inversion.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (inversion).""" 2 | from time import sleep 3 | from ili9341 import Display, color565 4 | from machine import Pin, SPI # type: ignore 5 | 6 | 7 | def test(): 8 | """Test code.""" 9 | # Baud rate of 40000000 seems about the max 10 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 11 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17)) 12 | 13 | display.clear() 14 | display.fill_rectangle(4, 4, display.width // 3, display.height // 4, 15 | color565(255, 0, 0)) 16 | display.fill_polygon(3, display.width // 2, display.height // 2, 17 | display.height // 8, color565(0, 255, 0), rotate=15) 18 | display.fill_circle(display.width - (display.width // 4), 19 | display.height - (display.height // 5), 20 | display.height // 6, color565(0, 0, 255)) 21 | display.draw_image('images/Python41x49.raw', display.width - 49, 0, 41, 49) 22 | 23 | sleep(2) 24 | display.invert() 25 | 26 | sleep(5) 27 | display.invert(False) 28 | 29 | sleep(2) 30 | display.cleanup() 31 | 32 | 33 | test() 34 | -------------------------------------------------------------------------------- /demo_mirror.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (mirror).""" 2 | from time import sleep 3 | from ili9341 import Display, color565 4 | from machine import Pin, SPI # type: ignore 5 | 6 | # Define colors 7 | COLOR_RED = color565(255, 0, 0) 8 | COLOR_BLUE = color565(0, 0, 255) 9 | COLOR_GREEN = color565(0, 255, 0) 10 | COLOR_YELLOW = color565(255, 255, 0) 11 | COLOR_PURPLE = color565(128, 0, 128) 12 | COLOR_CYAN = color565(0, 255, 255) 13 | COLOR_MAGENTA = color565(255, 0, 255) 14 | COLOR_ORANGE = color565(255, 165, 0) 15 | COLOR_WHITE = color565(255, 255, 255) 16 | COLOR_LAVENDER = color565(255, 165, 255) 17 | 18 | MIRROR_ROTATE = ((False, 0), 19 | (False, 90), 20 | (False, 180), 21 | (False, 270), 22 | (True, 0), 23 | (True, 90), 24 | (True, 180), 25 | (True, 270)) 26 | 27 | 28 | def test(): 29 | """Test code.""" 30 | for mirror, rotation in MIRROR_ROTATE: 31 | # Baud rate of 40000000 seems about the max 32 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 33 | # Set width & height based on rotation 34 | if rotation == 0 or rotation == 180: 35 | width, height = 240, 320 36 | else: 37 | width, height = 320, 240 38 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17), 39 | width=width, height=height, 40 | rotation=rotation, mirror=mirror) 41 | display.clear() 42 | 43 | # Outer Vertical Line 44 | display.draw_line(41, 21, 41, 239, COLOR_RED) 45 | 46 | # Inner Vertical Line 47 | display.draw_line(61, 41, 61, 239, COLOR_BLUE) 48 | 49 | # Outer Top Horizontal Line 50 | display.draw_line(41, 21, 181, 21, COLOR_GREEN) 51 | 52 | # Inner Top Horizontal Line 53 | display.draw_line(61, 41, 181, 41, COLOR_YELLOW) 54 | 55 | # Outer Middle Horizontal Line 56 | display.draw_line(62, 130, 161, 130, COLOR_PURPLE) 57 | 58 | # Inner Middle Horizontal Line 59 | display.draw_line(62, 111, 161, 111, COLOR_CYAN) 60 | 61 | # End Cap on Outer Vertical Line (Bottom) 62 | display.draw_line(41, 239, 61, 239, COLOR_MAGENTA) 63 | 64 | # End Cap on Outer Top Horizontal Line (Right) 65 | display.draw_line(181, 21, 181, 41, COLOR_ORANGE) 66 | 67 | # End Caps on Inner Lines (Middle) 68 | display.draw_line(162, 111, 162, 130, COLOR_WHITE) 69 | 70 | # Display rotation and mirror values at bottom of display 71 | text = f"Rotation: {rotation}, Mirror: {mirror}" 72 | display.draw_text8x8( 73 | (width - len(text) * 8) // 2 if width < 320 else 90, 74 | height - 50 if width < 320 else height - 9, 75 | text, 76 | COLOR_LAVENDER) 77 | 78 | sleep(5) 79 | display.cleanup() 80 | 81 | 82 | test() 83 | -------------------------------------------------------------------------------- /demo_orientation.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (orientation).""" 2 | from time import sleep 3 | from ili9341 import Display, color565 4 | from machine import Pin, SPI # type: ignore 5 | from xglcd_font import XglcdFont 6 | 7 | 8 | def test(): 9 | """Test code.""" 10 | print('Loading Espresso Dolce font...') 11 | espresso_dolce = XglcdFont('fonts/EspressoDolce18x24.c', 18, 24) 12 | print('Font loaded.') 13 | # Baud rate of 40000000 seems about the max 14 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 15 | 16 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17), 17 | width=240, height=320, rotation=0) 18 | display.draw_text(0, 0, 'Espresso Dolce 18x24', espresso_dolce, 19 | color565(0, 255, 255)) 20 | display.draw_text(0, 319, 'Espresso Dolce 18x24', espresso_dolce, 21 | color565(255, 255, 0), landscape=True) 22 | sleep(5) 23 | 24 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17), 25 | width=320, height=240, rotation=90) 26 | display.draw_text(0, 215, 'Espresso Dolce 18x24', espresso_dolce, 27 | color565(255, 0, 255)) 28 | display.draw_text(295, 239, 'Espresso Dolce 18x24', espresso_dolce, 29 | color565(255, 255, 255), landscape=True) 30 | sleep(5) 31 | 32 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17), 33 | width=240, height=320, rotation=180) 34 | display.draw_text(0, 0, 'Espresso Dolce 18x24', espresso_dolce, 35 | color565(0, 0, 255)) 36 | display.draw_text(0, 319, 'Espresso Dolce 18x24', espresso_dolce, 37 | color565(255, 0, 0), landscape=True) 38 | sleep(5) 39 | 40 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17), 41 | width=320, height=240, rotation=270) 42 | display.draw_text(0, 215, 'Espresso Dolce 18x24', espresso_dolce, 43 | color565(225, 0, 128)) 44 | display.draw_text(295, 239, 'Espresso Dolce 18x24', espresso_dolce, 45 | color565(0, 255, 0), landscape=True) 46 | sleep(5) 47 | display.cleanup() 48 | 49 | 50 | test() 51 | -------------------------------------------------------------------------------- /demo_pbm.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (PBM - Portable Bitmap).""" 2 | from ili9341 import Display, color565 3 | from struct import pack, unpack 4 | from framebuf import FrameBuffer, MONO_HLSB, RGB565 # type: ignore 5 | from machine import Pin, SPI # type: ignore 6 | from time import sleep 7 | 8 | 9 | def create_palette(foreground, background=0, invert=False): 10 | """Create framebuffer palette to translate between MONO_HLSB and RGB565. 11 | 12 | Args: 13 | foreground(int): Foreground color in RGB656 format 14 | background(int): Background color in RGB656 format (default Black) 15 | invert(bool): Invert foreground and background (default False) 16 | Returns: 17 | FrameBuffer: Color palette 18 | """ 19 | # Need to swap endian colors 20 | foreground = unpack('>H', pack('H', pack('= self.screen_width: 47 | self.x_speed = -x_speed 48 | elif x - x_speed < 0: 49 | self.x_speed = x_speed 50 | 51 | if y + h + y_speed >= self.screen_height: 52 | self.y_speed = -y_speed 53 | elif y - y_speed <= 0: 54 | self.y_speed = y_speed 55 | 56 | self.prev_x = x 57 | self.prev_y = y 58 | 59 | self.x = x + self.x_speed 60 | self.y = y + self.y_speed 61 | 62 | def draw(self): 63 | """Draw sprite.""" 64 | x = self.x 65 | y = self.y 66 | prev_x = self.prev_x 67 | prev_y = self.prev_y 68 | w = self.w 69 | h = self.h 70 | x_speed = abs(self.x_speed) 71 | y_speed = abs(self.y_speed) 72 | 73 | # Determine direction and remove previous portion of sprite 74 | if prev_x > x: 75 | # Left 76 | self.display.fill_vrect(x + w, prev_y, x_speed, h, 0) 77 | elif prev_x < x: 78 | # Right 79 | self.display.fill_vrect(x - x_speed, prev_y, x_speed, h, 0) 80 | if prev_y > y: 81 | # Upward 82 | self.display.fill_vrect(prev_x, y + h, w, y_speed, 0) 83 | elif prev_y < y: 84 | # Downward 85 | self.display.fill_vrect(prev_x, y - y_speed, w, y_speed, 0) 86 | 87 | self.display.draw_sprite(self.buf, x, y, w, h) 88 | 89 | 90 | def test(): 91 | """Bouncing sprite.""" 92 | try: 93 | # Baud rate of 40000000 seems about the max 94 | spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 95 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17)) 96 | display.clear() 97 | 98 | # Load sprite 99 | logo = BouncingSprite('images/Python41x49.raw', 100 | 41, 49, 240, 320, 1, display) 101 | 102 | while True: 103 | timer = ticks_us() 104 | logo.update_pos() 105 | logo.draw() 106 | # Attempt to set framerate to 30 FPS 107 | timer_dif = 33333 - ticks_diff(ticks_us(), timer) 108 | if timer_dif > 0: 109 | sleep_us(timer_dif) 110 | 111 | except KeyboardInterrupt: 112 | display.cleanup() 113 | 114 | 115 | test() 116 | -------------------------------------------------------------------------------- /demo_st7735s.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (ST7735s).""" 2 | from time import sleep 3 | from ili9341 import Display 4 | from xglcd_font import XglcdFont 5 | from machine import Pin, SPI # type: ignore 6 | from micropython import const # type: ignore 7 | 8 | WHITE = const(0XFFFF) # (255, 255, 255) 9 | RED = const(0XF800) # (255, 0, 0) 10 | GREEN = const(0X07E0) # (0, 255, 0) 11 | BLUE = const(0X001F) # (0, 0, 255) 12 | INDIGO = const(0X801F) # (128, 0, 255) 13 | 14 | 15 | def test(): 16 | """Test code.""" 17 | # Baud rate of 40000000 seems about the max 18 | # spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 19 | spi = SPI(1, baudrate=40000000, sck=Pin(12), mosi=Pin(11)) 20 | display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17), 21 | width=128, height=160, 22 | mirror=True, bgr=False, gamma=True, 23 | x_offset=2, y_offset=1) 24 | 25 | robotron = XglcdFont('fonts/Robotron13x21.c', 13, 21) 26 | 27 | display.clear() 28 | 29 | display.draw_rectangle(0, 0, 128, 160, WHITE) 30 | 31 | display.draw_text8x8(0, 0, 'Top-Left', INDIGO) 32 | 33 | display.draw_text(20, 30, 'RED', robotron, RED) 34 | display.draw_text(20, 70, 'GREEN', robotron, GREEN) 35 | display.draw_text(20, 110, 'BLUE', robotron, BLUE) 36 | 37 | display.draw_image('images/Python41x49.raw', 86, 110, 41, 49) 38 | 39 | sleep(15) 40 | display.cleanup() 41 | 42 | 43 | test() 44 | -------------------------------------------------------------------------------- /demo_touch.py: -------------------------------------------------------------------------------- 1 | """ILI9341 demo (simple touch demo).""" 2 | from ili9341 import Display, color565 3 | from xpt2046 import Touch 4 | from machine import idle, Pin, SPI # type: ignore 5 | 6 | 7 | class Demo(object): 8 | """Touchscreen simple demo.""" 9 | CYAN = color565(0, 255, 255) 10 | PURPLE = color565(255, 0, 255) 11 | WHITE = color565(255, 255, 255) 12 | 13 | def __init__(self, display, spi2): 14 | """Initialize box. 15 | 16 | Args: 17 | display (ILI9341): display object 18 | spi2 (SPI): SPI bus 19 | """ 20 | self.display = display 21 | self.touch = Touch(spi2, cs=Pin(5), int_pin=Pin(0), 22 | int_handler=self.touchscreen_press) 23 | # Display initial message 24 | self.display.draw_text8x8(self.display.width // 2 - 32, 25 | self.display.height - 9, 26 | "TOUCH ME", 27 | self.WHITE, 28 | background=self.PURPLE) 29 | 30 | # A small 5x5 sprite for the dot 31 | self.dot = bytearray(b'\x00\x00\x07\xE0\xF8\x00\x07\xE0\x00\x00\x07\xE0\xF8\x00\xF8\x00\xF8\x00\x07\xE0\xF8\x00\xF8\x00\xF8\x00\xF8\x00\xF8\x00\x07\xE0\xF8\x00\xF8\x00\xF8\x00\x07\xE0\x00\x00\x07\xE0\xF8\x00\x07\xE0\x00\x00') 32 | 33 | def touchscreen_press(self, x, y): 34 | """Process touchscreen press events.""" 35 | # Y needs to be flipped 36 | y = (self.display.height - 1) - y 37 | # Display coordinates 38 | self.display.draw_text8x8(self.display.width // 2 - 32, 39 | self.display.height - 9, 40 | "{0:03d}, {1:03d}".format(x, y), 41 | self.CYAN) 42 | # Draw dot 43 | self.display.draw_sprite(self.dot, x - 2, y - 2, 5, 5) 44 | 45 | 46 | def test(): 47 | """Test code.""" 48 | spi1 = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13)) 49 | display = Display(spi1, dc=Pin(4), cs=Pin(16), rst=Pin(17)) 50 | spi2 = SPI(2, baudrate=1000000, sck=Pin(18), mosi=Pin(23), miso=Pin(19)) 51 | 52 | Demo(display, spi2) 53 | 54 | try: 55 | while True: 56 | idle() 57 | 58 | except KeyboardInterrupt: 59 | print("\nCtrl-C pressed. Cleaning up and exiting...") 60 | finally: 61 | display.cleanup() 62 | 63 | 64 | test() 65 | -------------------------------------------------------------------------------- /fonts/ArcadePix9x11.c: -------------------------------------------------------------------------------- 1 | 2 | //WARNING: This Font Require X-GLCD Lib. 3 | // You can not use it with MikroE GLCD Lib. 4 | 5 | //Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0 6 | //MikroElektronika 2011 7 | //http://www.mikroe.com 8 | 9 | //GLCD FontName : Arcadepix9x11 10 | //Based on a font created by Reekee of Dimenzioned - reekee@00.co.uk 11 | //GLCD FontSize : 9 x 11 12 | 13 | const unsigned short Arcadepix9x11[] = { 14 | 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 15 | 0x03, 0xBE, 0x01, 0xBE, 0x01, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ! 16 | 0x07, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char " 17 | 0x07, 0x00, 0x00, 0x48, 0x00, 0xFC, 0x00, 0x48, 0x00, 0xFC, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char # 18 | 0x06, 0x98, 0x00, 0xA4, 0x00, 0xA6, 0x01, 0xA4, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char $ 19 | 0x08, 0x04, 0x00, 0x8A, 0x00, 0x44, 0x00, 0x20, 0x00, 0x10, 0x00, 0x88, 0x00, 0x44, 0x01, 0x80, 0x00, 0x00, 0x00, // Code for char % 20 | 0x07, 0xC0, 0x00, 0xE4, 0x01, 0x3E, 0x01, 0x32, 0x01, 0x4C, 0x01, 0xC4, 0x00, 0xA0, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char & 21 | 0x02, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ' 22 | 0x03, 0xFC, 0x00, 0xFE, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ( 23 | 0x03, 0x02, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ) 24 | 0x06, 0x00, 0x00, 0xAC, 0x00, 0x70, 0x00, 0xFE, 0x01, 0x78, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char * 25 | 0x07, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xFC, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char + 26 | 0x03, 0x00, 0x02, 0x80, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char , 27 | 0x07, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char - 28 | 0x02, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char . 29 | 0x06, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x30, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char / 30 | 0x08, 0x38, 0x00, 0xFC, 0x00, 0x84, 0x00, 0x02, 0x01, 0x02, 0x01, 0x06, 0x01, 0xFC, 0x00, 0x38, 0x00, 0x00, 0x00, // Code for char 0 31 | 0x07, 0x00, 0x01, 0x04, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char 1 32 | 0x08, 0x84, 0x01, 0xC6, 0x01, 0xE2, 0x01, 0x62, 0x01, 0x62, 0x01, 0x72, 0x01, 0x3E, 0x01, 0x0C, 0x01, 0x00, 0x00, // Code for char 2 33 | 0x08, 0x80, 0x00, 0x82, 0x01, 0x22, 0x01, 0x22, 0x01, 0x32, 0x01, 0x3E, 0x01, 0xE6, 0x01, 0xC2, 0x00, 0x00, 0x00, // Code for char 3 34 | 0x08, 0x60, 0x00, 0x70, 0x00, 0x4C, 0x00, 0x44, 0x00, 0x46, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x40, 0x00, 0x00, 0x00, // Code for char 4 35 | 0x08, 0x8E, 0x00, 0x8E, 0x01, 0x0A, 0x01, 0x0A, 0x01, 0x0A, 0x01, 0x0A, 0x01, 0xFA, 0x01, 0xE2, 0x00, 0x00, 0x00, // Code for char 5 36 | 0x08, 0xF8, 0x00, 0xFC, 0x01, 0x26, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0xE2, 0x01, 0xC2, 0x00, 0x00, 0x00, // Code for char 6 37 | 0x08, 0x06, 0x00, 0x06, 0x00, 0xC2, 0x01, 0xE2, 0x01, 0x22, 0x00, 0x1A, 0x00, 0x0E, 0x00, 0x06, 0x00, 0x00, 0x00, // Code for char 7 38 | 0x08, 0xCC, 0x00, 0x3E, 0x01, 0x32, 0x01, 0x22, 0x01, 0x22, 0x01, 0x32, 0x01, 0xCC, 0x01, 0xC0, 0x00, 0x00, 0x00, // Code for char 8 39 | 0x08, 0x0C, 0x00, 0x3E, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0xA2, 0x01, 0xFE, 0x00, 0x7C, 0x00, 0x00, 0x00, // Code for char 9 40 | 0x02, 0x98, 0x01, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char : 41 | 0x03, 0x00, 0x02, 0x98, 0x03, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ; 42 | 0x05, 0x00, 0x00, 0x20, 0x00, 0x70, 0x00, 0xCC, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char < 43 | 0x07, 0x00, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char = 44 | 0x05, 0x00, 0x00, 0x84, 0x00, 0xCC, 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char > 45 | 0x08, 0x0C, 0x00, 0x0E, 0x00, 0x02, 0x05, 0x02, 0x05, 0x82, 0x00, 0xC2, 0x00, 0x7E, 0x00, 0x1C, 0x00, 0x00, 0x00, // Code for char ? 46 | 0x09, 0x00, 0x00, 0xF8, 0x00, 0x04, 0x01, 0x72, 0x02, 0x8A, 0x02, 0x8A, 0x02, 0x92, 0x00, 0xE2, 0x00, 0xFC, 0x01, // Code for char @ 47 | 0x08, 0xF8, 0x01, 0xFC, 0x01, 0x46, 0x00, 0x42, 0x00, 0x42, 0x00, 0x46, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0x00, 0x00, // Code for char A 48 | 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0xFE, 0x01, 0xCC, 0x00, 0x00, 0x00, // Code for char B 49 | 0x08, 0x38, 0x00, 0xFC, 0x00, 0x86, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x86, 0x01, 0x84, 0x00, 0x00, 0x00, // Code for char C 50 | 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x86, 0x01, 0xFC, 0x00, 0x70, 0x00, 0x00, 0x00, // Code for char D 51 | 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x02, 0x01, 0x00, 0x00, // Code for char E 52 | 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x02, 0x00, 0x00, 0x00, // Code for char F 53 | 0x08, 0x70, 0x00, 0xFC, 0x00, 0x86, 0x01, 0x02, 0x01, 0x02, 0x01, 0x22, 0x01, 0xE2, 0x01, 0xE2, 0x01, 0x00, 0x00, // Code for char G 54 | 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00, // Code for char H 55 | 0x07, 0x02, 0x01, 0x02, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char I 56 | 0x08, 0xC0, 0x00, 0xC0, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFE, 0x01, 0xFE, 0x00, 0x00, 0x00, // Code for char J 57 | 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x60, 0x00, 0x70, 0x00, 0xD8, 0x00, 0xCC, 0x01, 0x86, 0x01, 0x02, 0x01, 0x00, 0x00, // Code for char K 58 | 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, // Code for char L 59 | 0x08, 0x00, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x1C, 0x00, 0x38, 0x00, 0x1C, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00, // Code for char M 60 | 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00, // Code for char N 61 | 0x08, 0xFC, 0x00, 0xFE, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x00, // Code for char O 62 | 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x7E, 0x00, 0x1C, 0x00, 0x00, 0x00, // Code for char P 63 | 0x08, 0xFC, 0x00, 0xFE, 0x01, 0x02, 0x01, 0x42, 0x01, 0x42, 0x01, 0xC2, 0x01, 0xFE, 0x00, 0x7C, 0x01, 0x00, 0x00, // Code for char Q 64 | 0x08, 0xFE, 0x01, 0xFE, 0x01, 0x42, 0x00, 0x42, 0x00, 0xC2, 0x00, 0xF2, 0x01, 0xBE, 0x01, 0x3C, 0x01, 0x00, 0x00, // Code for char R 65 | 0x08, 0x8C, 0x00, 0xBE, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x26, 0x01, 0xE4, 0x01, 0xC0, 0x00, 0x00, 0x00, // Code for char S 66 | 0x07, 0x02, 0x00, 0x02, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char T 67 | 0x08, 0xFE, 0x00, 0xFE, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFE, 0x01, 0xFE, 0x00, 0x00, 0x00, // Code for char U 68 | 0x08, 0x00, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0xE0, 0x00, 0xC0, 0x01, 0xE0, 0x00, 0x7E, 0x00, 0x3E, 0x00, 0x00, 0x00, // Code for char V 69 | 0x08, 0x00, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0xE0, 0x00, 0x38, 0x00, 0xE0, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00, // Code for char W 70 | 0x07, 0x86, 0x01, 0xCE, 0x01, 0xFC, 0x00, 0x38, 0x00, 0xFC, 0x00, 0xCE, 0x01, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char X 71 | 0x06, 0x1E, 0x00, 0x3E, 0x00, 0xE0, 0x01, 0xE0, 0x01, 0x3E, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Y 72 | 0x08, 0x82, 0x01, 0xC2, 0x01, 0xE2, 0x01, 0x72, 0x01, 0x3A, 0x01, 0x1E, 0x01, 0x0E, 0x01, 0x06, 0x01, 0x00, 0x00, // Code for char Z 73 | 0x04, 0xFE, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char [ 74 | 0x06, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char BackSlash 75 | 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ] 76 | 0x07, 0x10, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ^ 77 | 0x08, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, // Code for char _ 78 | 0x05, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ` 79 | 0x07, 0xC0, 0x00, 0xE4, 0x01, 0x24, 0x01, 0x24, 0x01, 0x24, 0x01, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char a 80 | 0x07, 0xFE, 0x01, 0xFE, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0x01, 0xF8, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char b 81 | 0x07, 0xF8, 0x00, 0xFC, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x8C, 0x01, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char c 82 | 0x07, 0xF0, 0x00, 0xF8, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char d 83 | 0x07, 0xF0, 0x00, 0xFC, 0x01, 0x44, 0x01, 0x44, 0x01, 0x44, 0x01, 0x7C, 0x01, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char e 84 | 0x06, 0x08, 0x00, 0xFC, 0x01, 0xFE, 0x01, 0x0A, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char f 85 | 0x07, 0xF8, 0x00, 0xFC, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0xFC, 0x07, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, // Code for char g 86 | 0x07, 0xFE, 0x01, 0xFE, 0x01, 0x18, 0x00, 0x08, 0x00, 0x08, 0x00, 0xF8, 0x01, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char h 87 | 0x03, 0x04, 0x00, 0xFD, 0x01, 0xFD, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char i 88 | 0x05, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0xFD, 0x07, 0xFD, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char j 89 | 0x06, 0xFE, 0x01, 0xFE, 0x01, 0x40, 0x00, 0xE0, 0x00, 0xB8, 0x01, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char k 90 | 0x03, 0x02, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char l 91 | 0x08, 0x00, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0x7C, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0x00, 0x00, // Code for char m 92 | 0x07, 0xFC, 0x01, 0xFC, 0x01, 0x0C, 0x00, 0x04, 0x00, 0x04, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char n 93 | 0x07, 0xF8, 0x00, 0xFC, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char o 94 | 0x07, 0xFC, 0x07, 0xFC, 0x07, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char p 95 | 0x07, 0xF8, 0x00, 0xFC, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFC, 0x07, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, // Code for char q 96 | 0x07, 0xFC, 0x01, 0xFC, 0x01, 0x0C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char r 97 | 0x07, 0x88, 0x00, 0xBC, 0x01, 0x24, 0x01, 0x24, 0x01, 0x24, 0x01, 0xE4, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char s 98 | 0x05, 0x04, 0x00, 0xFE, 0x00, 0xFE, 0x01, 0x04, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char t 99 | 0x07, 0xFC, 0x00, 0xFC, 0x01, 0x00, 0x01, 0x00, 0x01, 0x80, 0x01, 0xFC, 0x01, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char u 100 | 0x06, 0x7C, 0x00, 0xFC, 0x00, 0x80, 0x01, 0x80, 0x01, 0xFC, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char v 101 | 0x07, 0xFC, 0x00, 0xFC, 0x01, 0xE0, 0x01, 0xF0, 0x00, 0xE0, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char w 102 | 0x07, 0x84, 0x01, 0xCC, 0x01, 0x78, 0x00, 0x30, 0x00, 0x78, 0x00, 0xCC, 0x01, 0x84, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char x 103 | 0x07, 0xFC, 0x00, 0xFC, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0xFC, 0x07, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, // Code for char y 104 | 0x07, 0x84, 0x01, 0xC4, 0x01, 0xC4, 0x01, 0x64, 0x01, 0x3C, 0x01, 0x1C, 0x01, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char z 105 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char { 106 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char | 107 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char } 108 | 0x08, 0x20, 0x00, 0x38, 0x00, 0x08, 0x00, 0x18, 0x00, 0x20, 0x00, 0x20, 0x00, 0x38, 0x00, 0x08, 0x00, 0x00, 0x00, // Code for char ~ 109 | 0x02, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Code for char  110 | }; 111 | 112 | -------------------------------------------------------------------------------- /fonts/Bally5x8.c: -------------------------------------------------------------------------------- 1 | 2 | //WARNING: This Font Require X-GLCD Lib. 3 | // You can not use it with MikroE GLCD Lib. 4 | 5 | //Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0 6 | //MikroElektronika 2011 7 | //http://www.mikroe.com 8 | 9 | //GLCD FontName : Bally5x8 10 | //Created by rdagger based on original Bally Astrocade Basic font 11 | //GLCD FontSize : 5 x 8 12 | 13 | const unsigned short Bally5x8[] = { 14 | 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 15 | 0x05, 0x00, 0x00, 0x5F, 0x00, 0x00, // Code for char ! 16 | 0x05, 0x00, 0x07, 0x00, 0x07, 0x00, // Code for char " 17 | 0x05, 0x14, 0x7F, 0x14, 0x7F, 0x14, // Code for char # 18 | 0x05, 0x24, 0x2A, 0x6B, 0x2A, 0x12, // Code for char $ 19 | 0x05, 0x23, 0x13, 0x08, 0x64, 0x62, // Code for char % 20 | 0x05, 0x36, 0x49, 0x55, 0x22, 0x50, // Code for char & 21 | 0x05, 0x00, 0x07, 0x07, 0x00, 0x00, // Code for char ' 22 | 0x05, 0x00, 0x3E, 0x41, 0x00, 0x00, // Code for char ( 23 | 0x05, 0x00, 0x00, 0x41, 0x3E, 0x00, // Code for char ) 24 | 0x05, 0x22, 0x14, 0x08, 0x14, 0x22, // Code for char * Multiply Symbol 25 | 0x05, 0x08, 0x08, 0x3E, 0x08, 0x08, // Code for char + 26 | 0x05, 0x58, 0x38, 0x00, 0x00, 0x00, // Code for char , 27 | 0x05, 0x08, 0x08, 0x08, 0x08, 0x08, // Code for char - 28 | 0x05, 0x00, 0x60, 0x60, 0x00, 0x00, // Code for char . 29 | 0x05, 0x20, 0x10, 0x08, 0x04, 0x02, // Code for char / 30 | 0x05, 0x3E, 0x41, 0x41, 0x41, 0x3E, // Code for char 0 31 | 0x05, 0x00, 0x42, 0x7F, 0x40, 0x00, // Code for char 1 32 | 0x05, 0x72, 0x49, 0x49, 0x49, 0x46, // Code for char 2 33 | 0x05, 0x22, 0x41, 0x49, 0x49, 0x36, // Code for char 3 34 | 0x05, 0x18, 0x14, 0x12, 0x7F, 0x10, // Code for char 4 35 | 0x05, 0x27, 0x45, 0x45, 0x45, 0x39, // Code for char 5 36 | 0x05, 0x3C, 0x4A, 0x49, 0x49, 0x30, // Code for char 6 37 | 0x05, 0x01, 0x71, 0x09, 0x05, 0x03, // Code for char 7 38 | 0x05, 0x36, 0x49, 0x49, 0x49, 0x36, // Code for char 8 39 | 0x05, 0x06, 0x49, 0x49, 0x29, 0x1E, // Code for char 9 40 | 0x05, 0x00, 0x36, 0x36, 0x00, 0x00, // Code for char : 41 | 0x05, 0x00, 0x5B, 0x3B, 0x00, 0x00, // Code for char ; 42 | 0x05, 0x08, 0x14, 0x22, 0x41, 0x00, // Code for char < 43 | 0x05, 0x14, 0x14, 0x14, 0x14, 0x14, // Code for char = 44 | 0x05, 0x00, 0x41, 0x22, 0x14, 0x08, // Code for char > 45 | 0x05, 0x02, 0x01, 0x51, 0x09, 0x06, // Code for char ? 46 | 0x05, 0x3E, 0x41, 0x5D, 0x55, 0x1E, // Code for char @ 47 | 0x05, 0x7E, 0x09, 0x09, 0x09, 0x7E, // Code for char A 48 | 0x05, 0x7F, 0x49, 0x49, 0x49, 0x36, // Code for char B 49 | 0x05, 0x3E, 0x41, 0x41, 0x41, 0x22, // Code for char C 50 | 0x05, 0x7F, 0x41, 0x41, 0x41, 0x3E, // Code for char D 51 | 0x05, 0x7F, 0x49, 0x49, 0x41, 0x41, // Code for char E 52 | 0x05, 0x7F, 0x09, 0x09, 0x01, 0x01, // Code for char F 53 | 0x05, 0x3E, 0x41, 0x41, 0x51, 0x72, // Code for char G 54 | 0x05, 0x7F, 0x08, 0x08, 0x08, 0x7F, // Code for char H 55 | 0x05, 0x00, 0x41, 0x7F, 0x41, 0x00, // Code for char I 56 | 0x05, 0x20, 0x40, 0x40, 0x40, 0x3F, // Code for char J 57 | 0x05, 0x7F, 0x08, 0x14, 0x22, 0x41, // Code for char K 58 | 0x05, 0x7F, 0x40, 0x40, 0x40, 0x40, // Code for char L 59 | 0x05, 0x7F, 0x02, 0x0C, 0x02, 0x7F, // Code for char M 60 | 0x05, 0x7F, 0x02, 0x04, 0x08, 0x7F, // Code for char N 61 | 0x05, 0x7F, 0x41, 0x41, 0x41, 0x7F, // Code for char O 62 | 0x05, 0x7F, 0x09, 0x09, 0x09, 0x06, // Code for char P 63 | 0x05, 0x3E, 0x41, 0x51, 0x21, 0x5E, // Code for char Q 64 | 0x05, 0x7F, 0x09, 0x19, 0x29, 0x46, // Code for char R 65 | 0x05, 0x26, 0x49, 0x49, 0x49, 0x32, // Code for char S 66 | 0x05, 0x01, 0x01, 0x7F, 0x01, 0x01, // Code for char T 67 | 0x05, 0x3F, 0x40, 0x40, 0x40, 0x3F, // Code for char U 68 | 0x05, 0x07, 0x18, 0x60, 0x18, 0x07, // Code for char V 69 | 0x05, 0x7F, 0x20, 0x18, 0x20, 0x7F, // Code for char W 70 | 0x05, 0x63, 0x14, 0x08, 0x14, 0x63, // Code for char X 71 | 0x05, 0x03, 0x04, 0x78, 0x04, 0x03, // Code for char Y 72 | 0x05, 0x61, 0x51, 0x49, 0x45, 0x43, // Code for char Z 73 | 0x05, 0x7F, 0x41, 0x41, 0x00, 0x00, // Code for char [ 74 | 0x05, 0x08, 0x08, 0x2A, 0x08, 0x08, // Code for char / Division Symbol 75 | 0x05, 0x00, 0x00, 0x41, 0x41, 0x7F, // Code for char ] 76 | 0x05, 0x04, 0x02, 0x7F, 0x02, 0x04, // Code for char ^ Up Arrow 77 | 0x05, 0x10, 0x20, 0x7F, 0x20, 0x10, // Code for char _ Down Arrow 78 | 0x05, 0x07, 0x05, 0x07, 0x00, 0x00, // Code for char ` Degree 79 | 0x05, 0x20, 0x54, 0x54, 0x54, 0x78, // Code for char a 80 | 0x05, 0x7F, 0x48, 0x44, 0x44, 0x38, // Code for char b 81 | 0x05, 0x38, 0x44, 0x44, 0x44, 0x20, // Code for char c 82 | 0x05, 0x38, 0x44, 0x44, 0x48, 0x7F, // Code for char d 83 | 0x05, 0x38, 0x54, 0x54, 0x54, 0x58, // Code for char e 84 | 0x05, 0x08, 0x7E, 0x09, 0x01, 0x02, // Code for char f 85 | 0x05, 0x0C, 0x52, 0x52, 0x52, 0x3E, // Code for char g 86 | 0x05, 0x7F, 0x08, 0x04, 0x04, 0x78, // Code for char h 87 | 0x05, 0x00, 0x48, 0x7A, 0x40, 0x00, // Code for char i 88 | 0x05, 0x20, 0x40, 0x44, 0x3D, 0x00, // Code for char j 89 | 0x05, 0x7F, 0x10, 0x28, 0x44, 0x00, // Code for char k 90 | 0x05, 0x00, 0x41, 0x7F, 0x40, 0x00, // Code for char l 91 | 0x05, 0x7C, 0x04, 0x18, 0x04, 0x78, // Code for char m 92 | 0x05, 0x7C, 0x08, 0x04, 0x04, 0x78, // Code for char n 93 | 0x05, 0x38, 0x44, 0x44, 0x44, 0x38, // Code for char o 94 | 0x05, 0x7C, 0x14, 0x14, 0x14, 0x08, // Code for char p 95 | 0x05, 0x08, 0x14, 0x14, 0x18, 0x7C, // Code for char q 96 | 0x05, 0x7C, 0x08, 0x04, 0x04, 0x08, // Code for char r 97 | 0x05, 0x48, 0x54, 0x54, 0x54, 0x20, // Code for char s 98 | 0x05, 0x04, 0x3F, 0x44, 0x40, 0x20, // Code for char t 99 | 0x05, 0x3C, 0x40, 0x40, 0x20, 0x7C, // Code for char u 100 | 0x05, 0x1C, 0x20, 0x40, 0x20, 0x1C, // Code for char v 101 | 0x05, 0x3C, 0x40, 0x30, 0x40, 0x3C, // Code for char w 102 | 0x05, 0x44, 0x28, 0x10, 0x28, 0x44, // Code for char x 103 | 0x05, 0x0C, 0x50, 0x50, 0x50, 0x3C, // Code for char y 104 | 0x05, 0x44, 0x64, 0x54, 0x4C, 0x44, // Code for char z 105 | 0x05, 0x08, 0x1C, 0x2A, 0x08, 0x08, // Code for char { Left Arrow 106 | 0x05, 0x00, 0x00, 0x7F, 0x00, 0x00, // Code for char | 107 | 0x05, 0x08, 0x08, 0x2A, 0x1C, 0x08, // Code for char } Right Arrow 108 | 0x05, 0x18, 0x04, 0x08, 0x10, 0x0C, // Code for char ~ 109 | 0x05, 0x3E, 0x00, 0x00, 0x00, 0x00 // Code for char  110 | }; 111 | 112 | -------------------------------------------------------------------------------- /fonts/Bally7x9.c: -------------------------------------------------------------------------------- 1 | 2 | //WARNING: This Font Require X-GLCD Lib. 3 | // You can not use it with MikroE GLCD Lib. 4 | 5 | //Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0 6 | //MikroElektronika 2011 7 | //http://www.mikroe.com 8 | 9 | //GLCD FontName : Bally7x9 10 | //Created by rdagger based on original Bally Astrocade Basic font. 11 | //GLCD FontSize : 7 x 9 12 | 13 | const unsigned short Bally7x9[] = { 14 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 15 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ! 16 | 0x05, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char " 17 | 0x06, 0x00, 0x00, 0x28, 0x00, 0xFE, 0x00, 0x28, 0x00, 0xFE, 0x00, 0x28, 0x00, 0x00, 0x00, // Code for char # 18 | 0x06, 0x00, 0x00, 0x48, 0x00, 0x54, 0x00, 0xD6, 0x00, 0x54, 0x00, 0x24, 0x00, 0x00, 0x00, // Code for char $ 19 | 0x06, 0x00, 0x00, 0x46, 0x00, 0x26, 0x00, 0x10, 0x00, 0xC8, 0x00, 0xC4, 0x00, 0x00, 0x00, // Code for char % 20 | 0x06, 0x00, 0x00, 0x6C, 0x00, 0x92, 0x00, 0xAA, 0x00, 0x44, 0x00, 0xA0, 0x00, 0x00, 0x00, // Code for char & 21 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ' 22 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ( 23 | 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ) 24 | 0x06, 0x00, 0x00, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x00, 0x00, // Code for char * 25 | 0x06, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x7C, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, // Code for char + 26 | 0x03, 0x00, 0x00, 0xB0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char , 27 | 0x06, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, // Code for char - 28 | 0x03, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char . 29 | 0x06, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, // Code for char / 30 | 0x06, 0x00, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x7C, 0x00, 0x00, 0x00, // Code for char 0 31 | 0x05, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0xFE, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 1 32 | 0x06, 0x00, 0x00, 0xE4, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x8C, 0x00, 0x00, 0x00, // Code for char 2 33 | 0x06, 0x00, 0x00, 0x44, 0x00, 0x82, 0x00, 0x92, 0x00, 0x92, 0x00, 0x6C, 0x00, 0x00, 0x00, // Code for char 3 34 | 0x06, 0x00, 0x00, 0x30, 0x00, 0x28, 0x00, 0x24, 0x00, 0xFE, 0x00, 0x20, 0x00, 0x00, 0x00, // Code for char 4 35 | 0x06, 0x00, 0x00, 0x4E, 0x00, 0x8A, 0x00, 0x8A, 0x00, 0x8A, 0x00, 0x72, 0x00, 0x00, 0x00, // Code for char 5 36 | 0x06, 0x00, 0x00, 0x78, 0x00, 0x94, 0x00, 0x92, 0x00, 0x92, 0x00, 0x60, 0x00, 0x00, 0x00, // Code for char 6 37 | 0x06, 0x00, 0x00, 0x02, 0x00, 0xE2, 0x00, 0x12, 0x00, 0x0A, 0x00, 0x06, 0x00, 0x00, 0x00, // Code for char 7 38 | 0x06, 0x00, 0x00, 0x6C, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x6C, 0x00, 0x00, 0x00, // Code for char 8 39 | 0x06, 0x00, 0x00, 0x0C, 0x00, 0x92, 0x00, 0x92, 0x00, 0x52, 0x00, 0x3C, 0x00, 0x00, 0x00, // Code for char 9 40 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char : 41 | 0x04, 0x00, 0x00, 0x00, 0x00, 0xB6, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ; 42 | 0x05, 0x00, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char < 43 | 0x06, 0x00, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x00, 0x00, // Code for char = 44 | 0x06, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00, 0x00, // Code for char > 45 | 0x06, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0xA2, 0x00, 0x12, 0x00, 0x0C, 0x00, 0x00, 0x00, // Code for char ? 46 | 0x06, 0x00, 0x00, 0x7C, 0x00, 0x82, 0x00, 0xBA, 0x00, 0xAA, 0x00, 0x3C, 0x00, 0x00, 0x00, // Code for char @ 47 | 0x06, 0x00, 0x00, 0xFC, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0xFC, 0x00, 0x00, 0x00, // Code for char A 48 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x6C, 0x00, 0x00, 0x00, // Code for char B 49 | 0x06, 0x00, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x44, 0x00, 0x00, 0x00, // Code for char C 50 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x7C, 0x00, 0x00, 0x00, // Code for char D 51 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x92, 0x00, 0x92, 0x00, 0x82, 0x00, 0x82, 0x00, 0x00, 0x00, // Code for char E 52 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x12, 0x00, 0x12, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, // Code for char F 53 | 0x06, 0x00, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x82, 0x00, 0xA2, 0x00, 0xE4, 0x00, 0x00, 0x00, // Code for char G 54 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xFE, 0x00, 0x00, 0x00, // Code for char H 55 | 0x05, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0xFE, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char I 56 | 0x06, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x7E, 0x00, 0x00, 0x00, // Code for char J 57 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x82, 0x00, 0x00, 0x00, // Code for char K 58 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, // Code for char L 59 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x18, 0x00, 0x04, 0x00, 0xFE, 0x00, 0x00, 0x00, // Code for char M 60 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0xFE, 0x00, 0x00, 0x00, // Code for char N 61 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0xFE, 0x00, 0x00, 0x00, // Code for char O 62 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0x0C, 0x00, 0x00, 0x00, // Code for char P 63 | 0x06, 0x00, 0x00, 0x7C, 0x00, 0x82, 0x00, 0xA2, 0x00, 0x42, 0x00, 0xBC, 0x00, 0x00, 0x00, // Code for char Q 64 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x12, 0x00, 0x32, 0x00, 0x52, 0x00, 0x8C, 0x00, 0x00, 0x00, // Code for char R 65 | 0x06, 0x00, 0x00, 0x4C, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x64, 0x00, 0x00, 0x00, // Code for char S 66 | 0x06, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0xFE, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, // Code for char T 67 | 0x06, 0x00, 0x00, 0x7E, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x7E, 0x00, 0x00, 0x00, // Code for char U 68 | 0x06, 0x00, 0x00, 0x0E, 0x00, 0x30, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x00, // Code for char V 69 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x40, 0x00, 0x30, 0x00, 0x40, 0x00, 0xFE, 0x00, 0x00, 0x00, // Code for char W 70 | 0x06, 0x00, 0x00, 0xC6, 0x00, 0x28, 0x00, 0x10, 0x00, 0x28, 0x00, 0xC6, 0x00, 0x00, 0x00, // Code for char X 71 | 0x06, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0xF0, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00, // Code for char Y 72 | 0x06, 0x00, 0x00, 0xC2, 0x00, 0xA2, 0x00, 0x92, 0x00, 0x8A, 0x00, 0x86, 0x00, 0x00, 0x00, // Code for char Z 73 | 0x04, 0x00, 0x00, 0xFE, 0x00, 0x82, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char [ 74 | 0x06, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x54, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, // Code for char BackSlash 75 | 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x82, 0x00, 0xFE, 0x00, 0x00, 0x00, // Code for char ] 76 | 0x06, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, // Code for char ^ 77 | 0x06, 0x00, 0x00, 0x20, 0x00, 0x40, 0x00, 0xFE, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, // Code for char _ 78 | 0x04, 0x00, 0x00, 0x0E, 0x00, 0x0A, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ` 79 | 0x06, 0x00, 0x00, 0x40, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0xF0, 0x00, 0x00, 0x00, // Code for char a 80 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x90, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00, 0x00, // Code for char b 81 | 0x06, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x40, 0x00, 0x00, 0x00, // Code for char c 82 | 0x06, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x90, 0x00, 0xFE, 0x00, 0x00, 0x00, // Code for char d 83 | 0x06, 0x00, 0x00, 0x70, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0x00, 0x00, // Code for char e 84 | 0x06, 0x00, 0x00, 0x10, 0x00, 0xFC, 0x00, 0x12, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, // Code for char f 85 | 0x06, 0x00, 0x00, 0x18, 0x00, 0xA4, 0x00, 0xA4, 0x00, 0xA4, 0x00, 0x7C, 0x00, 0x00, 0x00, // Code for char g 86 | 0x06, 0x00, 0x00, 0xFE, 0x00, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0xF0, 0x00, 0x00, 0x00, // Code for char h 87 | 0x05, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0xF4, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char i 88 | 0x05, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x88, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char j 89 | 0x05, 0x00, 0x00, 0xFE, 0x00, 0x20, 0x00, 0x50, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char k 90 | 0x05, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0xFE, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char l 91 | 0x06, 0x00, 0x00, 0xF8, 0x00, 0x08, 0x00, 0x30, 0x00, 0x08, 0x00, 0xF0, 0x00, 0x00, 0x00, // Code for char m 92 | 0x06, 0x00, 0x00, 0xF8, 0x00, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0xF0, 0x00, 0x00, 0x00, // Code for char n 93 | 0x06, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00, 0x00, // Code for char o 94 | 0x06, 0x00, 0x00, 0xF8, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00, 0x00, // Code for char p 95 | 0x06, 0x00, 0x00, 0x10, 0x00, 0x28, 0x00, 0x28, 0x00, 0x30, 0x00, 0xF8, 0x00, 0x00, 0x00, // Code for char q 96 | 0x06, 0x00, 0x00, 0xF8, 0x00, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, // Code for char r 97 | 0x06, 0x00, 0x00, 0x90, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0x40, 0x00, 0x00, 0x00, // Code for char s 98 | 0x06, 0x00, 0x00, 0x08, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, // Code for char t 99 | 0x06, 0x00, 0x00, 0x78, 0x00, 0x80, 0x00, 0x80, 0x00, 0x40, 0x00, 0xF8, 0x00, 0x00, 0x00, // Code for char u 100 | 0x06, 0x00, 0x00, 0x38, 0x00, 0x40, 0x00, 0x80, 0x00, 0x40, 0x00, 0x38, 0x00, 0x00, 0x00, // Code for char v 101 | 0x06, 0x00, 0x00, 0x78, 0x00, 0x80, 0x00, 0x60, 0x00, 0x80, 0x00, 0x78, 0x00, 0x00, 0x00, // Code for char w 102 | 0x06, 0x00, 0x00, 0x88, 0x00, 0x50, 0x00, 0x20, 0x00, 0x50, 0x00, 0x88, 0x00, 0x00, 0x00, // Code for char x 103 | 0x06, 0x00, 0x00, 0x18, 0x00, 0xA0, 0x00, 0xA0, 0x00, 0xA0, 0x00, 0x78, 0x00, 0x00, 0x00, // Code for char y 104 | 0x06, 0x00, 0x00, 0x88, 0x00, 0xC8, 0x00, 0xA8, 0x00, 0x98, 0x00, 0x88, 0x00, 0x00, 0x00, // Code for char z 105 | 0x06, 0x00, 0x00, 0x10, 0x00, 0x38, 0x00, 0x54, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, // Code for char { 106 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char | 107 | 0x06, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x54, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00, 0x00, // Code for char } 108 | 0x06, 0x00, 0x00, 0x30, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x18, 0x00, 0x00, 0x00, // Code for char ~ 109 | 0x02, 0x7C, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Code for char  110 | }; 111 | 112 | -------------------------------------------------------------------------------- /fonts/Broadway17x15.c: -------------------------------------------------------------------------------- 1 | //Font Generated by GLCD Font Creator 2 | //Copyright 2007 Pocket MicroTechnics 3 | //http://www.pocketmt.com 4 | 5 | //GLCD FontName : Broadway17x15 6 | //Based on a font by Connormah which is public domain (according to Wikipedia) 7 | //GLCD FontSize : 17 x 15 8 | 9 | const unsigned short Broadway17x15[] = { 10 | 0x09, 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, 0x00, 0x00, 0x00, 0x00, // Code for char 11 | 0x06, 0x00, 0x00, 0x1C, 0x04, 0x3E, 0x0E, 0xFE, 0x0E, 0x7E, 0x0E, 0x1C, 0x04, 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 ! 12 | 0x06, 0x00, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x3E, 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 " 13 | 0x0B, 0x00, 0x00, 0x90, 0x00, 0x90, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x00, 0x90, 0x00, 0xD0, 0x0F, 0xBE, 0x00, 0x90, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char # 14 | 0x09, 0x00, 0x00, 0x3C, 0x04, 0x7C, 0x14, 0xFE, 0x0E, 0xFE, 0x09, 0xF2, 0x0F, 0xFE, 0x0F, 0xC3, 0x07, 0x84, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char $ 15 | 0x0C, 0x3C, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x42, 0x08, 0x3C, 0x06, 0x80, 0x01, 0x60, 0x00, 0x98, 0x07, 0xC6, 0x0F, 0xC0, 0x0F, 0x40, 0x08, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char % 16 | 0x0C, 0x00, 0x07, 0xBC, 0x0C, 0x7C, 0x08, 0xFE, 0x09, 0xFA, 0x0B, 0xF2, 0x07, 0xF2, 0x0F, 0xCC, 0x0F, 0x00, 0x0F, 0x80, 0x0E, 0x40, 0x0C, 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char & 17 | 0x03, 0x00, 0x00, 0x3E, 0x00, 0x3E, 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 ' 18 | 0x05, 0x00, 0x00, 0xF8, 0x0F, 0xFC, 0x1F, 0xFE, 0x3F, 0x02, 0x20, 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 ( 19 | 0x05, 0x00, 0x00, 0x02, 0x20, 0xFE, 0x3F, 0xFC, 0x1F, 0xF8, 0x0F, 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 ) 20 | 0x05, 0x04, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x2C, 0x00, 0x04, 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 * 21 | 0x09, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x07, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char + 22 | 0x06, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2E, 0x00, 0x2E, 0x00, 0x3E, 0x00, 0x1C, 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 , 23 | 0x06, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 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 - 24 | 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x04, 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 . 25 | 0x07, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x03, 0xC0, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char / 26 | 0x09, 0x00, 0x00, 0xF0, 0x01, 0xFC, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x02, 0x08, 0x0C, 0x06, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 0 27 | 0x08, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 1 28 | 0x09, 0x38, 0x08, 0x04, 0x0C, 0x02, 0x0F, 0xC2, 0x0F, 0xF2, 0x0F, 0xFE, 0x0F, 0xFE, 0x09, 0x7C, 0x08, 0x38, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 2 29 | 0x09, 0x00, 0x04, 0x04, 0x08, 0x02, 0x08, 0x22, 0x08, 0xFE, 0x0F, 0xDE, 0x0F, 0xDE, 0x0F, 0xDC, 0x07, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 3 30 | 0x0B, 0x00, 0x02, 0x00, 0x03, 0x80, 0x02, 0x40, 0x02, 0xE0, 0x0F, 0xF0, 0x0F, 0xF8, 0x0F, 0xFC, 0x0F, 0xFE, 0x0F, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 4 31 | 0x09, 0xC0, 0x03, 0x08, 0x04, 0x0E, 0x08, 0x0A, 0x08, 0xFA, 0x0F, 0xFA, 0x0F, 0xFA, 0x0F, 0xF2, 0x07, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 5 32 | 0x09, 0x00, 0x00, 0xF0, 0x01, 0xFC, 0x07, 0xFC, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x22, 0x08, 0x24, 0x04, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 6 33 | 0x0A, 0x02, 0x00, 0x02, 0x08, 0x02, 0x0E, 0x82, 0x0F, 0xE2, 0x0F, 0xFA, 0x0F, 0xFE, 0x0F, 0xFE, 0x01, 0x3E, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 7 34 | 0x09, 0x00, 0x00, 0x38, 0x07, 0xFC, 0x08, 0xFE, 0x08, 0xFE, 0x09, 0xF2, 0x0D, 0xE2, 0x0F, 0xFC, 0x07, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 8 35 | 0x09, 0x00, 0x00, 0x78, 0x00, 0x84, 0x04, 0x82, 0x08, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x07, 0xFC, 0x07, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 9 36 | 0x06, 0x00, 0x00, 0x20, 0x04, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x20, 0x04, 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 : 37 | 0x06, 0x00, 0x00, 0x20, 0x0C, 0x70, 0x2E, 0x70, 0x2E, 0x70, 0x3E, 0x20, 0x1C, 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 ; 38 | 0x08, 0x00, 0x00, 0x40, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xF0, 0x01, 0xD0, 0x01, 0x88, 0x03, 0x8C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char < 39 | 0x0A, 0x00, 0x00, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char = 40 | 0x07, 0x3C, 0x06, 0x38, 0x02, 0x70, 0x01, 0xF0, 0x01, 0xE0, 0x00, 0xC0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char > 41 | 0x09, 0x00, 0x00, 0x0C, 0x00, 0x04, 0x04, 0x02, 0x0E, 0xFE, 0x0E, 0x7E, 0x0E, 0x7E, 0x04, 0x7C, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ? 42 | 0x0C, 0x00, 0x00, 0xF0, 0x01, 0x08, 0x02, 0xE4, 0x04, 0xF2, 0x0D, 0x12, 0x09, 0xD2, 0x09, 0xF2, 0x09, 0xF2, 0x09, 0x04, 0x09, 0x8C, 0x05, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char @ 43 | 0x0D, 0x00, 0x08, 0x00, 0x06, 0x00, 0x05, 0xC0, 0x04, 0x70, 0x04, 0xF8, 0x05, 0xFE, 0x07, 0xF8, 0x0F, 0xF0, 0x0F, 0xC0, 0x0F, 0x00, 0x0F, 0x00, 0x0E, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char A 44 | 0x0A, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x02, 0x08, 0x82, 0x08, 0x84, 0x0C, 0x78, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char B 45 | 0x0B, 0x00, 0x00, 0xF0, 0x01, 0xF8, 0x03, 0xFC, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0x02, 0x08, 0x02, 0x08, 0x02, 0x04, 0x04, 0x06, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char C 46 | 0x0B, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x02, 0x08, 0x02, 0x08, 0x04, 0x04, 0x08, 0x02, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char D 47 | 0x0B, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x12, 0x08, 0x12, 0x08, 0x12, 0x08, 0x12, 0x08, 0x12, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char E 48 | 0x0A, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char F 49 | 0x0B, 0x00, 0x00, 0xF0, 0x01, 0xF8, 0x03, 0xFC, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0x02, 0x08, 0x42, 0x08, 0x44, 0x04, 0x48, 0x02, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char G 50 | 0x0B, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char H 51 | 0x06, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 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 I 52 | 0x09, 0x00, 0x06, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x07, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char J 53 | 0x0C, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x08, 0x00, 0x0C, 0x00, 0x34, 0x00, 0xC2, 0x00, 0x02, 0x03, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char K 54 | 0x0B, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char L 55 | 0x0F, 0x00, 0x0C, 0x80, 0x03, 0xF0, 0x00, 0xFE, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xF0, 0x03, 0xC0, 0x00, 0xC0, 0x00, 0xF0, 0x07, 0xF8, 0x0F, 0xFE, 0x0F, 0xF0, 0x0F, 0x80, 0x0F, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, // Code for char M 56 | 0x0B, 0x00, 0x00, 0xFE, 0x0F, 0x7C, 0x00, 0xFC, 0x00, 0xF8, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x07, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char N 57 | 0x0B, 0x00, 0x00, 0xF0, 0x01, 0xF8, 0x03, 0xFC, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0x02, 0x08, 0x02, 0x08, 0x04, 0x04, 0x08, 0x02, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char O 58 | 0x0B, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x02, 0x02, 0x02, 0x02, 0x04, 0x02, 0x0C, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char P 59 | 0x0B, 0x00, 0x00, 0xF0, 0x01, 0xF8, 0x03, 0xFC, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0x02, 0x08, 0x02, 0x0A, 0x04, 0x0C, 0x08, 0x0E, 0xF0, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Q 60 | 0x0B, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x02, 0x01, 0x02, 0x06, 0x04, 0x0E, 0x0C, 0x09, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char R 61 | 0x09, 0x00, 0x00, 0x38, 0x04, 0x7C, 0x08, 0xFE, 0x08, 0xFE, 0x0B, 0xFA, 0x0F, 0xE2, 0x0F, 0xC4, 0x07, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char S 62 | 0x0B, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char T 63 | 0x0B, 0x00, 0x00, 0xFE, 0x03, 0xFE, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x04, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char U 64 | 0x0D, 0x02, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x7E, 0x00, 0xFE, 0x01, 0xFE, 0x03, 0xFC, 0x0F, 0xF0, 0x03, 0xC0, 0x01, 0x60, 0x00, 0x10, 0x00, 0x0C, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char V 65 | 0x10, 0x02, 0x00, 0x1E, 0x00, 0xFE, 0x00, 0xFE, 0x03, 0xFE, 0x1F, 0xFE, 0x07, 0xF0, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0xF8, 0x03, 0xFE, 0x07, 0xF8, 0x1F, 0xF0, 0x03, 0xE0, 0x00, 0x18, 0x00, 0x06, 0x00, 0x00, 0x00, // Code for char W 66 | 0x0C, 0x02, 0x08, 0x0E, 0x04, 0x1E, 0x03, 0xFE, 0x00, 0xFE, 0x01, 0xFE, 0x03, 0xFC, 0x0F, 0xF0, 0x0F, 0xD8, 0x0F, 0x04, 0x0F, 0x02, 0x0E, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char X 67 | 0x0C, 0x02, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x3E, 0x00, 0x7E, 0x08, 0xFE, 0x06, 0xFC, 0x01, 0xF8, 0x00, 0x30, 0x00, 0x10, 0x00, 0x0C, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Y 68 | 0x0B, 0x00, 0x08, 0x02, 0x0E, 0x82, 0x0F, 0xE2, 0x0F, 0xFA, 0x0F, 0xFE, 0x0F, 0xFE, 0x0B, 0xFE, 0x08, 0x3E, 0x08, 0x0E, 0x08, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Z 69 | 0x06, 0x00, 0x00, 0xFE, 0x3F, 0xFE, 0x3F, 0xFE, 0x3F, 0x02, 0x20, 0x02, 0x20, 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 [ 70 | 0x07, 0x02, 0x00, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char BackSlash 71 | 0x05, 0x02, 0x20, 0x02, 0x20, 0xFE, 0x3F, 0xFE, 0x3F, 0xFE, 0x3F, 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 ] 72 | 0x08, 0xC0, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x1C, 0x00, 0x30, 0x00, 0xC0, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ^ 73 | 0x08, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char _ 74 | 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x06, 0x00, 0x04, 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 ` 75 | 0x0A, 0x00, 0x00, 0x80, 0x07, 0xD0, 0x0F, 0xC8, 0x0F, 0xC8, 0x0F, 0x48, 0x08, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char a 76 | 0x0B, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x10, 0x04, 0x08, 0x08, 0xF8, 0x0F, 0xF8, 0x0F, 0xF0, 0x07, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char b 77 | 0x08, 0x00, 0x00, 0xE0, 0x03, 0xF0, 0x07, 0xF8, 0x0F, 0xF8, 0x0F, 0x08, 0x08, 0x18, 0x04, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char c 78 | 0x0B, 0x00, 0x00, 0xE0, 0x03, 0xF0, 0x07, 0xF8, 0x0F, 0xF8, 0x0F, 0x08, 0x08, 0x10, 0x04, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char d 79 | 0x09, 0x00, 0x00, 0xE0, 0x03, 0xF0, 0x07, 0xF8, 0x0F, 0xF8, 0x0F, 0x88, 0x08, 0xF8, 0x08, 0xF0, 0x04, 0xE0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char e 80 | 0x07, 0x08, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFF, 0x0F, 0xFF, 0x0F, 0x09, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char f 81 | 0x08, 0x00, 0x00, 0xE0, 0x2D, 0xF0, 0x4F, 0xF8, 0x4F, 0x08, 0x4E, 0xF8, 0x6F, 0xF4, 0x3D, 0xE0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char g 82 | 0x0B, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x10, 0x00, 0x08, 0x00, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char h 83 | 0x05, 0x00, 0x00, 0xFB, 0x0F, 0xFB, 0x0F, 0xFB, 0x0F, 0xFB, 0x0F, 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 i 84 | 0x05, 0x00, 0x10, 0xFB, 0x1F, 0xFB, 0x1F, 0xFB, 0x1F, 0xFB, 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 j 85 | 0x0D, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xC0, 0x00, 0xE0, 0x01, 0xF0, 0x07, 0xF0, 0x0F, 0x88, 0x0F, 0x08, 0x0F, 0x00, 0x0C, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char k 86 | 0x05, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 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 l 87 | 0x11, 0x00, 0x00, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0x10, 0x00, 0x08, 0x00, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xF0, 0x0F, 0x10, 0x00, 0x08, 0x00, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xF0, 0x0F, // Code for char m 88 | 0x0B, 0x00, 0x00, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0x10, 0x00, 0x08, 0x00, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char n 89 | 0x09, 0x00, 0x00, 0xE0, 0x03, 0xF0, 0x07, 0xF8, 0x0F, 0xF8, 0x0F, 0x08, 0x08, 0x08, 0x08, 0x10, 0x04, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char o 90 | 0x0B, 0x00, 0x00, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0x10, 0x02, 0x08, 0x04, 0xF8, 0x07, 0xF8, 0x07, 0xF0, 0x03, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char p 91 | 0x0B, 0x00, 0x00, 0xE0, 0x03, 0xF0, 0x07, 0xF8, 0x0F, 0xF8, 0x0F, 0x08, 0x08, 0x10, 0x04, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char q 92 | 0x08, 0x00, 0x00, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char r 93 | 0x08, 0x70, 0x04, 0xF0, 0x0C, 0xF8, 0x09, 0xE8, 0x09, 0xC8, 0x0B, 0xC8, 0x0F, 0x98, 0x07, 0x10, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char s 94 | 0x07, 0x08, 0x00, 0xFC, 0x07, 0xFC, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x08, 0x0C, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char t 95 | 0x0B, 0x00, 0x00, 0xF8, 0x07, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0x00, 0x08, 0x00, 0x08, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char u 96 | 0x0A, 0x08, 0x00, 0x18, 0x00, 0x78, 0x00, 0xF8, 0x01, 0xF8, 0x03, 0xE0, 0x0F, 0xC0, 0x03, 0xC0, 0x00, 0x30, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char v 97 | 0x0E, 0x08, 0x00, 0x38, 0x00, 0xF8, 0x00, 0xF8, 0x03, 0xF8, 0x0F, 0xE0, 0x07, 0x80, 0x01, 0xC0, 0x00, 0xF0, 0x01, 0xF8, 0x07, 0xF0, 0x0F, 0xC0, 0x01, 0x60, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char w 98 | 0x0B, 0x08, 0x08, 0x18, 0x04, 0x38, 0x02, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0x07, 0xC0, 0x0F, 0xA0, 0x0F, 0x10, 0x0E, 0x08, 0x0C, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char x 99 | 0x0A, 0x08, 0x00, 0x18, 0x00, 0x38, 0x08, 0xF8, 0x08, 0xF8, 0x09, 0xF0, 0x07, 0xC0, 0x01, 0x40, 0x00, 0x30, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char y 100 | 0x0B, 0x00, 0x08, 0x08, 0x0C, 0x08, 0x0E, 0x88, 0x0F, 0xC8, 0x0F, 0xE8, 0x0F, 0xF8, 0x09, 0xF8, 0x08, 0x78, 0x08, 0x18, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char z 101 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x7C, 0x1F, 0x7E, 0x3F, 0x7E, 0x3F, 0x02, 0x20, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char { 102 | 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 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 | 103 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x02, 0x20, 0x7E, 0x3F, 0x7E, 0x3F, 0x7C, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char } 104 | 0x09, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x60, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Code for char ~ 105 | }; -------------------------------------------------------------------------------- /fonts/FixedFont5x8.c: -------------------------------------------------------------------------------- 1 | // Generic 8 bit fixed width font 2 | // 5 x 8 pixels 3 | // Start at ASCII 32 4 | 5 | 0x05,0x00,0x00,0x00,0x00,0x00, // Code for char SPACE 6 | 0x05,0x00,0x00,0x5f,0x00,0x00, // Code for char ! 7 | 0x05,0x00,0x07,0x00,0x07,0x00, // Code for char " 8 | 0x05,0x14,0x7f,0x14,0x7f,0x14, // Code for char # 9 | 0x05,0x24,0x2a,0x7f,0x2a,0x12, // Code for char $ 10 | 0x05,0x23,0x13,0x08,0x64,0x62, // Code for char % 11 | 0x05,0x36,0x49,0x56,0x20,0x50, // Code for char & 12 | 0x05,0x00,0x08,0x07,0x03,0x00, // Code for char ' 13 | 0x05,0x00,0x1c,0x22,0x41,0x00, // Code for char ( 14 | 0x05,0x00,0x41,0x22,0x1c,0x00, // Code for char ) 15 | 0x05,0x2a,0x1c,0x7f,0x1c,0x2a, // Code for char * 16 | 0x05,0x08,0x08,0x3e,0x08,0x08, // Code for char + 17 | 0x05,0x00,0x80,0x70,0x30,0x00, // Code for char 18 | 0x05,0x08,0x08,0x08,0x08,0x08, // Code for char - 19 | 0x05,0x00,0x00,0x60,0x60,0x00, // Code for char . 20 | 0x05,0x20,0x10,0x08,0x04,0x02, // Code for char / 21 | 0x05,0x3e,0x51,0x49,0x45,0x3e, // Code for char 0 22 | 0x05,0x00,0x42,0x7f,0x40,0x00, // Code for char 1 23 | 0x05,0x72,0x49,0x49,0x49,0x46, // Code for char 2 24 | 0x05,0x21,0x41,0x49,0x4d,0x33, // Code for char 3 25 | 0x05,0x18,0x14,0x12,0x7f,0x10, // Code for char 4 26 | 0x05,0x27,0x45,0x45,0x45,0x39, // Code for char 5 27 | 0x05,0x3c,0x4a,0x49,0x49,0x31, // Code for char 6 28 | 0x05,0x41,0x21,0x11,0x09,0x07, // Code for char 7 29 | 0x05,0x36,0x49,0x49,0x49,0x36, // Code for char 8 30 | 0x05,0x46,0x49,0x49,0x29,0x1e, // Code for char 9 31 | 0x05,0x00,0x00,0x14,0x00,0x00, // Code for char : 32 | 0x05,0x00,0x40,0x34,0x00,0x00, // Code for char ; 33 | 0x05,0x00,0x08,0x14,0x22,0x41, // Code for char < 34 | 0x05,0x14,0x14,0x14,0x14,0x14, // Code for char = 35 | 0x05,0x00,0x41,0x22,0x14,0x08, // Code for char > 36 | 0x05,0x02,0x01,0x59,0x09,0x06, // Code for char ? 37 | 0x05,0x3e,0x41,0x5d,0x59,0x4e, // Code for char @ 38 | 0x05,0x7c,0x12,0x11,0x12,0x7c, // Code for char A 39 | 0x05,0x7f,0x49,0x49,0x49,0x36, // Code for char B 40 | 0x05,0x3e,0x41,0x41,0x41,0x22, // Code for char C 41 | 0x05,0x7f,0x41,0x41,0x41,0x3e, // Code for char D 42 | 0x05,0x7f,0x49,0x49,0x49,0x41, // Code for char E 43 | 0x05,0x7f,0x09,0x09,0x09,0x01, // Code for char F 44 | 0x05,0x3e,0x41,0x41,0x51,0x73, // Code for char G 45 | 0x05,0x7f,0x08,0x08,0x08,0x7f, // Code for char H 46 | 0x05,0x00,0x41,0x7f,0x41,0x00, // Code for char I 47 | 0x05,0x20,0x40,0x41,0x3f,0x01, // Code for char J 48 | 0x05,0x7f,0x08,0x14,0x22,0x41, // Code for char K 49 | 0x05,0x7f,0x40,0x40,0x40,0x40, // Code for char L 50 | 0x05,0x7f,0x02,0x1c,0x02,0x7f, // Code for char M 51 | 0x05,0x7f,0x04,0x08,0x10,0x7f, // Code for char N 52 | 0x05,0x3e,0x41,0x41,0x41,0x3e, // Code for char O 53 | 0x05,0x7f,0x09,0x09,0x09,0x06, // Code for char P 54 | 0x05,0x3e,0x41,0x51,0x21,0x5e, // Code for char Q 55 | 0x05,0x7f,0x09,0x19,0x29,0x46, // Code for char R 56 | 0x05,0x26,0x49,0x49,0x49,0x32, // Code for char S 57 | 0x05,0x03,0x01,0x7f,0x01,0x03, // Code for char T 58 | 0x05,0x3f,0x40,0x40,0x40,0x3f, // Code for char U 59 | 0x05,0x1f,0x20,0x40,0x20,0x1f, // Code for char V 60 | 0x05,0x3f,0x40,0x38,0x40,0x3f, // Code for char W 61 | 0x05,0x63,0x14,0x08,0x14,0x63, // Code for char X 62 | 0x05,0x03,0x04,0x78,0x04,0x03, // Code for char Y 63 | 0x05,0x61,0x59,0x49,0x4d,0x43, // Code for char Z 64 | 0x05,0x00,0x7f,0x41,0x41,0x41, // Code for char [ 65 | 0x05,0x02,0x04,0x08,0x10,0x20, // Code for char BackSlash 66 | 0x05,0x00,0x41,0x41,0x41,0x7f, // Code for char ] 67 | 0x05,0x04,0x02,0x01,0x02,0x04, // Code for char ^ 68 | 0x05,0x40,0x40,0x40,0x40,0x40, // Code for char _ 69 | 0x05,0x00,0x03,0x07,0x08,0x00, // Code for char ` 70 | 0x05,0x20,0x54,0x54,0x78,0x40, // Code for char a 71 | 0x05,0x7f,0x28,0x44,0x44,0x38, // Code for char b 72 | 0x05,0x38,0x44,0x44,0x44,0x28, // Code for char c 73 | 0x05,0x38,0x44,0x44,0x28,0x7f, // Code for char d 74 | 0x05,0x38,0x54,0x54,0x54,0x18, // Code for char e 75 | 0x05,0x00,0x08,0x7e,0x09,0x02, // Code for char f 76 | 0x05,0x18,0xa4,0xa4,0x9c,0x78, // Code for char g 77 | 0x05,0x7f,0x08,0x04,0x04,0x78, // Code for char h 78 | 0x05,0x00,0x44,0x7d,0x40,0x00, // Code for char i 79 | 0x05,0x20,0x40,0x40,0x3d,0x00, // Code for char j 80 | 0x05,0x7f,0x10,0x28,0x44,0x00, // Code for char k 81 | 0x05,0x00,0x41,0x7f,0x40,0x00, // Code for char l 82 | 0x05,0x7c,0x04,0x78,0x04,0x78, // Code for char m 83 | 0x05,0x7c,0x08,0x04,0x04,0x78, // Code for char n 84 | 0x05,0x38,0x44,0x44,0x44,0x38, // Code for char o 85 | 0x05,0xfc,0x18,0x24,0x24,0x18, // Code for char p 86 | 0x05,0x18,0x24,0x24,0x18,0xfc, // Code for char q 87 | 0x05,0x7c,0x08,0x04,0x04,0x08, // Code for char r 88 | 0x05,0x48,0x54,0x54,0x54,0x24, // Code for char s 89 | 0x05,0x04,0x04,0x3f,0x44,0x24, // Code for char t 90 | 0x05,0x3c,0x40,0x40,0x20,0x7c, // Code for char u 91 | 0x05,0x1c,0x20,0x40,0x20,0x1c, // Code for char v 92 | 0x05,0x3c,0x40,0x30,0x40,0x3c, // Code for char w 93 | 0x05,0x44,0x28,0x10,0x28,0x44, // Code for char x 94 | 0x05,0x4c,0x90,0x90,0x90,0x7c, // Code for char y 95 | 0x05,0x44,0x64,0x54,0x4c,0x44, // Code for char z 96 | 0x05,0x00,0x08,0x36,0x41,0x00, // Code for char { 97 | 0x05,0x00,0x00,0x77,0x00,0x00, // Code for char | 98 | 0x05,0x00,0x41,0x36,0x08,0x00, // Code for char } 99 | 0x05,0x02,0x01,0x02,0x04,0x02, // Code for char ~ 100 | 0x05,0x3c,0x26,0x23,0x26,0x3c, // Code for char DEL 101 | -------------------------------------------------------------------------------- /fonts/IBMPlexMono12x24.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/fonts/IBMPlexMono12x24.c -------------------------------------------------------------------------------- /fonts/Neato5x7.c: -------------------------------------------------------------------------------- 1 | // Modified version of Standard ASCII 5x7 font 2 | // NEATO ASCII 5x7 font (223 characters) 3 | // BY: IxD SMART Design, ported by: aisencc 4 | static const unsigned char font[] PROGMEM = { 5 | 0x05,0x00,0x00,0x00,0x00,0x00, //32 (space) 6 | 0x05,0x00,0x00,0x17,0x00,0x00, //33 ! 7 | 0x05,0x00,0x07,0x00,0x07,0x00, //34 8 | 0x05,0x14,0x7F,0x14,0x7F,0x14, //35 # 9 | 0x05,0x24,0x2A,0x7F,0x2A,0x12, //36 $ 10 | 0x05,0x23,0x13,0x08,0x64,0x62, //37 % 11 | 0x05,0x36,0x49,0x56,0x20,0x50, //38 & 12 | 0x05,0x00,0x08,0x07,0x03,0x00, //39 ' 13 | 0x05,0x00,0x1C,0x22,0x41,0x00, //40 ( 14 | 0x05,0x00,0x41,0x22,0x1C,0x00, //41 ) 15 | 0x05,0x2A,0x1C,0x7F,0x1C,0x2A, //42 * 16 | 0x05,0x08,0x08,0x3E,0x08,0x08, //43 + 17 | 0x05,0x00,0x80,0x70,0x30,0x00, //44 , 18 | 0x05,0x08,0x08,0x08,0x08,0x08, //45 - 19 | 0x05,0x00,0x00,0x60,0x60,0x00, //46 . 20 | 0x05,0x20,0x10,0x08,0x04,0x02, //47 / 21 | 0x05,0x3E,0x51,0x49,0x45,0x3E, //48 0 22 | 0x05,0x00,0x42,0x7F,0x40,0x00, //49 1 23 | 0x05,0x72,0x49,0x49,0x49,0x46, //50 2 24 | 0x05,0x21,0x41,0x49,0x4D,0x33, //51 3 25 | 0x05,0x18,0x14,0x12,0x7F,0x10, //52 4 26 | 0x05,0x27,0x45,0x45,0x45,0x39, //53 5 27 | 0x05,0x3C,0x4A,0x49,0x49,0x31, //54 6 28 | 0x05,0x41,0x21,0x11,0x09,0x07, //55 7 29 | 0x05,0x36,0x49,0x49,0x49,0x36, //56 8 30 | 0x05,0x46,0x49,0x49,0x29,0x1E, //57 9 31 | 0x05,0x00,0x00,0x14,0x00,0x00, //58 : 32 | 0x05,0x00,0x40,0x34,0x00,0x00, //59 ; 33 | 0x05,0x00,0x08,0x14,0x22,0x41, //60 < 34 | 0x05,0x14,0x14,0x14,0x14,0x14, //61 = 35 | 0x05,0x00,0x41,0x22,0x14,0x08, //62 > 36 | 0x05,0x02,0x01,0x59,0x09,0x06, //63 ? 37 | 0x05,0x3E,0x41,0x5D,0x59,0x4E, //64 @ 38 | 0x05,0x1F,0x05,0x05,0x05,0x1F, //65 A 39 | 0x05,0x1F,0x15,0x15,0x15,0x0E, //66 B 40 | 0x05,0x1F,0x11,0x11,0x11,0x11, //67 C 41 | 0x05,0x1F,0x11,0x11,0x11,0x0E, //68 D 42 | 0x05,0x1F,0x15,0x15,0x15,0x11, //69 E 43 | 0x05,0x1F,0x05,0x05,0x05,0x01, //70 F 44 | 0x05,0x1F,0x11,0x15,0x15,0x1D, //71 G 45 | 0x05,0x1F,0x04,0x04,0x04,0x1F, //72 H 46 | 0x05,0x11,0x11,0x1F,0x11,0x11, //73 I 47 | 0x05,0x11,0x11,0x1F,0x01,0x01, //74 J 48 | 0x05,0x1F,0x04,0x0A,0x11,0x00, //75 K 49 | 0x05,0x1F,0x10,0x10,0x10,0x00, //76 L 50 | 0x05,0x1F,0x02,0x04,0x02,0x1F, //77 M 51 | 0x05,0x1F,0x02,0x04,0x08,0x1F, //78 N 52 | 0x05,0x1F,0x11,0x11,0x11,0x1F, //79 O 53 | 0x05,0x1F,0x05,0x05,0x05,0x07, //80 P 54 | 0x05,0x1F,0x11,0x11,0x19,0x1F, //81 Q 55 | 0x05,0x1F,0x05,0x05,0x0D,0x17, //82 R 56 | 0x05,0x17,0x15,0x15,0x15,0x1D, //83 S 57 | 0x05,0x01,0x01,0x1F,0x01,0x01, //84 T 58 | 0x05,0x1F,0x10,0x10,0x10,0x1F, //85 U 59 | 0x05,0x03,0x0C,0x10,0x0C,0x03, //86 V 60 | 0x05,0x1F,0x10,0x08,0x10,0x1F, //87 W 61 | 0x05,0x11,0x0A,0x04,0x0A,0x11, //88 X 62 | 0x05,0x01,0x02,0x1C,0x02,0x01, //89 Y 63 | 0x05,0x11,0x19,0x15,0x13,0x11, //90 Z 64 | 0x05,0x00,0x7F,0x41,0x41,0x41, //91 65 | 0x05,0x02,0x04,0x08,0x10,0x20, //92 66 | 0x05,0x00,0x41,0x41,0x41,0x7F, //93 67 | 0x05,0x04,0x02,0x01,0x02,0x04, //94 68 | 0x05,0x40,0x40,0x40,0x40,0x40, //95 69 | 0x05,0x00,0x03,0x07,0x08,0x00, //96 70 | 0x05,0x20,0x54,0x54,0x78,0x40, //97 a 71 | 0x05,0x7F,0x28,0x44,0x44,0x38, //98 b 72 | 0x05,0x38,0x44,0x44,0x44,0x28, //99 c 73 | 0x05,0x38,0x44,0x44,0x28,0x7F, //100 d 74 | 0x05,0x38,0x54,0x54,0x54,0x18, //101 e 75 | 0x05,0x00,0x08,0x7E,0x09,0x02, //102 f 76 | 0x05,0x18,0xA4,0xA4,0x9C,0x78, //103 g 77 | 0x05,0x7F,0x08,0x04,0x04,0x78, //104 h 78 | 0x05,0x00,0x44,0x7D,0x40,0x00, //105 i 79 | 0x05,0x20,0x40,0x40,0x3D,0x00, //106 j 80 | 0x05,0x7F,0x10,0x28,0x44,0x00, //107 k 81 | 0x05,0x00,0x41,0x7F,0x40,0x00, //108 l 82 | 0x05,0x7C,0x04,0x78,0x04,0x78, //109 m 83 | 0x05,0x7C,0x08,0x04,0x04,0x78, //110 n 84 | 0x05,0x38,0x44,0x44,0x44,0x38, //111 o 85 | 0x05,0xFC,0x18,0x24,0x24,0x18, //112 p 86 | 0x05,0x18,0x24,0x24,0x18,0xFC, //113 q 87 | 0x05,0x7C,0x08,0x04,0x04,0x08, //114 r 88 | 0x05,0x48,0x54,0x54,0x54,0x24, //115 s 89 | 0x05,0x04,0x04,0x3F,0x44,0x24, //116 t 90 | 0x05,0x3C,0x40,0x40,0x20,0x7C, //117 u 91 | 0x05,0x1C,0x20,0x40,0x20,0x1C, //118 v 92 | 0x05,0x3C,0x40,0x30,0x40,0x3C, //119 w 93 | 0x05,0x44,0x28,0x10,0x28,0x44, //120 x 94 | 0x05,0x4C,0x90,0x90,0x90,0x7C, //121 y 95 | 0x05,0x44,0x64,0x54,0x4C,0x44, //122 z 96 | 0x05,0x00,0x08,0x36,0x41,0x00, //123 { 97 | 0x05,0x00,0x00,0x77,0x00,0x00, //124 | 98 | 0x05,0x00,0x41,0x36,0x08,0x00, //125 } 99 | 0x05,0x02,0x01,0x02,0x04,0x02, //126 ~ 100 | 0x05,0x3C,0x26,0x23,0x26,0x3C, //127 (delete) 101 | 0x05,0x1E,0xA1,0xA1,0x61,0x12, //128 � 102 | 0x05,0x3A,0x40,0x40,0x20,0x7A, //129 103 | 0x05,0x38,0x54,0x54,0x55,0x59, //130 � 104 | 0x05,0x21,0x55,0x55,0x79,0x41, //131 � 105 | 0x05,0x21,0x54,0x54,0x78,0x41, //132 � 106 | 0x05,0x21,0x55,0x54,0x78,0x40, //133 � 107 | 0x05,0x20,0x54,0x55,0x79,0x40, //134 � 108 | 0x05,0x0C,0x1E,0x52,0x72,0x12, //135 � 109 | 0x05,0x39,0x55,0x55,0x55,0x59, //136 � 110 | 0x05,0x39,0x54,0x54,0x54,0x59, //137 � 111 | 0x05,0x39,0x55,0x54,0x54,0x58, //138 � 112 | 0x05,0x00,0x00,0x45,0x7C,0x41, //139 � 113 | 0x05,0x00,0x02,0x45,0x7D,0x42, //140 � 114 | 0x05,0x00,0x01,0x45,0x7C,0x40, //141 115 | 0x05,0xF0,0x29,0x24,0x29,0xF0, //142 � 116 | 0x05,0xF0,0x28,0x25,0x28,0xF0, //143 117 | 0x05,0x7C,0x54,0x55,0x45,0x00, //144 118 | 0x05,0x20,0x54,0x54,0x7C,0x54, //145 � 119 | 0x05,0x7C,0x0A,0x09,0x7F,0x49, //146 � 120 | 0x05,0x32,0x49,0x49,0x49,0x32, //147 � 121 | 0x05,0x32,0x48,0x48,0x48,0x32, //148 � 122 | 0x05,0x32,0x4A,0x48,0x48,0x30, //149 � 123 | 0x05,0x3A,0x41,0x41,0x21,0x7A, //150 � 124 | 0x05,0x3A,0x42,0x40,0x20,0x78, //151 � 125 | 0x05,0x00,0x9D,0xA0,0xA0,0x7D, //152 � 126 | 0x05,0x39,0x44,0x44,0x44,0x39, //153 � 127 | 0x05,0x3D,0x40,0x40,0x40,0x3D, //154 � 128 | 0x05,0x3C,0x24,0xFF,0x24,0x24, //155 � 129 | 0x05,0x48,0x7E,0x49,0x43,0x66, //156 � 130 | 0x05,0x2B,0x2F,0xFC,0x2F,0x2B, //157 131 | 0x05,0xFF,0x09,0x29,0xF6,0x20, //158 � 132 | 0x05,0xC0,0x88,0x7E,0x09,0x03, //159 � 133 | 0x05,0x20,0x54,0x54,0x79,0x41, //160 134 | 0x05,0x00,0x00,0x44,0x7D,0x41, //161 � 135 | 0x05,0x30,0x48,0x48,0x4A,0x32, //162 � 136 | 0x05,0x38,0x40,0x40,0x22,0x7A, //163 � 137 | 0x05,0x00,0x7A,0x0A,0x0A,0x72, //164 � 138 | 0x05,0x7D,0x0D,0x19,0x31,0x7D, //165 � 139 | 0x05,0x26,0x29,0x29,0x2F,0x28, //166 � 140 | 0x05,0x26,0x29,0x29,0x29,0x26, //167 � 141 | 0x05,0x30,0x48,0x4D,0x40,0x20, //168 � 142 | 0x05,0x38,0x08,0x08,0x08,0x08, //169 � 143 | 0x05,0x08,0x08,0x08,0x08,0x38, //170 � 144 | 0x05,0x2F,0x10,0xC8,0xAC,0xBA, //171 � 145 | 0x05,0x2F,0x10,0x28,0x34,0xFA, //172 � 146 | 0x05,0x00,0x00,0x7B,0x00,0x00, //173 147 | 0x05,0x08,0x14,0x2A,0x14,0x22, //174 � 148 | 0x05,0x22,0x14,0x2A,0x14,0x08, //175 � 149 | 0x05,0xAA,0x00,0x55,0x00,0xAA, //176 � 150 | 0x05,0xAA,0x55,0xAA,0x55,0xAA, //177 � 151 | 0x05,0x00,0x00,0x00,0xFF,0x00, //178 � 152 | 0x05,0x10,0x10,0x10,0xFF,0x00, //179 � 153 | 0x05,0x14,0x14,0x14,0xFF,0x00, //180 � 154 | 0x05,0x10,0x10,0xFF,0x00,0xFF, //181 � 155 | 0x05,0x10,0x10,0xF0,0x10,0xF0, //182 � 156 | 0x05,0x14,0x14,0x14,0xFC,0x00, //183 � 157 | 0x05,0x14,0x14,0xF7,0x00,0xFF, //184 � 158 | 0x05,0x00,0x00,0xFF,0x00,0xFF, //185 � 159 | 0x05,0x14,0x14,0xF4,0x04,0xFC, //186 � 160 | 0x05,0x14,0x14,0x17,0x10,0x1F, //187 � 161 | 0x05,0x10,0x10,0x1F,0x10,0x1F, //188 � 162 | 0x05,0x14,0x14,0x14,0x1F,0x00, //189 � 163 | 0x05,0x10,0x10,0x10,0xF0,0x00, //190 � 164 | 0x05,0x00,0x00,0x00,0x1F,0x10, //191 � 165 | 0x05,0x10,0x10,0x10,0x1F,0x10, //192 � 166 | 0x05,0x10,0x10,0x10,0xF0,0x10, //193 � 167 | 0x05,0x00,0x00,0x00,0xFF,0x10, //194 � 168 | 0x05,0x10,0x10,0x10,0x10,0x10, //195 � 169 | 0x05,0x10,0x10,0x10,0xFF,0x10, //196 � 170 | 0x05,0x00,0x00,0x00,0xFF,0x14, //197 � 171 | 0x05,0x00,0x00,0xFF,0x00,0xFF, //198 � 172 | 0x05,0x00,0x00,0x1F,0x10,0x17, //199 � 173 | 0x05,0x00,0x00,0xFC,0x04,0xF4, //200 � 174 | 0x05,0x14,0x14,0x17,0x10,0x17, //201 � 175 | 0x05,0x14,0x14,0xF4,0x04,0xF4, //202 � 176 | 0x05,0x00,0x00,0xFF,0x00,0xF7, //203 � 177 | 0x05,0x14,0x14,0x14,0x14,0x14, //204 � 178 | 0x05,0x14,0x14,0xF7,0x00,0xF7, //205 � 179 | 0x05,0x14,0x14,0x14,0x17,0x14, //206 � 180 | 0x05,0x10,0x10,0x1F,0x10,0x1F, //207 � 181 | 0x05,0x14,0x14,0x14,0xF4,0x14, //208 � 182 | 0x05,0x10,0x10,0xF0,0x10,0xF0, //219 � 183 | 0x05,0x00,0x00,0x1F,0x10,0x1F, //210 � 184 | 0x05,0x00,0x00,0x00,0x1F,0x14, //211 � 185 | 0x05,0x00,0x00,0x00,0xFC,0x14, //212 � 186 | 0x05,0x00,0x00,0xF0,0x10,0xF0, //213 � 187 | 0x05,0x10,0x10,0xFF,0x10,0xFF, //214 � 188 | 0x05,0x14,0x14,0x14,0xFF,0x14, //215 � 189 | 0x05,0x10,0x10,0x10,0x1F,0x00, //216 � 190 | 0x05,0x00,0x00,0x00,0xF0,0x10, //217 � 191 | 0x05,0xFF,0xFF,0xFF,0xFF,0xFF, //218 � 192 | 0x05,0xF0,0xF0,0xF0,0xF0,0xF0, //219 � 193 | 0x05,0xFF,0xFF,0xFF,0x00,0x00, //220 � 194 | 0x05,0x00,0x00,0x00,0xFF,0xFF, //221 � 195 | 0x05,0x0F,0x0F,0x0F,0x0F,0x0F, //222 � 196 | 0x05,0x38,0x44,0x44,0x38,0x44, //223 � 197 | 0x05,0x7C,0x2A,0x2A,0x3E,0x14, //224 � 198 | 0x05,0x7E,0x02,0x02,0x06,0x06, //225 � 199 | 0x05,0x02,0x7E,0x02,0x7E,0x02, //226 � 200 | 0x05,0x63,0x55,0x49,0x41,0x63, //227 � 201 | 0x05,0x38,0x44,0x44,0x3C,0x04, //228 � 202 | 0x05,0x40,0x7E,0x20,0x1E,0x20, //239 � 203 | 0x05,0x06,0x02,0x7E,0x02,0x02, //230 � 204 | 0x05,0x99,0xA5,0xE7,0xA5,0x99, //231 � 205 | 0x05,0x1C,0x2A,0x49,0x2A,0x1C, //232 � 206 | 0x05,0x4C,0x72,0x01,0x72,0x4C, //233 � 207 | 0x05,0x30,0x4A,0x4D,0x4D,0x30, //234 � 208 | 0x05,0x30,0x48,0x78,0x48,0x30, //235 � 209 | 0x05,0xBC,0x62,0x5A,0x46,0x3D, //236 � 210 | 0x05,0x3E,0x49,0x49,0x49,0x00, //237 � 211 | 0x05,0x7E,0x01,0x01,0x01,0x7E, //238 � 212 | 0x05,0x2A,0x2A,0x2A,0x2A,0x2A, //239 � 213 | 0x05,0x44,0x44,0x5F,0x44,0x44, //240 � 214 | 0x05,0x40,0x51,0x4A,0x44,0x40, //241 � 215 | 0x05,0x40,0x44,0x4A,0x51,0x40, //242 � 216 | 0x05,0x00,0x00,0xFF,0x01,0x03, //243 � 217 | 0x05,0xE0,0x80,0xFF,0x00,0x00, //244 � 218 | 0x05,0x08,0x08,0x6B,0x6B,0x08, //245 � 219 | 0x05,0x36,0x12,0x36,0x24,0x36, //246 � 220 | 0x05,0x06,0x0F,0x09,0x0F,0x06, //247 � 221 | 0x05,0x00,0x00,0x18,0x18,0x00, //248 � 222 | 0x05,0x00,0x00,0x10,0x10,0x00, //249 � 223 | 0x05,0x30,0x40,0xFF,0x01,0x01, //250 � 224 | 0x05,0x00,0x1F,0x01,0x01,0x1E, //251 � 225 | 0x05,0x00,0x19,0x1D,0x17,0x12, //252 � 226 | 0x05,0x00,0x3C,0x3C,0x3C,0x3C, //253 � 227 | 0x05,0x00,0x00,0x00,0x00,0x00, //254 � 228 | }; -------------------------------------------------------------------------------- /fonts/NeatoReduced5x7.c: -------------------------------------------------------------------------------- 1 | // Modified version of Standard ASCII 5x7 font 2 | // NEATO ASCII 5x7 font (Reduced charset: 96 characters) 3 | // BY: IxD SMART Design, ported by: aisencc 4 | static const unsigned char font[] PROGMEM = { 5 | 0x05,0x00,0x00,0x00,0x00,0x00, //32 (space) 6 | 0x05,0x00,0x00,0x17,0x00,0x00, //33 ! 7 | 0x05,0x00,0x07,0x00,0x07,0x00, //34 8 | 0x05,0x14,0x7F,0x14,0x7F,0x14, //35 # 9 | 0x05,0x24,0x2A,0x7F,0x2A,0x12, //36 $ 10 | 0x05,0x23,0x13,0x08,0x64,0x62, //37 % 11 | 0x05,0x36,0x49,0x56,0x20,0x50, //38 & 12 | 0x05,0x00,0x08,0x07,0x03,0x00, //39 ' 13 | 0x05,0x00,0x1C,0x22,0x41,0x00, //40 ( 14 | 0x05,0x00,0x41,0x22,0x1C,0x00, //41 ) 15 | 0x05,0x2A,0x1C,0x7F,0x1C,0x2A, //42 * 16 | 0x05,0x08,0x08,0x3E,0x08,0x08, //43 + 17 | 0x05,0x00,0x80,0x70,0x30,0x00, //44 18 | 0x05,0x08,0x08,0x08,0x08,0x08, //45 - 19 | 0x05,0x00,0x00,0x60,0x60,0x00, //46 . 20 | 0x05,0x20,0x10,0x08,0x04,0x02, //47/ 21 | 0x05,0x3E,0x51,0x49,0x45,0x3E, //48 0 22 | 0x05,0x00,0x42,0x7F,0x40,0x00, //49 1 23 | 0x05,0x72,0x49,0x49,0x49,0x46, //50 2 24 | 0x05,0x21,0x41,0x49,0x4D,0x33, //51 3 25 | 0x05,0x18,0x14,0x12,0x7F,0x10, //52 4 26 | 0x05,0x27,0x45,0x45,0x45,0x39, //53 5 27 | 0x05,0x3C,0x4A,0x49,0x49,0x31, //54 6 28 | 0x05,0x41,0x21,0x11,0x09,0x07, //55 7 29 | 0x05,0x36,0x49,0x49,0x49,0x36, //56 8 30 | 0x05,0x46,0x49,0x49,0x29,0x1E, //57 9 31 | 0x05,0x00,0x00,0x14,0x00,0x00, //58 : 32 | 0x05,0x00,0x40,0x34,0x00,0x00, //59 ; 33 | 0x05,0x00,0x08,0x14,0x22,0x41, //60 < 34 | 0x05,0x14,0x14,0x14,0x14,0x14, //61 = 35 | 0x05,0x00,0x41,0x22,0x14,0x08, //62 > 36 | 0x05,0x02,0x01,0x59,0x09,0x06, //63 ? 37 | 0x05,0x3E,0x41,0x5D,0x59,0x4E, //64 @ 38 | 0x05,0x1F,0x05,0x05,0x05,0x1F, //65 A 39 | 0x05,0x1F,0x15,0x15,0x15,0x0E, //66 B 40 | 0x05,0x1F,0x11,0x11,0x11,0x11, //67 C 41 | 0x05,0x1F,0x11,0x11,0x11,0x0E, //68 D 42 | 0x05,0x1F,0x15,0x15,0x15,0x11, //69 E 43 | 0x05,0x1F,0x05,0x05,0x05,0x01, //70 F 44 | 0x05,0x1F,0x11,0x15,0x15,0x1D, //71 G 45 | 0x05,0x1F,0x04,0x04,0x04,0x1F, //72 H 46 | 0x05,0x11,0x11,0x1F,0x11,0x11, //73 I 47 | 0x05,0x11,0x11,0x1F,0x01,0x01, //74 J 48 | 0x05,0x1F,0x04,0x0A,0x11,0x00, //75 K 49 | 0x05,0x1F,0x10,0x10,0x10,0x00, //76 L 50 | 0x05,0x1F,0x02,0x04,0x02,0x1F, //77 M 51 | 0x05,0x1F,0x02,0x04,0x08,0x1F, //78 N 52 | 0x05,0x1F,0x11,0x11,0x11,0x1F, //79 O 53 | 0x05,0x1F,0x05,0x05,0x05,0x07, //80 P 54 | 0x05,0x1F,0x11,0x11,0x19,0x1F, //81 Q 55 | 0x05,0x1F,0x05,0x05,0x0D,0x17, //82 R 56 | 0x05,0x17,0x15,0x15,0x15,0x1D, //83 S 57 | 0x05,0x01,0x01,0x1F,0x01,0x01, //84 T 58 | 0x05,0x1F,0x10,0x10,0x10,0x1F, //85 U 59 | 0x05,0x03,0x0C,0x10,0x0C,0x03, //86 V 60 | 0x05,0x1F,0x10,0x08,0x10,0x1F, //87 W 61 | 0x05,0x11,0x0A,0x04,0x0A,0x11, //88 X 62 | 0x05,0x01,0x02,0x1C,0x02,0x01, //89 Y 63 | 0x05,0x11,0x19,0x15,0x13,0x11, //90 Z 64 | 0x05,0x00,0x7F,0x41,0x41,0x41, //91 65 | 0x05,0x02,0x04,0x08,0x10,0x20, //92 66 | 0x05,0x00,0x41,0x41,0x41,0x7F, //93 67 | 0x05,0x04,0x02,0x01,0x02,0x04, //94 68 | 0x05,0x40,0x40,0x40,0x40,0x40, //95 69 | 0x05,0x00,0x03,0x07,0x08,0x00, //96 70 | 0x05,0x20,0x54,0x54,0x78,0x40, //97 a 71 | 0x05,0x7F,0x28,0x44,0x44,0x38, //98 b 72 | 0x05,0x38,0x44,0x44,0x44,0x28, //99 c 73 | 0x05,0x38,0x44,0x44,0x28,0x7F, //100 d 74 | 0x05,0x38,0x54,0x54,0x54,0x18, //101 e 75 | 0x05,0x00,0x08,0x7E,0x09,0x02, //102 f 76 | 0x05,0x18,0xA4,0xA4,0x9C,0x78, //103 g 77 | 0x05,0x7F,0x08,0x04,0x04,0x78, //104 h 78 | 0x05,0x00,0x44,0x7D,0x40,0x00, //105 i 79 | 0x05,0x20,0x40,0x40,0x3D,0x00, //106 j 80 | 0x05,0x7F,0x10,0x28,0x44,0x00, //107 k 81 | 0x05,0x00,0x41,0x7F,0x40,0x00, //108 l 82 | 0x05,0x7C,0x04,0x78,0x04,0x78, //109 m 83 | 0x05,0x7C,0x08,0x04,0x04,0x78, //110 n 84 | 0x05,0x38,0x44,0x44,0x44,0x38, //111 o 85 | 0x05,0xFC,0x18,0x24,0x24,0x18, //112 p 86 | 0x05,0x18,0x24,0x24,0x18,0xFC, //113 q 87 | 0x05,0x7C,0x08,0x04,0x04,0x08, //114 r 88 | 0x05,0x48,0x54,0x54,0x54,0x24, //115 s 89 | 0x05,0x04,0x04,0x3F,0x44,0x24, //116 t 90 | 0x05,0x3C,0x40,0x40,0x20,0x7C, //117 u 91 | 0x05,0x1C,0x20,0x40,0x20,0x1C, //118 v 92 | 0x05,0x3C,0x40,0x30,0x40,0x3C, //119 w 93 | 0x05,0x44,0x28,0x10,0x28,0x44, //120 x 94 | 0x05,0x4C,0x90,0x90,0x90,0x7C, //121 y 95 | 0x05,0x44,0x64,0x54,0x4C,0x44, //122 z 96 | 0x05,0x00,0x08,0x36,0x41,0x00, //123 { 97 | 0x05,0x00,0x00,0x77,0x00,0x00, //124 | 98 | 0x05,0x00,0x41,0x36,0x08,0x00, //125 } 99 | 0x05,0x02,0x01,0x02,0x04,0x02, //126 ~ 100 | 0x05,0x3C,0x26,0x23,0x26,0x3C, //127 (delete) 101 | }; -------------------------------------------------------------------------------- /fonts/Robotron13x21.c: -------------------------------------------------------------------------------- 1 | //Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0 2 | //MikroElektronika 2011 3 | //http://www.mikroe.com 4 | 5 | //GLCD FontName : Robotron13x21 6 | //GLCD FontSize : 13 x 21 (62 characters) 7 | 8 | const unsigned short Robotron13x21[] = { 9 | 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 10 | 0x03, 0xFC, 0x9F, 0x03, 0xFC, 0x9F, 0x03, 0xFC, 0x9F, 0x03, 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 ! 11 | 0x08, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char " 12 | 0x0D, 0x80, 0x73, 0x00, 0x80, 0x73, 0x00, 0x80, 0x73, 0x00, 0xE0, 0xFF, 0x03, 0xE0, 0xFF, 0x03, 0xE0, 0xFF, 0x03, 0x80, 0x73, 0x00, 0x80, 0x73, 0x00, 0xE0, 0xFF, 0x03, 0xE0, 0xFF, 0x03, 0xE0, 0xFF, 0x03, 0x80, 0x73, 0x00, 0x80, 0x73, 0x00, // Code for char # 13 | 0x0D, 0xFC, 0xE3, 0x03, 0xFC, 0xE3, 0x03, 0xFC, 0xE3, 0x03, 0x9C, 0xE3, 0x03, 0x9C, 0xE3, 0x03, 0x9F, 0x83, 0x1F, 0x9F, 0x83, 0x1F, 0x9F, 0x83, 0x1F, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0xFF, 0x03, // Code for char $ 14 | 0x0B, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char % 15 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, // Code for char & 16 | 0x03, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 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, 0x00, 0x00, // Code for char ' 17 | 0x08, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0x07, 0x00, 0x1C, 0x07, 0x00, 0x1C, 0x07, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ( 18 | 0x08, 0x03, 0x00, 0x1C, 0x03, 0x00, 0x1C, 0x03, 0x00, 0x1C, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ) 19 | 0x0D, 0x60, 0x1C, 0x00, 0x60, 0x1C, 0x00, 0x60, 0x1C, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0xFC, 0x7F, 0x00, 0xFC, 0x7F, 0x00, 0xFC, 0x7F, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x60, 0x1C, 0x00, 0x60, 0x1C, 0x00, 0x60, 0x1C, 0x00, // Code for char * 20 | 0x08, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0xE0, 0x1F, 0x00, 0xE0, 0x1F, 0x00, 0xE0, 0x1F, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char + 21 | 0x03, 0x00, 0x80, 0x1F, 0x00, 0x80, 0x1F, 0x00, 0x80, 0x1F, 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 , 22 | 0x08, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char - 23 | 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 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 . 24 | 0x05, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 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 / 25 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, // Code for char 0 26 | 0x0B, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 1 27 | 0x0D, 0x80, 0xFF, 0x03, 0x80, 0xFF, 0x03, 0x80, 0xFF, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, // Code for char 2 28 | 0x0D, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, // Code for char 3 29 | 0x0D, 0xFC, 0x1F, 0x00, 0xFC, 0x1F, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0xE0, 0xFF, 0x03, 0xE0, 0xFF, 0x03, 0xE0, 0xFF, 0x03, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, // Code for char 4 30 | 0x0D, 0xFC, 0x83, 0x03, 0xFC, 0x83, 0x03, 0xFC, 0x83, 0x03, 0x1C, 0x83, 0x03, 0x1C, 0x83, 0x03, 0x1C, 0x83, 0x03, 0x1C, 0x83, 0x03, 0x1C, 0x83, 0x03, 0x1C, 0x83, 0x03, 0x1C, 0x83, 0x03, 0x00, 0x83, 0x03, 0x00, 0xFF, 0x03, 0x00, 0xFF, 0x03, // Code for char 5 31 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x80, 0xFF, 0x03, 0x80, 0xFF, 0x03, 0x80, 0xFF, 0x03, // Code for char 6 32 | 0x0D, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x60, 0x00, 0x1C, 0x60, 0x00, 0x1C, 0x60, 0x00, 0x1C, 0x1C, 0x00, 0x1C, 0x1C, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, // Code for char 7 33 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, // Code for char 8 34 | 0x0D, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, // Code for char 9 35 | 0x03, 0x80, 0x83, 0x03, 0x80, 0x83, 0x03, 0x80, 0x83, 0x03, 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 : 36 | 0x03, 0x80, 0x03, 0x1F, 0x80, 0x03, 0x1F, 0x80, 0x03, 0x1F, 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 ; 37 | 0x08, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0xE0, 0x70, 0x00, 0xE0, 0x70, 0x00, 0xE0, 0x70, 0x00, 0xE0, 0x70, 0x00, 0xE0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char < 38 | 0x08, 0xE0, 0x1C, 0x00, 0xE0, 0x1C, 0x00, 0xE0, 0x1C, 0x00, 0xE0, 0x1C, 0x00, 0xE0, 0x1C, 0x00, 0xE0, 0x1C, 0x00, 0xE0, 0x1C, 0x00, 0xE0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char = 39 | 0x08, 0xE0, 0x60, 0x00, 0xE0, 0x60, 0x00, 0xE0, 0x60, 0x00, 0xE0, 0x60, 0x00, 0xE0, 0x60, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char > 40 | 0x0D, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1C, 0x9C, 0x03, 0x1C, 0x9C, 0x03, 0x1C, 0x9C, 0x03, 0x1C, 0x1C, 0x00, 0x1C, 0x1C, 0x00, 0xFC, 0x1F, 0x00, 0xFC, 0x1F, 0x00, 0xFC, 0x1F, 0x00, // Code for char ? 41 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0xFC, 0x9F, 0x03, 0xFC, 0x9F, 0x03, 0xFC, 0x9F, 0x03, 0x1C, 0x9C, 0x03, 0x1C, 0x9C, 0x03, 0xFC, 0x9F, 0x03, 0xFC, 0x9F, 0x03, 0xFC, 0x9F, 0x03, // Code for char @ 42 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, // Code for char A 43 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0xFC, 0x83, 0x03, 0xFC, 0x83, 0x03, 0x80, 0xFF, 0x03, 0x80, 0xFF, 0x03, 0x80, 0xFF, 0x03, // Code for char B 44 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, // Code for char C 45 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0xE0, 0x7F, 0x00, 0xE0, 0x7F, 0x00, 0xE0, 0x7F, 0x00, // Code for char D 46 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, // Code for char E 47 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, // Code for char F 48 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0xFC, 0x9C, 0x03, 0xFC, 0x9C, 0x03, 0xFC, 0xFC, 0x03, 0xFC, 0xFC, 0x03, 0xFC, 0xFC, 0x03, // Code for char G 49 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, // Code for char H 50 | 0x05, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 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 I 51 | 0x0D, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, // Code for char J 52 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0xE0, 0x70, 0x00, 0xE0, 0x70, 0x00, 0xE0, 0x70, 0x00, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, // Code for char K 53 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, // Code for char L 54 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, // Code for char M 55 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, // Code for char N 56 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0xFC, 0x80, 0x03, 0xFC, 0x80, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, // Code for char O 57 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, // Code for char P 58 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0xE0, 0x1F, 0x1C, 0xE0, 0x1F, 0x1C, 0xE0, 0x1F, 0x1C, 0xE0, 0x1F, 0x1C, 0xE0, 0x1F, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, // Code for char Q 59 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0x9C, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0x80, 0xFF, 0x03, 0x80, 0xFF, 0x03, 0x80, 0xFF, 0x03, // Code for char R 60 | 0x0D, 0xFC, 0xE3, 0x03, 0xFC, 0xE3, 0x03, 0xFC, 0xE3, 0x03, 0x9C, 0xE3, 0x03, 0x9C, 0xE3, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0xFF, 0x03, // Code for char S 61 | 0x0D, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x9C, 0xFF, 0x03, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, // Code for char T 62 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, // Code for char U 63 | 0x0D, 0xFC, 0x1F, 0x00, 0xFC, 0x1F, 0x00, 0xFC, 0x1F, 0x00, 0xFC, 0x7F, 0x00, 0xFC, 0x7F, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x00, 0xFC, 0x1F, 0x00, 0xFC, 0x1F, 0x00, // Code for char V 64 | 0x0D, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, // Code for char W 65 | 0x0D, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0xE0, 0x70, 0x00, 0xE0, 0x70, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0xE0, 0x70, 0x00, 0xE0, 0x70, 0x00, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, 0x1C, 0x80, 0x03, // Code for char X 66 | 0x0D, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0x80, 0xFF, 0x03, 0x80, 0xFF, 0x03, 0x80, 0xFF, 0x03, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, // Code for char Y 67 | 0x0D, 0xFC, 0x80, 0x03, 0xFC, 0x80, 0x03, 0xFC, 0x80, 0x03, 0xFC, 0xE0, 0x03, 0xFC, 0xE0, 0x03, 0x1C, 0x9C, 0x03, 0x1C, 0x9C, 0x03, 0x1C, 0x9C, 0x03, 0x9C, 0x83, 0x03, 0x9C, 0x83, 0x03, 0xFC, 0x80, 0x03, 0xFC, 0x80, 0x03, 0xFC, 0x80, 0x03, // Code for char Z 68 | 0x08, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0x07, 0x00, 0x1C, 0x07, 0x00, 0x1C, 0x07, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char [ 69 | 0x05, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 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 BackSlash 70 | 0x08, 0x03, 0x00, 0x1C, 0x03, 0x00, 0x1C, 0x03, 0x00, 0x1C, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Code for char ] 71 | }; 72 | 73 | -------------------------------------------------------------------------------- /fonts/Robotron7x11.c: -------------------------------------------------------------------------------- 1 | //Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0 2 | //MikroElektronika 2011 3 | //http://www.mikroe.com 4 | 5 | //GLCD FontName : Robotron7x11 6 | //GLCD FontSize : 7 x 11 7 | 8 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 9 | 0x02, 0x00, 0x00, 0x7C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ! 10 | 0x05, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char " 11 | 0x07, 0x10, 0x01, 0xF8, 0x03, 0x10, 0x01, 0x10, 0x01, 0x10, 0x01, 0xF8, 0x03, 0x10, 0x01, // Code for char # 12 | 0x07, 0x9C, 0x03, 0x94, 0x03, 0x94, 0x03, 0x17, 0x06, 0x14, 0x02, 0x14, 0x02, 0xF4, 0x03, // Code for char $ 13 | 0x06, 0x0C, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x00, 0x03, 0x00, 0x00, // Code for char % 14 | 0x07, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x14, 0x02, 0x60, 0x02, 0x60, 0x02, 0xE0, 0x03, // Code for char & 15 | 0x02, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ' 16 | 0x05, 0x00, 0x00, 0xFF, 0x07, 0xFF, 0x07, 0x01, 0x04, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, // Code for char ( 17 | 0x05, 0x00, 0x00, 0x03, 0x04, 0xFF, 0x07, 0xFF, 0x07, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, // Code for char ) 18 | 0x07, 0x68, 0x00, 0x10, 0x00, 0x10, 0x00, 0xFC, 0x01, 0x10, 0x00, 0x10, 0x00, 0x68, 0x00, // Code for char * 19 | 0x05, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x78, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char + 20 | 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char , 21 | 0x05, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char - 22 | 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char . 23 | 0x03, 0xC0, 0x03, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char / 24 | 0x07, 0xFC, 0x03, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0xFC, 0x03, // Code for char 0 25 | 0x07, 0x00, 0x00, 0x00, 0x02, 0x04, 0x02, 0x04, 0x02, 0xFC, 0x03, 0x00, 0x02, 0x00, 0x02, // Code for char 1 26 | 0x07, 0xF0, 0x03, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0x1C, 0x00, // Code for char 2 27 | 0x07, 0x00, 0x02, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0xFC, 0x03, // Code for char 3 28 | 0x07, 0x7C, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xF8, 0x03, 0x40, 0x00, // Code for char 4 29 | 0x07, 0x7C, 0x02, 0x74, 0x02, 0x74, 0x02, 0x74, 0x02, 0x74, 0x02, 0x70, 0x02, 0xF0, 0x03, // Code for char 5 30 | 0x07, 0xFC, 0x03, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0xF0, 0x03, // Code for char 6 31 | 0x07, 0x04, 0x02, 0x84, 0x01, 0x44, 0x00, 0x44, 0x00, 0x34, 0x00, 0x34, 0x00, 0x1C, 0x00, // Code for char 7 32 | 0x07, 0xFC, 0x03, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0xFC, 0x03, // Code for char 8 33 | 0x07, 0x1C, 0x00, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0xFC, 0x03, // Code for char 9 34 | 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char : 35 | 0x02, 0x00, 0x00, 0x10, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ; 36 | 0x05, 0x00, 0x00, 0xF0, 0x00, 0x08, 0x01, 0x08, 0x01, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char < 37 | 0x05, 0x00, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char = 38 | 0x05, 0x00, 0x00, 0x98, 0x01, 0x98, 0x01, 0x98, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char > 39 | 0x07, 0x1C, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x44, 0x02, 0x44, 0x00, 0x44, 0x00, 0x7C, 0x00, // Code for char ? 40 | 0x07, 0xFC, 0x03, 0x04, 0x02, 0x04, 0x02, 0x7C, 0x02, 0x44, 0x02, 0x44, 0x02, 0x7C, 0x02, // Code for char @ 41 | 0x07, 0xFC, 0x03, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0xFC, 0x03, 0xFC, 0x03, // Code for char A 42 | 0x07, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x14, 0x02, 0x1C, 0x02, 0x1C, 0x02, 0xF0, 0x03, // Code for char B 43 | 0x07, 0xFC, 0x03, 0xFC, 0x03, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, // Code for char C 44 | 0x07, 0xFC, 0x03, 0xFC, 0x03, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0xF8, 0x01, // Code for char D 45 | 0x07, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, // Code for char E 46 | 0x07, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, // Code for char F 47 | 0x07, 0xFC, 0x03, 0xFC, 0x03, 0x04, 0x02, 0x04, 0x02, 0x5C, 0x02, 0x5C, 0x02, 0xDC, 0x03, // Code for char G 48 | 0x07, 0xFC, 0x03, 0xFC, 0x03, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xFC, 0x03, // Code for char H 49 | 0x03, 0x00, 0x00, 0xFC, 0x03, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char I 50 | 0x07, 0x80, 0x03, 0x80, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0xFC, 0x03, // Code for char J 51 | 0x07, 0xFC, 0x03, 0xFC, 0x03, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x08, 0x01, 0x04, 0x02, // Code for char K 52 | 0x07, 0xFC, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, // Code for char L 53 | 0x07, 0xFC, 0x03, 0x04, 0x00, 0x04, 0x00, 0x3C, 0x00, 0x04, 0x00, 0x04, 0x00, 0xFC, 0x03, // Code for char M 54 | 0x07, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0xFC, 0x03, // Code for char N 55 | 0x07, 0xFC, 0x03, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x1C, 0x02, 0x1C, 0x02, 0xFC, 0x03, // Code for char O 56 | 0x07, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x1C, 0x00, // Code for char P 57 | 0x07, 0xFC, 0x03, 0x04, 0x02, 0x04, 0x02, 0x84, 0x07, 0x84, 0x07, 0x84, 0x07, 0xFC, 0x03, // Code for char Q 58 | 0x07, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x14, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0xF0, 0x03, // Code for char R 59 | 0x07, 0x9C, 0x03, 0x94, 0x03, 0x94, 0x03, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0xF4, 0x03, // Code for char S 60 | 0x07, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x04, 0x00, // Code for char T 61 | 0x07, 0xFC, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0xFC, 0x03, 0xFC, 0x03, // Code for char U 62 | 0x07, 0x7C, 0x00, 0xFC, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x80, 0x01, 0x7C, 0x00, // Code for char V 63 | 0x07, 0xFC, 0x03, 0x80, 0x03, 0x80, 0x03, 0xFC, 0x03, 0x00, 0x02, 0x00, 0x02, 0xFC, 0x03, // Code for char W 64 | 0x07, 0x04, 0x02, 0x08, 0x01, 0x08, 0x01, 0xF0, 0x00, 0x08, 0x01, 0x08, 0x01, 0x04, 0x02, // Code for char X 65 | 0x07, 0x00, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0xF0, 0x03, 0x10, 0x00, 0x10, 0x00, 0x1C, 0x00, // Code for char Y 66 | 0x07, 0x1C, 0x02, 0x9C, 0x03, 0x9C, 0x03, 0x44, 0x02, 0x34, 0x02, 0x34, 0x02, 0x1C, 0x02, // Code for char Z 67 | 0x05, 0x00, 0x00, 0xFF, 0x07, 0xFF, 0x07, 0x01, 0x04, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, // Code for char [ 68 | 0x03, 0x3C, 0x00, 0xC0, 0x03, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char BackSlash 69 | 0x05, 0x00, 0x00, 0x03, 0x04, 0xFF, 0x07, 0xFF, 0x07, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, // Code for char ] 70 | 0x05, 0x00, 0x00, 0xFF, 0x03, 0x01, 0x02, 0x01, 0x02, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, // Code for char ^ 71 | 0x07, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, // Code for char _ 72 | 0x05, 0x00, 0x00, 0xFF, 0x03, 0x01, 0x02, 0x01, 0x02, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, // Code for char ` 73 | 0x07, 0xFC, 0x03, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0xFC, 0x03, 0xFC, 0x03, // Code for char a 74 | 0x07, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x14, 0x02, 0x1C, 0x02, 0x1C, 0x02, 0xF0, 0x03, // Code for char b 75 | 0x07, 0xFC, 0x03, 0xFC, 0x03, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, // Code for char c 76 | 0x07, 0xFC, 0x03, 0xFC, 0x03, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0xF8, 0x01, // Code for char d 77 | 0x07, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, // Code for char e 78 | 0x07, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, // Code for char f 79 | 0x07, 0xFC, 0x03, 0xFC, 0x03, 0x04, 0x02, 0x04, 0x02, 0x5C, 0x02, 0x5C, 0x02, 0xDC, 0x03, // Code for char g 80 | 0x07, 0xFC, 0x03, 0xFC, 0x03, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xFC, 0x03, // Code for char h 81 | 0x03, 0x00, 0x00, 0xFC, 0x03, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char i 82 | 0x07, 0x80, 0x03, 0x80, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0xFC, 0x03, // Code for char j 83 | 0x07, 0xFC, 0x03, 0xFC, 0x03, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x08, 0x01, 0x04, 0x02, // Code for char k 84 | 0x07, 0xFC, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, // Code for char l 85 | 0x07, 0xFC, 0x03, 0x04, 0x00, 0x04, 0x00, 0x3C, 0x00, 0x04, 0x00, 0x04, 0x00, 0xFC, 0x03, // Code for char m 86 | 0x07, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0xFC, 0x03, // Code for char n 87 | 0x07, 0xFC, 0x03, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x1C, 0x02, 0x1C, 0x02, 0xFC, 0x03, // Code for char o 88 | 0x07, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x1C, 0x00, // Code for char p 89 | 0x07, 0xFC, 0x03, 0x04, 0x02, 0x04, 0x02, 0x84, 0x07, 0x84, 0x07, 0x84, 0x07, 0xFC, 0x03, // Code for char q 90 | 0x07, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x14, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0xF0, 0x03, // Code for char r 91 | 0x07, 0x9C, 0x03, 0x94, 0x03, 0x94, 0x03, 0x14, 0x02, 0x14, 0x02, 0x14, 0x02, 0xF4, 0x03, // Code for char s 92 | 0x07, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0xFC, 0x03, 0xF4, 0x03, 0xF4, 0x03, 0x04, 0x00, // Code for char t 93 | 0x07, 0xFC, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0xFC, 0x03, 0xFC, 0x03, // Code for char u 94 | 0x07, 0x7C, 0x00, 0xFC, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x80, 0x01, 0x7C, 0x00, // Code for char v 95 | 0x07, 0xFC, 0x03, 0x80, 0x03, 0x80, 0x03, 0xFC, 0x03, 0x00, 0x02, 0x00, 0x02, 0xFC, 0x03, // Code for char w 96 | 0x07, 0x04, 0x02, 0x08, 0x01, 0x08, 0x01, 0xF0, 0x00, 0x08, 0x01, 0x08, 0x01, 0x04, 0x02, // Code for char x 97 | 0x07, 0x00, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0xF0, 0x03, 0x10, 0x00, 0x10, 0x00, 0x1C, 0x00, // Code for char y 98 | 0x07, 0x1C, 0x02, 0x9C, 0x03, 0x9C, 0x03, 0x44, 0x02, 0x34, 0x02, 0x34, 0x02, 0x1C, 0x02, // Code for char z 99 | 0x07, 0x00, 0x00, 0x60, 0x00, 0xFF, 0x07, 0xFF, 0x07, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, // Code for char { 100 | 0x02, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char | 101 | 0x06, 0x00, 0x00, 0x03, 0x04, 0xFF, 0x07, 0xFF, 0x07, 0xFF, 0x07, 0x60, 0x00, 0x00, 0x00, // Code for char } 102 | 0x05, 0x00, 0x00, 0xFF, 0x03, 0x01, 0x02, 0x01, 0x02, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, // Code for char ~ 103 | 0x02, 0xF8, 0x01, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Code for char  104 | 105 | 106 | -------------------------------------------------------------------------------- /fonts/UbuntuMono12x24.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/fonts/UbuntuMono12x24.c -------------------------------------------------------------------------------- /fonts/UnispaceExt12x24.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/fonts/UnispaceExt12x24.c -------------------------------------------------------------------------------- /fonts/Wendy7x8.c: -------------------------------------------------------------------------------- 1 | 2 | //WARNING: This Font Require X-GLCD Lib. 3 | // You can not use it with MikroE GLCD Lib. 4 | 5 | //Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0 6 | //MikroElektronika 2011 7 | //http://www.mikroe.com 8 | 9 | //GLCD FontName : wendy7x8 10 | //Based on a font by Wendy - fricky@gmail.com 11 | //GLCD FontSize : 7 x 8 12 | 13 | const unsigned short wendy7x8[] = { 14 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 15 | 0x01, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ! 16 | 0x03, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, // Code for char " 17 | 0x05, 0x60, 0x7C, 0x04, 0x64, 0x7C, 0x00, 0x00, // Code for char # 18 | 0x03, 0x5C, 0xFE, 0x74, 0x00, 0x00, 0x00, 0x00, // Code for char $ 19 | 0x04, 0x48, 0x20, 0x10, 0x48, 0x00, 0x00, 0x00, // Code for char % 20 | 0x03, 0x10, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, // Code for char & 21 | 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ' 22 | 0x02, 0x38, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ( 23 | 0x02, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ) 24 | 0x07, 0x08, 0x1C, 0x3C, 0x78, 0x3C, 0x1C, 0x08, // Code for char * 25 | 0x03, 0x10, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, // Code for char + 26 | 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char , 27 | 0x03, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, // Code for char - 28 | 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char . 29 | 0x03, 0x60, 0x10, 0x0C, 0x00, 0x00, 0x00, 0x00, // Code for char / 30 | 0x03, 0x7C, 0x44, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char 0 31 | 0x01, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 1 32 | 0x03, 0x74, 0x54, 0x5C, 0x00, 0x00, 0x00, 0x00, // Code for char 2 33 | 0x03, 0x54, 0x54, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char 3 34 | 0x03, 0x3C, 0x20, 0x78, 0x00, 0x00, 0x00, 0x00, // Code for char 4 35 | 0x03, 0x5C, 0x54, 0x74, 0x00, 0x00, 0x00, 0x00, // Code for char 5 36 | 0x03, 0x7C, 0x54, 0x74, 0x00, 0x00, 0x00, 0x00, // Code for char 6 37 | 0x03, 0x04, 0x04, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char 7 38 | 0x03, 0x7C, 0x54, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char 8 39 | 0x03, 0x5C, 0x54, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char 9 40 | 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char : 41 | 0x01, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ; 42 | 0x03, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x00, // Code for char < 43 | 0x02, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char = 44 | 0x03, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, // Code for char > 45 | 0x03, 0x5A, 0x0A, 0x0E, 0x00, 0x00, 0x00, 0x00, // Code for char ? 46 | 0x05, 0x7E, 0x42, 0x5A, 0x52, 0x5E, 0x00, 0x00, // Code for char @ 47 | 0x03, 0x7C, 0x14, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char A 48 | 0x03, 0x7C, 0x54, 0x6C, 0x00, 0x00, 0x00, 0x00, // Code for char B 49 | 0x03, 0x7C, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, // Code for char C 50 | 0x03, 0x7C, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, // Code for char D 51 | 0x03, 0x7C, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, // Code for char E 52 | 0x03, 0x7C, 0x14, 0x04, 0x00, 0x00, 0x00, 0x00, // Code for char F 53 | 0x03, 0x7C, 0x44, 0x74, 0x00, 0x00, 0x00, 0x00, // Code for char G 54 | 0x03, 0x7C, 0x10, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char H 55 | 0x01, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char I 56 | 0x03, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char J 57 | 0x03, 0x7C, 0x10, 0x6C, 0x00, 0x00, 0x00, 0x00, // Code for char K 58 | 0x03, 0x7C, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, // Code for char L 59 | 0x05, 0x7C, 0x04, 0x38, 0x04, 0x7C, 0x00, 0x00, // Code for char M 60 | 0x03, 0x7C, 0x04, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char N 61 | 0x03, 0x7C, 0x44, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char O 62 | 0x03, 0x7C, 0x14, 0x1C, 0x00, 0x00, 0x00, 0x00, // Code for char P 63 | 0x03, 0x1C, 0x14, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char Q 64 | 0x03, 0x7C, 0x14, 0x6C, 0x00, 0x00, 0x00, 0x00, // Code for char R 65 | 0x03, 0x5C, 0x54, 0x74, 0x00, 0x00, 0x00, 0x00, // Code for char S 66 | 0x03, 0x04, 0x7C, 0x04, 0x00, 0x00, 0x00, 0x00, // Code for char T 67 | 0x03, 0x7C, 0x40, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char U 68 | 0x03, 0x3C, 0x40, 0x3C, 0x00, 0x00, 0x00, 0x00, // Code for char V 69 | 0x05, 0x7C, 0x40, 0x30, 0x40, 0x7C, 0x00, 0x00, // Code for char W 70 | 0x03, 0x6C, 0x10, 0x6C, 0x00, 0x00, 0x00, 0x00, // Code for char X 71 | 0x03, 0x5C, 0x50, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char Y 72 | 0x03, 0x64, 0x54, 0x4C, 0x00, 0x00, 0x00, 0x00, // Code for char Z 73 | 0x02, 0x7C, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char [ 74 | 0x03, 0x0C, 0x10, 0x60, 0x00, 0x00, 0x00, 0x00, // Code for char BackSlash 75 | 0x02, 0x44, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ] 76 | 0x01, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ^ 77 | 0x03, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, // Code for char _ 78 | 0x01, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ` 79 | 0x03, 0x7C, 0x14, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char a 80 | 0x03, 0x7C, 0x54, 0x6C, 0x00, 0x00, 0x00, 0x00, // Code for char b 81 | 0x03, 0x7C, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, // Code for char c 82 | 0x03, 0x7C, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, // Code for char d 83 | 0x03, 0x7C, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, // Code for char e 84 | 0x03, 0x7C, 0x14, 0x04, 0x00, 0x00, 0x00, 0x00, // Code for char f 85 | 0x03, 0x7C, 0x44, 0x74, 0x00, 0x00, 0x00, 0x00, // Code for char g 86 | 0x03, 0x7C, 0x10, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char h 87 | 0x01, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char i 88 | 0x03, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char j 89 | 0x03, 0x7C, 0x10, 0x6C, 0x00, 0x00, 0x00, 0x00, // Code for char k 90 | 0x03, 0x7C, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, // Code for char l 91 | 0x05, 0x7C, 0x04, 0x38, 0x04, 0x7C, 0x00, 0x00, // Code for char m 92 | 0x03, 0x7C, 0x04, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char n 93 | 0x03, 0x7C, 0x44, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char o 94 | 0x03, 0x7C, 0x14, 0x1C, 0x00, 0x00, 0x00, 0x00, // Code for char p 95 | 0x03, 0x1C, 0x14, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char q 96 | 0x03, 0x7C, 0x14, 0x6C, 0x00, 0x00, 0x00, 0x00, // Code for char r 97 | 0x03, 0x5C, 0x54, 0x74, 0x00, 0x00, 0x00, 0x00, // Code for char s 98 | 0x03, 0x04, 0x7C, 0x04, 0x00, 0x00, 0x00, 0x00, // Code for char t 99 | 0x03, 0x7C, 0x40, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char u 100 | 0x03, 0x3C, 0x40, 0x3C, 0x00, 0x00, 0x00, 0x00, // Code for char v 101 | 0x05, 0x7C, 0x40, 0x30, 0x40, 0x7C, 0x00, 0x00, // Code for char w 102 | 0x03, 0x6C, 0x10, 0x6C, 0x00, 0x00, 0x00, 0x00, // Code for char x 103 | 0x03, 0x5C, 0x50, 0x7C, 0x00, 0x00, 0x00, 0x00, // Code for char y 104 | 0x03, 0x64, 0x54, 0x4C, 0x00, 0x00, 0x00, 0x00, // Code for char z 105 | 0x01, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char { 106 | 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char | 107 | 0x01, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char } 108 | 0x04, 0x10, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, // Code for char ~ 109 | 0x03, 0x7E, 0x42, 0x7E, 0x00, 0x00, 0x00, 0x00 // Code for char  110 | }; 111 | 112 | -------------------------------------------------------------------------------- /images/Cat221x1232.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/Cat221x1232.raw -------------------------------------------------------------------------------- /images/MicroPython128x128.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/MicroPython128x128.raw -------------------------------------------------------------------------------- /images/Python41x49.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/Python41x49.raw -------------------------------------------------------------------------------- /images/RaspberryPiWB128x128.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/RaspberryPiWB128x128.raw -------------------------------------------------------------------------------- /images/Rototron128x26.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/Rototron128x26.raw -------------------------------------------------------------------------------- /images/Tabby128x128.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/Tabby128x128.raw -------------------------------------------------------------------------------- /images/Tortie128x128.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/Tortie128x128.raw -------------------------------------------------------------------------------- /images/blinka45x48.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/blinka45x48.raw -------------------------------------------------------------------------------- /images/invaders48x36.pbm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/invaders48x36.pbm -------------------------------------------------------------------------------- /images/kb0.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/kb0.raw -------------------------------------------------------------------------------- /images/kb1.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/kb1.raw -------------------------------------------------------------------------------- /images/kb2.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/kb2.raw -------------------------------------------------------------------------------- /images/kb3.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/kb3.raw -------------------------------------------------------------------------------- /images/kb_sprite_320x768.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/kb_sprite_320x768.raw -------------------------------------------------------------------------------- /images/keyboard_blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/images/keyboard_blank.png -------------------------------------------------------------------------------- /pwn_search.py: -------------------------------------------------------------------------------- 1 | """Search online for pwned passwords.""" 2 | from machine import Pin, SPI # type: ignore 3 | from hashlib import sha1 4 | from ubinascii import hexlify # type: ignore 5 | from urequests2 import get 6 | from network import STA_IF, WLAN # type: ignore 7 | import gc 8 | from xpt2046 import Touch 9 | from ili9341 import Display, color565 10 | from xglcd_font import XglcdFont 11 | from touch_keyboard import TouchKeyboard 12 | from time import sleep 13 | 14 | 15 | class PwnLookup(object): 16 | """Checks if password is pwned.""" 17 | 18 | def __init__(self, spi1, spi2, dc=4, cs1=16, rst=17, cs2=5, rotation=270): 19 | """Initialize PwnLookup.""" 20 | # Set up display 21 | self.display = Display(spi1, dc=Pin(dc), cs=Pin(cs1), rst=Pin(rst), 22 | width=320, height=240, rotation=rotation) 23 | 24 | # Load font 25 | self.unispace = XglcdFont('fonts/Unispace12x24.c', 12, 24) 26 | 27 | # Set up Keyboard 28 | self.keyboard = TouchKeyboard(self.display, self.unispace) 29 | 30 | # Set up touchscreen 31 | self.xpt = Touch(spi2, cs=Pin(cs2), int_pin=Pin(0), 32 | int_handler=self.touchscreen_press) 33 | self.wlan = WLAN(STA_IF) 34 | 35 | def lookup(self, pwd): 36 | """Return the number of times password found in pwned database. 37 | 38 | Args: 39 | pwd: password to check 40 | Returns: 41 | integer: password hits from online pwned database. 42 | Raises: 43 | IOError: if there was an error due to WiFi network. 44 | RuntimeError: if there was an error trying to fetch data from dB. 45 | UnicodeError: if there was an error UTF_encoding the password. 46 | """ 47 | sha1pwd = sha1(pwd.encode('utf-8')).digest() 48 | sha1pwd = hexlify(sha1pwd).upper().decode('utf-8') 49 | head, tail = sha1pwd[:5], sha1pwd[5:] 50 | 51 | if not self.wlan.isconnected(): 52 | raise IOError('WiFi network error') 53 | 54 | hits = 0 55 | gc.collect() 56 | with get('https://api.pwnedpasswords.com/range/' + head) as response: 57 | for line in response.iter_lines(): 58 | l = line.decode(response.encoding).split(":") 59 | if l[0] == tail: 60 | hits = int(l[1]) 61 | break 62 | gc.collect() 63 | 64 | return hits 65 | 66 | def touchscreen_press(self, x, y): 67 | """Process touchscreen press events.""" 68 | if self.keyboard.handle_keypress(x, y, debug=False) is True: 69 | self.keyboard.locked = True 70 | pwd = self.keyboard.kb_text 71 | 72 | self.keyboard.show_message("Searching...", color565(0, 0, 255)) 73 | try: 74 | hits = self.lookup(pwd) 75 | 76 | if hits: 77 | # Password found 78 | msg = "PASSWORD HITS: {0}".format(hits) 79 | self.keyboard.show_message(msg, color565(255, 0, 0)) 80 | else: 81 | # Password not found 82 | msg = "PASSWORD NOT FOUND" 83 | self.keyboard.show_message(msg, color565(0, 255, 0)) 84 | except Exception as e: 85 | if hasattr(e, 'message'): 86 | self.keyboard.show_message(e.message[:22], 87 | color565(255, 255, 255)) 88 | else: 89 | self.keyboard.show_message(str(e)[:22], 90 | color565(255, 255, 255)) 91 | 92 | self.keyboard.waiting = True 93 | self.keyboard.locked = False 94 | 95 | 96 | def main(): 97 | """Start PwnLookup.""" 98 | spi1 = SPI(1, baudrate=51200000, 99 | sck=Pin(14), mosi=Pin(13), miso=Pin(12)) 100 | spi2 = SPI(2, baudrate=1000000, 101 | sck=Pin(18), mosi=Pin(23), miso=Pin(19)) 102 | 103 | PwnLookup(spi1, spi2) 104 | 105 | while True: 106 | sleep(.1) 107 | 108 | 109 | main() 110 | -------------------------------------------------------------------------------- /sketchup/Case Bottom.skp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/sketchup/Case Bottom.skp -------------------------------------------------------------------------------- /sketchup/Top Cover.skp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rdagger/micropython-ili9341/67c51314a7a3e3b379c13c40e03ca5c37d6489b9/sketchup/Top Cover.skp -------------------------------------------------------------------------------- /touch_keyboard.py: -------------------------------------------------------------------------------- 1 | """Touch keyboard.""" 2 | from micropython import const # type: ignore 3 | 4 | 5 | class TouchKeyboard(object): 6 | """Touchscreen keyboard for ILI9341.""" 7 | 8 | YELLOW = const(65504) 9 | GREEN = const(2016) 10 | 11 | KEYS = ( 12 | ( 13 | ('q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'), 14 | ('a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'), 15 | ('\t', 'z', 'x', 'c', 'v', 'b', 'n', 'm', '\b', '\b'), 16 | ('\n', ' ', '\r') 17 | ), 18 | ( 19 | ('Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'), 20 | ('A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'), 21 | ('\t', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '\b', '\b'), 22 | ('\n', ' ', '\r') 23 | ), 24 | ( 25 | ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0'), 26 | ('@', '#', '$', '%', '^', '&', '*', '(', ')'), 27 | ('\f', '+', ',', '.', '-', '_', '!', '?', '\b', '\b'), 28 | ('\a', ' ', '\r') 29 | ), 30 | ( 31 | ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0'), 32 | ('<', '>', '|', '\\', '/', '{', '}', '[', ']'), 33 | ('\f', '=', '"', '\'', ';', ':', '`', '~', '\b', '\b'), 34 | ('\a', ' ', '\r') 35 | ) 36 | ) 37 | 38 | def __init__(self, display, font): 39 | """Initialize Keyboard. 40 | 41 | Args: 42 | display (Display class): LCD Display 43 | font (XglcdFont class): Font to display text above keyboard 44 | """ 45 | self.display = display 46 | self.font = font 47 | self.kb_screen = 0 48 | self.kb_text = '' 49 | self.load_keyboard() 50 | self.waiting = False 51 | self.locked = False 52 | 53 | def clear_text(self): 54 | """Clear the keyboard text.""" 55 | self.display.fill_hrect(0, 11, self.display.width, 24, 0) 56 | self.kb_text = '' 57 | 58 | def handle_keypress(self, x, y, debug=False): 59 | """Get pressed key. 60 | 61 | Args: 62 | x, y (int): Pressed screen coordinates. 63 | Returns: 64 | bool: True indicates return pressed otherwise False 65 | """ 66 | if self.locked is True: 67 | return 68 | 69 | if self.waiting is True: 70 | self.clear_text() 71 | self.waiting = False 72 | return 73 | 74 | x, y = y, x # Touch coordinates need to be swapped. 75 | 76 | if debug: 77 | self.display.fill_circle(x, y, 5, self.GREEN) 78 | 79 | # Calculate keyboard row and column 80 | if y >= 47: # Check if press within keyboard area 81 | row = int(y / 47) - 1 82 | if row == 0: 83 | column = int(x/32) 84 | elif row == 1 or row == 2: 85 | column = max(0, int((x-16)/32)) 86 | else: 87 | # Row 3 88 | if x < 80: 89 | column = 0 90 | elif x > 240: 91 | column = 2 92 | else: 93 | column = 1 94 | 95 | key = self.KEYS[self.kb_screen][row][column] 96 | 97 | if key == '\t' or key == '\f': 98 | self.kb_screen ^= 1 # Toggle caps or flip symbol sets 99 | self.load_keyboard() 100 | elif key == '\a': 101 | self.kb_screen = 0 # Switch to alphabet screen 102 | self.load_keyboard() 103 | elif key == '\n': 104 | self.kb_screen = 2 # Switch to numeric / symbols screen 105 | self.load_keyboard() 106 | elif key == '\b': # Backspace 107 | self.kb_text = self.kb_text[:-1] 108 | margin = self.font.measure_text(self.kb_text) 109 | self.display.fill_vrect(margin, 11, 12, 24, 0) 110 | elif key == '\r': 111 | # Keyboard return pressed (start search) 112 | if self.kb_text != '': 113 | return True 114 | else: 115 | margin = self.font.measure_text(self.kb_text) 116 | self.kb_text += key 117 | self.display.draw_letter(margin, 11, key, self.font, 118 | self.YELLOW) 119 | return False 120 | 121 | def load_keyboard(self): 122 | """Display the currently selected keyboard.""" 123 | self.display.draw_image('images/kb{0}.raw'.format(self.kb_screen), 124 | 0, 47, 320, 192) 125 | 126 | def show_message(self, msg, color): 127 | """Display message above keyboard.""" 128 | self.clear_text() 129 | msg_length = self.font.measure_text(msg) 130 | margin = (self.display.width - msg_length) // 2 131 | self.display.draw_text(margin, 11, msg, self.font, color) 132 | -------------------------------------------------------------------------------- /urequests2.py: -------------------------------------------------------------------------------- 1 | """Revised MicroPython Urequests Library. 2 | 3 | by Chris Borrill (Chris2B) 4 | https://github.com/chrisb2/micropython-lib/tree/master/urequests 5 | forked from https://github.com/micropython/micropython-lib 6 | MIT License 7 | 8 | Notes: 9 | This library supports response.iter_lines() which helps eliminate 10 | memory allocation errors when parsing REST API data. 11 | """ 12 | 13 | import usocket # type: ignore 14 | 15 | ITER_CHUNK_SIZE = 128 16 | 17 | 18 | class Response: 19 | 20 | def __init__(self, f): 21 | self.raw = f 22 | self.encoding = "utf-8" 23 | self._content_consumed = False 24 | self._cached = None 25 | 26 | def __enter__(self): 27 | return self 28 | 29 | def __exit__(self, *args): 30 | self.close() 31 | 32 | def __iter__(self): 33 | return self.iter_content() 34 | 35 | def close(self): 36 | if self.raw: 37 | self.raw.close() 38 | self.raw = None 39 | self._cached = None 40 | 41 | @property 42 | def content(self): 43 | if self._cached is None: 44 | try: 45 | self._cached = self.raw.read() 46 | finally: 47 | self.raw.close() 48 | self.raw = None 49 | return self._cached 50 | 51 | @property 52 | def text(self): 53 | return str(self.content, self.encoding) 54 | 55 | def json(self): 56 | import ujson 57 | return ujson.loads(self.content) 58 | 59 | def iter_content(self, chunk_size=ITER_CHUNK_SIZE): 60 | def generate(): 61 | while True: 62 | chunk = self.raw.read(chunk_size) 63 | if not chunk: 64 | break 65 | yield chunk 66 | self._content_consumed = True 67 | 68 | if self._content_consumed: 69 | raise RuntimeError("response already consumed") 70 | elif chunk_size is not None and not isinstance(chunk_size, int): 71 | raise TypeError("chunk_size must be an int, it is instead a %s." 72 | % type(chunk_size)) 73 | 74 | return generate() 75 | 76 | def iter_lines(self, chunk_size=ITER_CHUNK_SIZE, delimiter=None): 77 | pending = None 78 | 79 | for chunk in self.iter_content(chunk_size=chunk_size): 80 | 81 | if pending is not None: 82 | chunk = pending + chunk 83 | 84 | if delimiter: 85 | lines = chunk.split(delimiter) 86 | else: 87 | lines = chunk.split(b'\n') 88 | 89 | if lines and lines[-1] and chunk and lines[-1][-1] == chunk[-1]: 90 | pending = lines.pop() 91 | else: 92 | pending = None 93 | 94 | for line in lines: 95 | yield line 96 | 97 | if pending is not None: 98 | yield pending 99 | 100 | 101 | def request(method, url, data=None, json=None, headers={}, stream=None): 102 | try: 103 | proto, dummy, host, path = url.split("/", 3) 104 | except ValueError: 105 | proto, dummy, host = url.split("/", 2) 106 | path = "" 107 | if proto == "http:": 108 | port = 80 109 | elif proto == "https:": 110 | import ussl 111 | port = 443 112 | else: 113 | raise ValueError("Unsupported protocol: " + proto) 114 | 115 | if ":" in host: 116 | host, port = host.split(":", 1) 117 | port = int(port) 118 | 119 | ai = usocket.getaddrinfo(host, port, 0, usocket.SOCK_STREAM) 120 | ai = ai[0] 121 | 122 | s = usocket.socket(ai[0], ai[1], ai[2]) 123 | try: 124 | s.connect(ai[-1]) 125 | if proto == "https:": 126 | s = ussl.wrap_socket(s, server_hostname=host) 127 | s.write(b"%s /%s HTTP/1.0\r\n" % (method, path)) 128 | if not "Host" in headers: 129 | s.write(b"Host: %s\r\n" % host) 130 | # Iterate over keys to avoid tuple alloc 131 | for k in headers: 132 | s.write(k) 133 | s.write(b": ") 134 | s.write(headers[k]) 135 | s.write(b"\r\n") 136 | if json is not None: 137 | assert data is None 138 | import ujson 139 | data = ujson.dumps(json) 140 | s.write(b"Content-Type: application/json\r\n") 141 | if data: 142 | s.write(b"Content-Length: %d\r\n" % len(data)) 143 | s.write(b"\r\n") 144 | if data: 145 | s.write(data) 146 | 147 | l = s.readline() 148 | #print(l) 149 | l = l.split(None, 2) 150 | status = int(l[1]) 151 | reason = "" 152 | if len(l) > 2: 153 | reason = l[2].rstrip() 154 | while True: 155 | l = s.readline() 156 | if not l or l == b"\r\n": 157 | break 158 | #print(l) 159 | if l.startswith(b"Transfer-Encoding:"): 160 | if b"chunked" in l: 161 | raise ValueError("Unsupported " + l) 162 | elif l.startswith(b"Location:") and not 200 <= status <= 299: 163 | raise NotImplementedError("Redirects not yet supported") 164 | except OSError: 165 | s.close() 166 | raise 167 | 168 | resp = Response(s) 169 | resp.status_code = status 170 | resp.reason = reason 171 | return resp 172 | 173 | 174 | def head(url, **kw): 175 | return request("HEAD", url, **kw) 176 | 177 | def get(url, **kw): 178 | return request("GET", url, **kw) 179 | 180 | def post(url, **kw): 181 | return request("POST", url, **kw) 182 | 183 | def put(url, **kw): 184 | return request("PUT", url, **kw) 185 | 186 | def patch(url, **kw): 187 | return request("PATCH", url, **kw) 188 | 189 | def delete(url, **kw): 190 | return request("DELETE", url, **kw) 191 | -------------------------------------------------------------------------------- /utils/fontedit2glcd.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Utility to convert FontEdit files to GLCD format.""" 3 | from os import path 4 | import sys 5 | 6 | 7 | def process_file(font_width, font_height, input_file, output_file): 8 | with open(input_file, 'r') as infile, open(output_file, 'w') as outfile: 9 | for line in infile: 10 | line = line.strip() 11 | 12 | # Case 1: Comment Line 13 | if line.startswith('//'): 14 | outfile.write(line + '\n') 15 | 16 | # Case 2: Blank Line 17 | elif not line: 18 | continue 19 | 20 | # Case 3: Variable Definition 21 | elif line.startswith('const'): 22 | continue 23 | 24 | # Case 4: Variable Closing 25 | elif line.startswith('};'): 26 | continue 27 | 28 | # Case 5: Hex Value Lines 29 | else: 30 | parts = line.split('//') 31 | hex_values = parts[0].split(',') 32 | comment = '//' + parts[1] if len(parts) > 1 else '' 33 | 34 | converted_values = convert_hex_value( 35 | [val.strip() for val in hex_values if val.strip()], 36 | font_width, 37 | font_height) 38 | 39 | outfile.write(', '.join(converted_values) + ', ' + 40 | comment + '\n') 41 | 42 | 43 | def hex_to_matrix(hex_values, font_width, font_height): 44 | # Strip '0x' prefix and filter out invalid hex values 45 | hex_values = [hv[2:] for hv in hex_values if hv.startswith('0x') and 46 | all(c in '0123456789ABCDEFabcdef' for c in hv[2:])] 47 | 48 | # Calculate the number of hex values per row 49 | values_per_row = font_width // 8 + (1 if font_width % 8 != 0 else 0) 50 | 51 | # Group hex values into rows based on values_per_row 52 | rows = [hex_values[i:i + values_per_row] for i in range( 53 | 0, len(hex_values), values_per_row)] 54 | 55 | # Verify the number of rows matches the expected font_height 56 | if len(rows) != font_height: 57 | raise ValueError(f"Expected {font_height} rows, but found {len(rows)}") 58 | 59 | # Convert grouped hex values to binary rows 60 | binary_matrix = [] 61 | for row in rows: 62 | binary_row = '' 63 | for hv in row: 64 | # Reverse the order of bits in each byte 65 | binary_byte = format(int(hv, 16), '08b')[::-1] 66 | binary_row += binary_byte 67 | binary_matrix.append(binary_row[:font_width]) 68 | return binary_matrix 69 | 70 | 71 | def pad_matrix(matrix, font_width, font_height): 72 | # Calculate the required height to make it divisible by 8 73 | required_height = ((font_height + 7) // 8) * 8 74 | 75 | # Pad the matrix with rows of zeros if needed 76 | while len(matrix) < required_height: 77 | binary_row = '0' * font_width 78 | matrix.append(list(binary_row)) # Append a list of zeros 79 | return matrix 80 | 81 | 82 | def convert_hex_value(hex_values, font_width, font_height): 83 | # Convert hex values to a binary matrix 84 | matrix = hex_to_matrix(hex_values, font_width, font_height) 85 | """ 86 | for row in matrix: 87 | print(' '.join(row)) 88 | print("---------------") 89 | """ 90 | # Pad matrix along bottom to be divisible by 8 91 | matrix = pad_matrix(matrix, font_width, font_height) 92 | """ 93 | for row in matrix: 94 | print(' '.join(row)) 95 | """ 96 | return matrix_transposed_to_hex_values(matrix, font_width, font_height) 97 | 98 | 99 | def matrix_transposed_to_hex_values(matrix, font_width, font_height): 100 | hex_values = [] 101 | # Convert and prepend the width of the character 102 | width_hex = '0x' + format(font_width, '02X') 103 | hex_values.append(width_hex) 104 | for col in range(font_width): 105 | for row in range(0, font_height, 8): 106 | # Extract a group of 8 pixels 107 | pixel_group = [matrix[r][col] for r in range(row, row + 8)] 108 | # Convert to binary string in little endian format 109 | binary_str = ''.join(pixel_group[::-1]) 110 | # Convert binary string to hex value 111 | hex_value = '0x' + format(int(binary_str, 2), '02X') 112 | hex_values.append(hex_value) 113 | return hex_values 114 | 115 | 116 | if __name__ == '__main__': 117 | args = sys.argv 118 | if len(args) != 4: 119 | error('Please specify font width, height & input file: ./fontedit2glcd.py 24 42 myfont.c') 120 | width = int(args[1]) 121 | height = int(args[2]) 122 | in_path = args[3] 123 | 124 | if not (1 <= width <= 254): 125 | error("Width is not between 1 and 254.") 126 | 127 | if not (1 <= height <= 254): 128 | error("Height is not between 1 and 254.") 129 | 130 | if not path.exists(in_path): 131 | error('File Not Found: ' + in_path) 132 | 133 | filename, ext = path.splitext(in_path) 134 | out_path = filename + "_converted" + ext 135 | 136 | process_file(width, height, in_path, out_path) 137 | -------------------------------------------------------------------------------- /utils/img2rgb565.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Utility to convert images to raw RGB565 format. 3 | 4 | Usage: 5 | python img2rgb565.py 6 | is the full path to the image file you want to convert. 7 | """ 8 | 9 | from PIL import Image 10 | from struct import pack 11 | from os import path 12 | import sys 13 | 14 | 15 | def error(msg): 16 | """Display error and exit.""" 17 | print (msg) 18 | sys.exit(-1) 19 | 20 | 21 | def write_bin(f, pixel_list): 22 | """Save image in RGB565 format.""" 23 | for pix in pixel_list: 24 | r = (pix[0] >> 3) & 0x1F 25 | g = (pix[1] >> 2) & 0x3F 26 | b = (pix[2] >> 3) & 0x1F 27 | f.write(pack('>H', (r << 11) + (g << 5) + b)) 28 | 29 | 30 | if __name__ == '__main__': 31 | args = sys.argv 32 | if len(args) != 2: 33 | error('Please specify input file: ./img2rgb565.py test.png') 34 | in_path = args[1] 35 | if not path.exists(in_path): 36 | error('File Not Found: ' + in_path) 37 | 38 | filename, ext = path.splitext(in_path) 39 | out_path = filename + '.raw' 40 | img = Image.open(in_path).convert('RGB') 41 | pixels = list(img.getdata()) 42 | with open(out_path, 'wb') as f: 43 | write_bin(f, pixels) 44 | print('Saved: ' + out_path) 45 | -------------------------------------------------------------------------------- /xglcd_font.py: -------------------------------------------------------------------------------- 1 | """XGLCD Font Utility.""" 2 | from math import ceil, floor 3 | 4 | 5 | class XglcdFont(object): 6 | """Font data in X-GLCD format. 7 | 8 | Attributes: 9 | letters: A bytearray of letters (columns consist of bytes) 10 | width: Maximum pixel width of font 11 | height: Pixel height of font 12 | start_letter: ASCII number of first letter 13 | height_bytes: How many bytes comprises letter height 14 | 15 | Note: 16 | Font files can be generated with the free version of MikroElektronika 17 | GLCD Font Creator: www.mikroe.com/glcd-font-creator 18 | The font file must be in X-GLCD 'C' format. 19 | To save text files from this font creator program in Win7 or higher 20 | you must use XP compatibility mode or you can just use the clipboard. 21 | """ 22 | 23 | # Dict to translate bitwise values to byte position 24 | BIT_POS = {1: 0, 2: 2, 4: 4, 8: 6, 16: 8, 32: 10, 64: 12, 128: 14, 256: 16} 25 | 26 | def __init__(self, path, width, height, start_letter=32, letter_count=96): 27 | """Constructor for X-GLCD Font object. 28 | 29 | Args: 30 | path (string): Full path of font file 31 | width (int): Maximum width in pixels of each letter 32 | height (int): Height in pixels of each letter 33 | start_letter (int): First ASCII letter. Default is 32. 34 | letter_count (int): Total number of letters. Default is 96. 35 | """ 36 | self.width = width 37 | self.height = max(height, 8) 38 | self.start_letter = start_letter 39 | self.letter_count = letter_count 40 | self.bytes_per_letter = (floor( 41 | (self.height - 1) / 8) + 1) * self.width + 1 42 | self.__load_xglcd_font(path) 43 | 44 | def __load_xglcd_font(self, path): 45 | """Load X-GLCD font data from text file. 46 | 47 | Args: 48 | path (string): Full path of font file. 49 | """ 50 | bytes_per_letter = self.bytes_per_letter 51 | # Buffer to hold letter byte values 52 | self.letters = bytearray(bytes_per_letter * self.letter_count) 53 | mv = memoryview(self.letters) 54 | offset = 0 55 | with open(path, 'r') as f: 56 | for line in f: 57 | # Skip lines that do not start with hex values 58 | line = line.strip() 59 | if len(line) == 0 or line[0:2] != '0x': 60 | continue 61 | # Remove comments 62 | comment = line.find('//') 63 | if comment != -1: 64 | line = line[0:comment].strip() 65 | # Remove trailing commas 66 | if line.endswith(','): 67 | line = line[0:len(line) - 1] 68 | # Convert hex strings to bytearray and insert in to letters 69 | mv[offset: offset + bytes_per_letter] = bytearray( 70 | int(b, 16) for b in line.split(',')) 71 | offset += bytes_per_letter 72 | 73 | def lit_bits(self, n): 74 | """Return positions of 1 bits only.""" 75 | while n: 76 | b = n & (~n+1) 77 | yield self.BIT_POS[b] 78 | n ^= b 79 | 80 | def get_letter(self, letter, color, background=0, landscape=False): 81 | """Convert letter byte data to pixels. 82 | 83 | Args: 84 | letter (string): Letter to return (must exist within font). 85 | color (int): RGB565 color value. 86 | background (int): RGB565 background color (default: black). 87 | landscape (bool): Orientation (default: False = portrait) 88 | Returns: 89 | (bytearray): Pixel data. 90 | (int, int): Letter width and height. 91 | """ 92 | # Get index of letter 93 | letter_ord = ord(letter) - self.start_letter 94 | # Confirm font contains letter 95 | if letter_ord >= self.letter_count: 96 | print('Font does not contain character: ' + letter) 97 | return b'', 0, 0 98 | bytes_per_letter = self.bytes_per_letter 99 | offset = letter_ord * bytes_per_letter 100 | mv = memoryview(self.letters[offset:offset + bytes_per_letter]) 101 | 102 | # Get width of letter (specified by first byte) 103 | letter_width = mv[0] 104 | letter_height = self.height 105 | # Get size in bytes of specified letter 106 | letter_size = letter_height * letter_width 107 | # Create buffer (double size to accommodate 16 bit colors) 108 | if background: 109 | buf = bytearray(background.to_bytes(2, 'big') * letter_size) 110 | else: 111 | buf = bytearray(letter_size * 2) 112 | 113 | msb, lsb = color.to_bytes(2, 'big') 114 | 115 | if landscape: 116 | # Populate buffer in order for landscape 117 | pos = (letter_size * 2) - (letter_height * 2) 118 | lh = letter_height 119 | # Loop through letter byte data and convert to pixel data 120 | for b in mv[1:]: 121 | # Process only colored bits 122 | for bit in self.lit_bits(b): 123 | buf[bit + pos] = msb 124 | buf[bit + pos + 1] = lsb 125 | if lh > 8: 126 | # Increment position by double byte 127 | pos += 16 128 | lh -= 8 129 | else: 130 | # Decrease position to start of previous column 131 | pos -= (letter_height * 4) - (lh * 2) 132 | lh = letter_height 133 | else: 134 | # Populate buffer in order for portrait 135 | col = 0 # Set column to first column 136 | bytes_per_letter = ceil(letter_height / 8) 137 | letter_byte = 0 138 | # Loop through letter byte data and convert to pixel data 139 | for b in mv[1:]: 140 | # Process only colored bits 141 | segment_size = letter_byte * letter_width * 16 142 | for bit in self.lit_bits(b): 143 | pos = (bit * letter_width) + (col * 2) + segment_size 144 | buf[pos] = msb 145 | pos = (bit * letter_width) + (col * 2) + 1 + segment_size 146 | buf[pos] = lsb 147 | letter_byte += 1 148 | if letter_byte + 1 > bytes_per_letter: 149 | col += 1 150 | letter_byte = 0 151 | 152 | return buf, letter_width, letter_height 153 | 154 | def measure_text(self, text, spacing=1): 155 | """Measure length of text string in pixels. 156 | 157 | Args: 158 | text (string): Text string to measure 159 | spacing (optional int): Pixel spacing between letters. Default: 1. 160 | Returns: 161 | int: length of text 162 | """ 163 | length = 0 164 | for letter in text: 165 | # Get index of letter 166 | letter_ord = ord(letter) - self.start_letter 167 | offset = letter_ord * self.bytes_per_letter 168 | # Add length of letter and spacing 169 | length += self.letters[offset] + spacing 170 | return length 171 | -------------------------------------------------------------------------------- /xpt2046.py: -------------------------------------------------------------------------------- 1 | """XPT2046 Touch module.""" 2 | from time import sleep 3 | from micropython import const # type: ignore 4 | 5 | 6 | class Touch(object): 7 | """Serial interface for XPT2046 Touch Screen Controller.""" 8 | 9 | # Command constants from ILI9341 datasheet 10 | GET_X = const(0b11010000) # X position 11 | GET_Y = const(0b10010000) # Y position 12 | GET_Z1 = const(0b10110000) # Z1 position 13 | GET_Z2 = const(0b11000000) # Z2 position 14 | GET_TEMP0 = const(0b10000000) # Temperature 0 15 | GET_TEMP1 = const(0b11110000) # Temperature 1 16 | GET_BATTERY = const(0b10100000) # Battery monitor 17 | GET_AUX = const(0b11100000) # Auxiliary input to ADC 18 | 19 | def __init__(self, spi, cs, int_pin=None, int_handler=None, 20 | width=240, height=320, 21 | x_min=100, x_max=1962, y_min=100, y_max=1900): 22 | """Initialize touch screen controller. 23 | 24 | Args: 25 | spi (Class Spi): SPI interface for OLED 26 | cs (Class Pin): Chip select pin 27 | int_pin (Class Pin): Touch controller interrupt pin 28 | int_handler (function): Handler for screen interrupt 29 | width (int): Width of LCD screen 30 | height (int): Height of LCD screen 31 | x_min (int): Minimum x coordinate 32 | x_max (int): Maximum x coordinate 33 | y_min (int): Minimum Y coordinate 34 | y_max (int): Maximum Y coordinate 35 | """ 36 | self.spi = spi 37 | self.cs = cs 38 | self.cs.init(self.cs.OUT, value=1) 39 | self.rx_buf = bytearray(3) # Receive buffer 40 | self.tx_buf = bytearray(3) # Transmit buffer 41 | self.width = width 42 | self.height = height 43 | # Set calibration 44 | self.x_min = x_min 45 | self.x_max = x_max 46 | self.y_min = y_min 47 | self.y_max = y_max 48 | self.x_multiplier = width / (x_max - x_min) 49 | self.x_add = x_min * -self.x_multiplier 50 | self.y_multiplier = height / (y_max - y_min) 51 | self.y_add = y_min * -self.y_multiplier 52 | 53 | if int_pin is not None: 54 | self.int_pin = int_pin 55 | self.int_pin.init(int_pin.IN) 56 | self.int_handler = int_handler 57 | self.int_locked = False 58 | int_pin.irq(trigger=int_pin.IRQ_FALLING | int_pin.IRQ_RISING, 59 | handler=self.int_press) 60 | 61 | def get_touch(self): 62 | """Take multiple samples to get accurate touch reading.""" 63 | timeout = 2 # set timeout to 2 seconds 64 | confidence = 5 65 | buff = [[0, 0] for x in range(confidence)] 66 | buf_length = confidence # Require a confidence of 5 good samples 67 | buffptr = 0 # Track current buffer position 68 | nsamples = 0 # Count samples 69 | while timeout > 0: 70 | if nsamples == buf_length: 71 | meanx = sum([c[0] for c in buff]) // buf_length 72 | meany = sum([c[1] for c in buff]) // buf_length 73 | dev = sum([(c[0] - meanx)**2 + 74 | (c[1] - meany)**2 for c in buff]) / buf_length 75 | if dev <= 50: # Deviation should be under margin of 50 76 | return self.normalize(meanx, meany) 77 | # get a new value 78 | sample = self.raw_touch() # get a touch 79 | if sample is None: 80 | nsamples = 0 # Invalidate buff 81 | else: 82 | buff[buffptr] = sample # put in buff 83 | buffptr = (buffptr + 1) % buf_length # Incr, until rollover 84 | nsamples = min(nsamples + 1, buf_length) # Incr. until max 85 | 86 | sleep(.05) 87 | timeout -= .05 88 | return None 89 | 90 | def int_press(self, pin): 91 | """Send X,Y values to passed interrupt handler.""" 92 | if not pin.value() and not self.int_locked: 93 | self.int_locked = True # Lock Interrupt 94 | buff = self.raw_touch() 95 | 96 | if buff is not None: 97 | x, y = self.normalize(*buff) 98 | self.int_handler(x, y) 99 | sleep(.1) # Debounce falling edge 100 | elif pin.value() and self.int_locked: 101 | sleep(.1) # Debounce rising edge 102 | self.int_locked = False # Unlock interrupt 103 | 104 | def normalize(self, x, y): 105 | """Normalize mean X,Y values to match LCD screen.""" 106 | x = int(self.x_multiplier * x + self.x_add) 107 | y = int(self.y_multiplier * y + self.y_add) 108 | return x, y 109 | 110 | def raw_touch(self): 111 | """Read raw X,Y touch values. 112 | 113 | Returns: 114 | tuple(int, int): X, Y 115 | """ 116 | x = self.send_command(self.GET_X) 117 | y = self.send_command(self.GET_Y) 118 | if self.x_min <= x <= self.x_max and self.y_min <= y <= self.y_max: 119 | return (x, y) 120 | else: 121 | return None 122 | 123 | def send_command(self, command): 124 | """Write command to XT2046 (MicroPython). 125 | 126 | Args: 127 | command (byte): XT2046 command code. 128 | Returns: 129 | int: 12 bit response 130 | """ 131 | self.tx_buf[0] = command 132 | self.cs(0) 133 | self.spi.write_readinto(self.tx_buf, self.rx_buf) 134 | self.cs(1) 135 | 136 | return (self.rx_buf[1] << 4) | (self.rx_buf[2] >> 4) 137 | --------------------------------------------------------------------------------