add ASCII FONT drawing function

This commit is contained in:
Sheikah 2023-01-21 00:36:42 +08:00
parent d007481c20
commit 12cf5fcd99
10 changed files with 528 additions and 1 deletions

View File

@ -4,6 +4,7 @@
#include <RotaryCoder.h>
#include <KT0915.h>
/*Arduino APP 未移植 不可用*/
uint8_t app_setup(void){
}

View File

@ -0,0 +1,61 @@
#pragma once
#include <stdint.h>
const uint8_t FONT_QUAN_8_8[] = {
0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xF8, 0x50, 0x50, 0xF8, 0x50, 0x50, 0x00, 0x20, 0x78, 0xA0, 0x70, 0x28, 0xF0, 0x20, 0x00,
0x40, 0xA8, 0x50, 0x20, 0x50, 0xA8, 0x10, 0x00, 0x40, 0xA0, 0xA0, 0x40, 0xA8, 0x90, 0x68, 0x00,
0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x00,
0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x00, 0x20, 0xA8, 0x70, 0x20, 0x70, 0xA8, 0x20, 0x00,
0x00, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80,
0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x00, 0x60, 0x90, 0xB0, 0xD0, 0x90, 0x90, 0x60, 0x00,
0xC0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0xE0, 0x10, 0x10, 0x60, 0x80, 0x80, 0xF0, 0x00,
0xE0, 0x10, 0x10, 0x60, 0x10, 0x10, 0xE0, 0x00, 0x90, 0x90, 0x90, 0x90, 0x70, 0x10, 0x10, 0x00,
0xF0, 0x80, 0x80, 0xE0, 0x10, 0x10, 0xE0, 0x00, 0x60, 0x80, 0x80, 0xE0, 0x90, 0x90, 0x60, 0x00,
0xF0, 0x10, 0x10, 0x20, 0x40, 0x40, 0x40, 0x00, 0x60, 0x90, 0x90, 0x60, 0x90, 0x90, 0x60, 0x00,
0x60, 0x90, 0x90, 0x70, 0x10, 0x10, 0x60, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x10, 0x20, 0x40, 0x80, 0x40, 0x20, 0x10, 0x00,
0x00, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x20, 0x40, 0x80, 0x00,
0xE0, 0x10, 0x20, 0x40, 0x40, 0x00, 0x40, 0x00, 0x38, 0x44, 0x9A, 0xAA, 0xBA, 0x44, 0x30, 0x00,
0x60, 0x90, 0x90, 0xF0, 0x90, 0x90, 0x90, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x90, 0x90, 0xE0, 0x00,
0x70, 0x80, 0x80, 0x80, 0x80, 0x80, 0x70, 0x00, 0xE0, 0x90, 0x90, 0x90, 0x90, 0x90, 0xE0, 0x00,
0xE0, 0x80, 0x80, 0xE0, 0x80, 0x80, 0xE0, 0x00, 0xE0, 0x80, 0x80, 0xE0, 0x80, 0x80, 0x80, 0x00,
0x70, 0x80, 0x80, 0xB0, 0x90, 0x90, 0x60, 0x00, 0x90, 0x90, 0x90, 0xF0, 0x90, 0x90, 0x90, 0x00,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xC0, 0x00,
0x90, 0xA0, 0xA0, 0xC0, 0xA0, 0xA0, 0x90, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xE0, 0x00,
0x88, 0xD8, 0xD8, 0xA8, 0xA8, 0x88, 0x88, 0x00, 0x90, 0xD0, 0xD0, 0xB0, 0xB0, 0x90, 0x90, 0x00,
0x60, 0x90, 0x90, 0x90, 0x90, 0x90, 0x60, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x80, 0x80, 0x80, 0x00,
0x60, 0x90, 0x90, 0x90, 0x90, 0xA0, 0x50, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0xA0, 0x90, 0x90, 0x00,
0x70, 0x80, 0x80, 0x60, 0x10, 0x10, 0xE0, 0x00, 0xF8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x60, 0x00, 0x88, 0x88, 0x50, 0x50, 0x50, 0x20, 0x20, 0x00,
0x88, 0xA8, 0xA8, 0xA8, 0x50, 0x50, 0x50, 0x00, 0x88, 0x50, 0x50, 0x20, 0x50, 0x50, 0x88, 0x00,
0x88, 0x50, 0x50, 0x20, 0x20, 0x20, 0x20, 0x00, 0xF0, 0x10, 0x20, 0x60, 0x40, 0x80, 0xF0, 0x00,
0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x00,
0xC0, 0x40, 0x40, 0x40, 0x40, 0x40, 0xC0, 0x00, 0x40, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE0, 0x10, 0x70, 0x90, 0x70, 0x00, 0x80, 0x80, 0xE0, 0x90, 0x90, 0x90, 0xE0, 0x00,
0x00, 0x00, 0x70, 0x80, 0x80, 0x80, 0x70, 0x00, 0x10, 0x10, 0x70, 0x90, 0x90, 0x90, 0x70, 0x00,
0x00, 0x00, 0x60, 0x90, 0xF0, 0x80, 0x70, 0x00, 0x20, 0x40, 0xE0, 0x40, 0x40, 0x40, 0x40, 0x00,
0x00, 0x00, 0x70, 0x90, 0x90, 0x70, 0x10, 0xE0, 0x80, 0x80, 0xE0, 0x90, 0x90, 0x90, 0x90, 0x00,
0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x20, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0xC0,
0x80, 0x80, 0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x00,
0x00, 0x00, 0xF0, 0xA8, 0xA8, 0xA8, 0xA8, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0x90, 0x90, 0x00,
0x00, 0x00, 0x60, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x80, 0x80,
0x00, 0x00, 0x70, 0x90, 0x90, 0x70, 0x10, 0x10, 0x00, 0x00, 0xA0, 0xC0, 0x80, 0x80, 0x80, 0x00,
0x00, 0x00, 0x70, 0x80, 0x60, 0x10, 0xE0, 0x00, 0x00, 0x40, 0xE0, 0x40, 0x40, 0x40, 0x20, 0x00,
0x00, 0x00, 0x90, 0x90, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00, 0x88, 0x88, 0x50, 0x50, 0x20, 0x00,
0x00, 0x00, 0x88, 0xA8, 0xA8, 0x50, 0x50, 0x00, 0x00, 0x00, 0x88, 0x50, 0x20, 0x50, 0x88, 0x00,
0x00, 0x00, 0x90, 0x90, 0x90, 0x70, 0x10, 0xE0, 0x00, 0x00, 0xF0, 0x10, 0x60, 0x80, 0xF0, 0x00,
0x20, 0x40, 0x40, 0x80, 0x40, 0x40, 0x20, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,
0x80, 0x40, 0x40, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x64, 0x98, 0x00, 0x00, 0x00, 0x00,
};
const uint8_t FONT_QUAN_ASCII_WIDTH_8_8[] = {
0x02, 0x04, 0x06, 0x06, 0x06, 0x06, 0x02, 0x03, 0x03, 0x06, 0x06, 0x03, 0x06, 0x03, 0x04, 0x05,
0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x03, 0x03, 0x05, 0x06, 0x05, 0x05, 0x08,
0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x05, 0x05, 0x02, 0x04, 0x05, 0x04, 0x06, 0x05, 0x05, 0x05,
0x05, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x06, 0x06, 0x05, 0x03, 0x04, 0x03, 0x04, 0x05, 0x03,
0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x05, 0x05, 0x02, 0x04, 0x05, 0x03, 0x06, 0x05, 0x05, 0x05,
0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0x06, 0x06, 0x05, 0x05, 0x04, 0x02, 0x04, 0x07,
};

View File

@ -0,0 +1,202 @@
#pragma once
#include <stdint.h>
const uint8_t FONT_UNIFONT_16_16[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 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, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0x7E, 0x00,
0x24, 0x00, 0x24, 0x00, 0x7E, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3E, 0x00, 0x49, 0x00, 0x48, 0x00,
0x38, 0x00, 0x0E, 0x00, 0x09, 0x00, 0x49, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x4A, 0x00, 0x4C, 0x00, 0x34, 0x00,
0x08, 0x00, 0x18, 0x00, 0x16, 0x00, 0x29, 0x00, 0x49, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x22, 0x00, 0x14, 0x00,
0x18, 0x00, 0x29, 0x00, 0x45, 0x00, 0x42, 0x00, 0x46, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 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, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00,
0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x49, 0x00,
0x2A, 0x00, 0x1C, 0x00, 0x2A, 0x00, 0x49, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00,
0x08, 0x00, 0x7F, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 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, 0x18, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3C, 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, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00,
0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x24, 0x00, 0x42, 0x00, 0x46, 0x00,
0x4A, 0x00, 0x52, 0x00, 0x62, 0x00, 0x42, 0x00, 0x24, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x28, 0x00, 0x08, 0x00,
0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x02, 0x00, 0x02, 0x00,
0x0C, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x02, 0x00, 0x02, 0x00,
0x1E, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x14, 0x00, 0x24, 0x00,
0x44, 0x00, 0x44, 0x00, 0x7E, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00,
0x7C, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00,
0x7C, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00,
0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00,
0x3C, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00,
0x3E, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00,
0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00,
0x08, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x02, 0x00, 0x02, 0x00,
0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x4A, 0x00, 0x56, 0x00,
0x52, 0x00, 0x52, 0x00, 0x52, 0x00, 0x4E, 0x00, 0x20, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x24, 0x00, 0x24, 0x00, 0x42, 0x00,
0x42, 0x00, 0x7E, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00,
0x7C, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x40, 0x00, 0x40, 0x00,
0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x44, 0x00, 0x42, 0x00, 0x42, 0x00,
0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x44, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00,
0x7C, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00,
0x7C, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x40, 0x00, 0x40, 0x00,
0x40, 0x00, 0x4E, 0x00, 0x42, 0x00, 0x42, 0x00, 0x46, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00,
0x7E, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00,
0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x44, 0x00, 0x48, 0x00, 0x50, 0x00,
0x60, 0x00, 0x60, 0x00, 0x50, 0x00, 0x48, 0x00, 0x44, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00,
0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x66, 0x00, 0x66, 0x00,
0x5A, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x62, 0x00, 0x62, 0x00, 0x52, 0x00,
0x52, 0x00, 0x4A, 0x00, 0x4A, 0x00, 0x46, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00,
0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00,
0x7C, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00,
0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x5A, 0x00, 0x66, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00,
0x7C, 0x00, 0x48, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x40, 0x00, 0x40, 0x00,
0x30, 0x00, 0x0C, 0x00, 0x02, 0x00, 0x02, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00,
0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x22, 0x00,
0x22, 0x00, 0x22, 0x00, 0x14, 0x00, 0x14, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00,
0x5A, 0x00, 0x66, 0x00, 0x66, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x24, 0x00, 0x24, 0x00,
0x18, 0x00, 0x24, 0x00, 0x24, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x41, 0x00, 0x22, 0x00, 0x22, 0x00,
0x14, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00,
0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20, 0x00, 0x10, 0x00,
0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00,
0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x70, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x24, 0x00, 0x42, 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,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 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, 0x3C, 0x00, 0x42, 0x00,
0x02, 0x00, 0x3E, 0x00, 0x42, 0x00, 0x42, 0x00, 0x46, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x5C, 0x00, 0x62, 0x00,
0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x62, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x42, 0x00,
0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x3A, 0x00, 0x46, 0x00,
0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x46, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x42, 0x00,
0x42, 0x00, 0x7E, 0x00, 0x40, 0x00, 0x40, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x7C, 0x00,
0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x44, 0x00, 0x44, 0x00,
0x44, 0x00, 0x38, 0x00, 0x20, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x5C, 0x00, 0x62, 0x00,
0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x08, 0x00,
0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x04, 0x00,
0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x48, 0x00, 0x30, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x44, 0x00, 0x48, 0x00,
0x50, 0x00, 0x60, 0x00, 0x50, 0x00, 0x48, 0x00, 0x44, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x49, 0x00,
0x49, 0x00, 0x49, 0x00, 0x49, 0x00, 0x49, 0x00, 0x49, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00,
0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x42, 0x00,
0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00,
0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x62, 0x00, 0x5C, 0x00, 0x40, 0x00, 0x40, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x46, 0x00,
0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x46, 0x00, 0x3A, 0x00, 0x02, 0x00, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00,
0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x42, 0x00,
0x40, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x02, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x7C, 0x00,
0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00,
0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x46, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00,
0x42, 0x00, 0x24, 0x00, 0x24, 0x00, 0x24, 0x00, 0x24, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x49, 0x00,
0x49, 0x00, 0x49, 0x00, 0x49, 0x00, 0x49, 0x00, 0x49, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00,
0x24, 0x00, 0x18, 0x00, 0x24, 0x00, 0x24, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00,
0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x26, 0x00, 0x1A, 0x00, 0x02, 0x00, 0x02, 0x00, 0x3C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x02, 0x00,
0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00,
0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x0C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
0x08, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x30, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x49, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
const uint8_t FONT_UNIFONT_ASCII_WIDTH_16_16[] = {
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
};

View File

@ -0,0 +1,44 @@
#include <stdint.h>
#include "asciifont.h"
#include "bmfont.h"
#include "Fonts/quan8x8.h"
#include "Fonts/unifont16x16.h"
#define ASCII_CHAR_START 0x21
#define ASCII_CHAR_END 0x7E
uint8_t af_get_char_data(bmf_BitmapFont *font, uint32_t unicode, uint8_t *buffer) {
if (unicode < ASCII_CHAR_START || unicode > ASCII_CHAR_END) {
return 0;
}
uint8_t ch_w = font->char_width;
uint8_t ch_h = font->char_height;
uint8_t wp = ch_w / 8;
wp += (ch_w % 8) ? 1 : 0;
uint16_t buffer_size = wp * ch_h;
uint32_t start, curr;
start = (unicode - ASCII_CHAR_START) * buffer_size;
for (curr = 0; curr < buffer_size; curr ++) {
buffer[curr] = font->font_date[start + curr];
}
return 1;
}
bmf_BitmapFont font_quan_8x8_obj = {
af_get_char_data,
FONT_QUAN_8_8,
8,
8,
FONT_QUAN_ASCII_WIDTH_8_8
};
bmf_BitmapFont font_unifont_16x16_obj = {
af_get_char_data,
FONT_UNIFONT_16_16,
16,
16,
FONT_UNIFONT_ASCII_WIDTH_16_16
};
bmf_BitmapFont *font_quan_8x8 = &font_quan_8x8_obj;
bmf_BitmapFont *font_unifont_16x16 = &font_unifont_16x16_obj;

View File

@ -0,0 +1,6 @@
#pragma once
#include <stdint.h>
#include "bmfont.h"
extern bmf_BitmapFont *font_quan_8x8;
extern bmf_BitmapFont *font_unifont_16x16;

189
Core/ST7735/UI/bmfont.c Normal file
View File

@ -0,0 +1,189 @@
#include <stdint.h>
#include <stdlib.h>
#include "bmfont.h"
#include "st7735.h"
#define malloc(s) malloc(s)
#define free(p) free(p)
#define bmf_TAB_SIZE 2
#define bmf_ASCII_EOF 0
#define bmf_ASCII_T 9
#define bmf_ASCII_N 10
#define bmf_ASCII_R 13
#define bmf_ASCII_SPACE 32
#define bmf_ASCII_START 33 // include
#define bmf_ASCII_END 126 //include
typedef struct {
const uint32_t byte_limit;
uint32_t byte_offset;
const int16_t start_x;
const int16_t start_y;
const uint16_t width_limit;
const uint16_t height_limit;
int16_t char_x;
int16_t char_y;
uint32_t count;
uint32_t unicode;
uint8_t *utf8_text;
uint8_t last_char_width;
uint8_t is_looping;
} bmf_LoopState;
void place_next_char(bmf_BitmapFont *font, bmf_LoopState *state) {
state->char_x += state->last_char_width;
state->last_char_width = 0;
// get unicode char
uint32_t b_off = state->byte_offset;
uint32_t b_lim = state->byte_limit;
uint8_t *utf8_text = state->utf8_text;
if (b_off >= b_lim) {
state->is_looping = 0;
state->unicode = bmf_ASCII_EOF;
return;
}
uint8_t lead = state->utf8_text[b_off];
b_off ++;
uint8_t u8_char_size = 0;
uint32_t unicode = 0;
while ((b_off < b_lim) && ((utf8_text[b_off] & 0b11000000) == 0b10000000)) {
unicode = unicode << 6;
unicode = unicode | (utf8_text[b_off] & 0b00111111);
b_off ++;
u8_char_size ++;
}
if (u8_char_size == 0) {
unicode = lead;
} else {
lead = (0b00111111 >> u8_char_size) & lead;
unicode = unicode | (lead << (u8_char_size * 6));
}
if (unicode == bmf_ASCII_EOF) {
state->is_looping = 0;
return;
}
// get char width
if (unicode == bmf_ASCII_SPACE) {
u8_char_size = font->char_width / 2; // half width space
} else if (unicode == bmf_ASCII_T) {
u8_char_size = font->char_width * bmf_TAB_SIZE;
} else if (unicode == bmf_ASCII_R || unicode == bmf_ASCII_N) {
u8_char_size = 0;
} else if (unicode >= bmf_ASCII_START && unicode <= bmf_ASCII_END) {
u8_char_size = font->ascii_width[unicode - bmf_ASCII_START];
} else {
u8_char_size = font->char_width; // now u8_char_size become char_width
}
// process special character
if (unicode == bmf_ASCII_N || (state->width_limit > 0 && state->char_x + u8_char_size - state->start_x > state->width_limit)) {
state->char_y += font->char_height;
state->char_x = state->start_x;
}
if (state->height_limit > 0 && (state->char_y + font->char_height - state->start_y > state->width_limit)) {
if (unicode == bmf_ASCII_N) {
state->byte_offset = b_off;
state->unicode = unicode;
state->last_char_width = u8_char_size;
state->count ++;
}
state->is_looping = 0;
return;
}
state->byte_offset = b_off;
state->count ++;
state->unicode = unicode;
state->last_char_width = u8_char_size;
return;
}
uint16_t bmf_get_text_width(bmf_BitmapFont *font, uint8_t *text, uint32_t bytes_len) {
uint16_t total_width = 0;
uint32_t b_off = 0;
while (b_off < bytes_len) {
// get unicode char
uint8_t lead = text[b_off];
b_off ++;
uint8_t u8_char_size = 0;
uint32_t unicode = 0;
while ((b_off < bytes_len) && ((text[b_off] & 0b11000000) == 0b10000000)) {
unicode = unicode << 6;
unicode = unicode | (text[b_off] & 0b00111111);
b_off ++;
u8_char_size ++;
}
if (u8_char_size == 0) {
unicode = lead;
} else {
lead = (0b00111111 >> u8_char_size) & lead;
unicode = unicode | (lead << (u8_char_size * 6));
}
if (unicode == bmf_ASCII_EOF) {
break;
}
// get char width
if (unicode == bmf_ASCII_SPACE) {
u8_char_size = u8_char_size / 2; // half width space
} else if (unicode == bmf_ASCII_T) {
u8_char_size = font->char_width * bmf_TAB_SIZE;
} else if (unicode == bmf_ASCII_R || unicode == bmf_ASCII_N) {
u8_char_size = 0;
} else if (unicode >= bmf_ASCII_START && unicode <= bmf_ASCII_END) {
u8_char_size = font->ascii_width[unicode - bmf_ASCII_START];
} else {
u8_char_size = font->char_width; // now u8_char_size become char_width
}
total_width += u8_char_size;
}
return total_width;
}
uint32_t bmf_draw_text(bmf_BitmapFont *font, uint8_t *text, uint32_t bytes_len, uint16_t x, uint16_t y, uint16_t width_limit, uint16_t height_limit, uint16_t color) {
bmf_LoopState state_obj = {bytes_len, 0, x, y, width_limit, height_limit, x, y, 0, 0, text, 0, 1};
bmf_LoopState *state = &state_obj;
bmf_FunctionGetCharImage get_char_image = font->get_char_image;
uint8_t ch_w = font->char_width;
uint8_t ch_h = font->char_height;
uint8_t wp = ch_w / 8;
wp += (ch_w % 8) ? 1 : 0;
uint16_t buffer_size = wp * ch_h;
uint8_t *buffer = malloc(buffer_size);
while (state_obj.is_looping) {
place_next_char(font, state);
if (state_obj.is_looping && state_obj.unicode != bmf_ASCII_R && state_obj.unicode != bmf_ASCII_N && state_obj.unicode != bmf_ASCII_T && state_obj.unicode != bmf_ASCII_SPACE) {
// draw character
if (get_char_image(font, state_obj.unicode, buffer)) {
int16_t x = state_obj.char_x;
int16_t x_end = x + font->char_width;
int16_t y = state_obj.char_y;
uint16_t buffer_p;
uint8_t hdata;
uint8_t bit;
for (buffer_p = 0; buffer_p < buffer_size; buffer_p ++) {
hdata = buffer[buffer_p];
for (bit = 0; bit < 8; bit ++) {
if (hdata & (0b10000000 >> bit)) {
ST7735_DrawPixel((uint16_t)x, (uint16_t)y, color);
}
x ++;
}
if (x >= x_end) {
x = state_obj.char_x;
y ++;
}
}
}
}
}
free(buffer);
return state_obj.byte_offset;
}
uint32_t bmf_get_text_offset(bmf_BitmapFont *font, uint8_t *text, uint32_t bytes_len, uint16_t width_limit, uint16_t height_limit) {
bmf_LoopState state_obj = {bytes_len, 0, 0, 0, width_limit, height_limit, 0, 0, 0, 0, text, 0, 1};
bmf_LoopState *state = &state_obj;
while (state_obj.is_looping) {
place_next_char(font, state);
}
return state_obj.byte_offset;
}

19
Core/ST7735/UI/bmfont.h Normal file
View File

@ -0,0 +1,19 @@
#pragma once
#include <stdint.h>
#define u8str(x) ((uint8_t *)x)
typedef struct bmf_BitmapFont bmf_BitmapFont;
typedef uint8_t (*bmf_FunctionGetCharImage)(bmf_BitmapFont *font, uint32_t unicode, uint8_t *buffer); // MONO_HMSB format
typedef struct bmf_BitmapFont {
bmf_FunctionGetCharImage get_char_image;
const uint8_t *font_date;
const uint8_t char_width;
const uint8_t char_height;
const uint8_t *ascii_width; // size [94]
} bmf_BitmapFont;
uint16_t bmf_get_text_width(bmf_BitmapFont *font, uint8_t *text, uint32_t bytes_len);
uint32_t bmf_draw_text(bmf_BitmapFont *font, uint8_t *text, uint32_t bytes_len, uint16_t x, uint16_t y, uint16_t width_limit, uint16_t height_limit, uint16_t color);
uint32_t bmf_get_text_offset(bmf_BitmapFont *font, uint8_t *text, uint32_t bytes_len, uint16_t width_limit, uint16_t height_limit);

View File

@ -29,6 +29,8 @@
#include "RotaryCoder.h"
#include "st7735.h"
#include "ui.h"
#include "bmfont.h"
#include "asciifont.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@ -113,7 +115,8 @@ int main(void)
LCD_init();
ST7735_FillScreen(ST7735_WHITE);
printf("Begin draw number\n");
ui_text_number18x32(10086, 0, 0, 0xFF00);
ui_text_number18x32(10086, 0, 0, ST7735_BLUE);
bmf_draw_text(font_unifont_16x16, u8str("Test Ascii\nHello Dragon Ok~~~~"), 29, 0, 40, 160, 64, ST7735_BLACK);
printf("End draw number\n");
/* USER CODE END 2 */

View File

@ -68,6 +68,8 @@ Core/RotaryCoder/RotaryCoder.c \
Core/ST7735/st7735.c \
Core/ST7735/UI/monoimg.c \
Core/ST7735/UI/ui.c \
Core/ST7735/UI/bmfont.c \
Core/ST7735/UI/asciifont.c \
#Core/kt0915/KT0915.C \
#Core/SWI2C/i2c_sw.c \
#Core/APP/app.c

0
monitor.sh Normal file → Executable file
View File