要显示字符了,本着一切从简的原则,采用点阵字:一是简单,二是字库免费,三是速度快。
把每一个字符都看成是一个大方块图形,把这个大方块看作是若干足够小的小方块拼起来的,把每个小方块看做一个像素点。字符中每个空白的像素点就用一个空白小方块表示,每一个字符占用的像素点就用一个有色小方块表示,把全部小方块都画出来,就是点阵字了。点阵字体就是由一个二进制的二维数组组成的,数组中每一个元素(就是一个比特位))值代表一个小方块:0 代表空白,1 代表有色。按照这个数组的行列排列,把数组中每个元素的值按照 0 空白、1 着色作为一个像素点,全部画出来,就显示成一个点阵字了。
下面这个就是个点阵字:
放到电脑显示器上是这样的:
先不考虑汉字,先把键盘上的字符都实现了再说。实际的 ASCII 字符的点阵字库都是按照 ASCII 编码的顺序排列,即从 0 到 255,我们先截取可打印字符出来试验下。可打印字符从空格开始,到 ~ 结束,对应 ASCII 码就是从 0x20 到 0x7E。
具体制作字库的步骤:
1、找到需要的点阵字库(我用的 ASCII16);
2、用能 16 进制显示的编辑器打开,选中可打印字符部分(对应文件偏移就是 0x200 到 0x7E0):
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
3、以 16 进制视图复制粘贴到新文件中,然后去头去尾(列模式):
4、每个数字前面加个 0x,数字间加逗号(搜索替换):
5、把这些数放到一个数组里面,形成一个专门的字库了。下面代码里的数组就是了。
6、来测试下效果:
#include <stdio.h>
// 宽 8、高 16 的 ASCII 可打印字符点阵字库(从空格开始,共 95 个),按照 ASCII 编码顺序
unsigned char FontASCII_8X16[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 空格
0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00, // !
0x00,0x63,0x63,0x63,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // "
0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36,0x36,0x7F,0x36,0x36,0x00,0x00,0x00,0x00, // #
0x0C,0x0C,0x3E,0x63,0x61,0x60,0x3E,0x03,0x03,0x43,0x63,0x3E,0x0C,0x0C,0x00,0x00, // $
0x00,0x00,0x00,0x00,0x00,0x61,0x63,0x06,0x0C,0x18,0x33,0x63,0x00,0x00,0x00,0x00, // %
0x00,0x00,0x00,0x1C,0x36,0x36,0x1C,0x3B,0x6E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, // &
0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '
0x00,0x00,0x0C,0x18,0x18,0x30,0x30,0x30,0x30,0x18,0x18,0x0C,0x00,0x00,0x00,0x00, // (
0x00,0x00,0x18,0x0C,0x0C,0x06,0x06,0x06,0x06,0x0C,0x0C,0x18,0x00,0x00,0x00,0x00, // )
0x00,0x00,0x00,0x00,0x42,0x66,0x3C,0xFF,0x3C,0x66,0x42,0x00,0x00,0x00,0x00,0x00, // *
0x00,0x00,0x00,0x00,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, // +
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00, // ,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, // .
0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00, //
0x00,0x00,0x3E,0x63,0x63,0x63,0x6B,0x6B,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, // 0
0x00,0x00,0x0C,0x1C,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3F,0x00,0x00,0x00,0x00, // 1
0x00,0x00,0x3E,0x63,0x03,0x06,0x0C,0x18,0x30,0x61,0x63,0x7F,0x00,0x00,0x00,0x00, // 2
0x00,0x00,0x3E,0x63,0x03,0x03,0x1E,0x03,0x03,0x03,0x63,0x3E,0x00,0x00,0x00,0x00, // 3
0x00,0x00,0x06,0x0E,0x1E,0x36,0x66,0x66,0x7F,0x06,0x06,0x0F,0x00,0x00,0x00,0x00, // 4
0x00,0x00,0x7F,0x60,0x60,0x60,0x7E,0x03,0x03,0x63,0x73,0x3E,0x00,0x00,0x00,0x00, // 5
0x00,0x00,0x1C,0x30,0x60,0x60,0x7E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, // 6
0x00,0x00,0x7F,0x63,0x03,0x06,0x06,0x0C,0x0C,0x18,0x18,0x18,0x00,0x00,0x00,0x00, // 7
0x00,0x00,0x3E,0x63,0x63,0x63,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, // 8
0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x3F,0x03,0x03,0x06,0x3C,0x00,0x00,0x00,0x00, // 9
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, // :
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00, // ;
0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00, // <
0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00, // =
0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00, // >
0x00,0x00,0x3E,0x63,0x63,0x06,0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00, // ?
0x00,0x00,0x3E,0x63,0x63,0x6F,0x6B,0x6B,0x6E,0x60,0x60,0x3E,0x00,0x00,0x00,0x00, // @
0x00,0x00,0x08,0x1C,0x36,0x63,0x63,0x63,0x7F,0x63,0x63,0x63,0x00,0x00,0x00,0x00, // A
0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x33,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,0x00, // B
0x00,0x00,0x1E,0x33,0x61,0x60,0x60,0x60,0x60,0x61,0x33,0x1E,0x00,0x00,0x00,0x00, // C
0x00,0x00,0x7C,0x36,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x7C,0x00,0x00,0x00,0x00, // D
0x00,0x00,0x7F,0x33,0x31,0x34,0x3C,0x34,0x30,0x31,0x33,0x7F,0x00,0x00,0x00,0x00, // E
0x00,0x00,0x7F,0x33,0x31,0x34,0x3C,0x34,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00, // F
0x00,0x00,0x1E,0x33,0x61,0x60,0x60,0x6F,0x63,0x63,0x37,0x1D,0x00,0x00,0x00,0x00, // G
0x00,0x00,0x63,0x63,0x63,0x63,0x7F,0x63,0x63,0x63,0x63,0x63,0x00,0x00,0x00,0x00, // H
0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, // I
0x00,0x00,0x0F,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00, // J
0x00,0x00,0x73,0x33,0x36,0x36,0x3C,0x36,0x36,0x33,0x33,0x73,0x00,0x00,0x00,0x00, // K
0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x33,0x7F,0x00,0x00,0x00,0x00, // L
0x00,0x00,0x63,0x77,0x7F,0x6B,0x63,0x63,0x63,0x63,0x63,0x63,0x00,0x00,0x00,0x00, // M
0x00,0x00,0x63,0x63,0x73,0x7B,0x7F,0x6F,0x67,0x63,0x63,0x63,0x00,0x00,0x00,0x00, // N
0x00,0x00,0x1C,0x36,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x00,0x00,0x00,0x00, // O
0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00, // P
0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x63,0x6B,0x6F,0x3E,0x06,0x07,0x00,0x00, // Q
0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x36,0x36,0x33,0x33,0x73,0x00,0x00,0x00,0x00, // R
0x00,0x00,0x3E,0x63,0x63,0x30,0x1C,0x06,0x03,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, // S
0x00,0x00,0xFF,0xDB,0x99,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, // T
0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, // U
0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x08,0x00,0x00,0x00,0x00, // V
0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x6B,0x6B,0x7F,0x36,0x36,0x00,0x00,0x00,0x00, // W
0x00,0x00,0xC3,0xC3,0x66,0x3C,0x18,0x18,0x3C,0x66,0xC3,0xC3,0x00,0x00,0x00,0x00, // X
0x00,0x00,0xC3,0xC3,0xC3,0x66,0x3C,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, // Y
0x00,0x00,0x7F,0x63,0x43,0x06,0x0C,0x18,0x30,0x61,0x63,0x7F,0x00,0x00,0x00,0x00, // Z
0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00,0x00,0x00,0x00, // [
0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00,0x00, // /
0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x00,0x00, // ]
0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00, // _
0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // `
0x00,0x00,0x00,0x00,0x00,0x3C,0x46,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, // a
0x00,0x00,0x70,0x30,0x30,0x3C,0x36,0x33,0x33,0x33,0x33,0x6E,0x00,0x00,0x00,0x00, // b
0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x60,0x60,0x60,0x63,0x3E,0x00,0x00,0x00,0x00, // c
0x00,0x00,0x0E,0x06,0x06,0x1E,0x36,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, // d
0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x63,0x7E,0x60,0x63,0x3E,0x00,0x00,0x00,0x00, // e
0x00,0x00,0x1C,0x36,0x32,0x30,0x7C,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00, // f
0x00,0x00,0x00,0x00,0x00,0x3B,0x66,0x66,0x66,0x66,0x3E,0x06,0x66,0x3C,0x00,0x00, // g
0x00,0x00,0x70,0x30,0x30,0x36,0x3B,0x33,0x33,0x33,0x33,0x73,0x00,0x00,0x00,0x00, // h
0x00,0x00,0x0C,0x0C,0x00,0x1C,0x0C,0x0C,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00, // i
0x00,0x00,0x06,0x06,0x00,0x0E,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00, // j
0x00,0x00,0x70,0x30,0x30,0x33,0x33,0x36,0x3C,0x36,0x33,0x73,0x00,0x00,0x00,0x00, // k
0x00,0x00,0x1C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00, // l
0x00,0x00,0x00,0x00,0x00,0x6E,0x7F,0x6B,0x6B,0x6B,0x6B,0x6B,0x00,0x00,0x00,0x00, // m
0x00,0x00,0x00,0x00,0x00,0x6E,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x00,0x00, // n
0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, // o
0x00,0x00,0x00,0x00,0x00,0x6E,0x33,0x33,0x33,0x33,0x3E,0x30,0x30,0x78,0x00,0x00, // p
0x00,0x00,0x00,0x00,0x00,0x3B,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,0x0F,0x00,0x00, // q
0x00,0x00,0x00,0x00,0x00,0x6E,0x3B,0x33,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00, // r
0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x38,0x0E,0x03,0x63,0x3E,0x00,0x00,0x00,0x00, // s
0x00,0x00,0x08,0x18,0x18,0x7E,0x18,0x18,0x18,0x18,0x1B,0x0E,0x00,0x00,0x00,0x00, // t
0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, // u
0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x36,0x36,0x1C,0x1C,0x08,0x00,0x00,0x00,0x00, // v
0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x6B,0x6B,0x7F,0x36,0x00,0x00,0x00,0x00, // w
0x00,0x00,0x00,0x00,0x00,0x63,0x36,0x1C,0x1C,0x1C,0x36,0x63,0x00,0x00,0x00,0x00, // x
0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x3F,0x03,0x06,0x3C,0x00,0x00, // y
0x00,0x00,0x00,0x00,0x00,0x7F,0x66,0x0C,0x18,0x30,0x63,0x7F,0x00,0x00,0x00,0x00, // z
0x00,0x00,0x0E,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x00, // {
0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00, // |
0x00,0x00,0x70,0x18,0x18,0x18,0x0E,0x18,0x18,0x18,0x18,0x70,0x00,0x00,0x00,0x00, // }
0x00,0x00,0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~
};
void putc_8X16(char ch)
{
int i, j, k;
k = 16 * (ch - ' '); // 在字库中的偏移
for(i = 0; i < 16; i++)
{
for(j = 0; j < 8; j++)
if(FontASCII_8X16[k + i] & (1 << (7 - j)))
printf("*");
else
printf(".");
printf("\n");
}
}
void main()
{
unsigned char i;
for (i = ' '; i <= '~'; i++)
{
printf("\nchar = %c\n", i);
putc_8X16(i);
}
}
显示效果是这样的
char =
........
........
........
........
........
........
........
........
........
........
........
........
........
........
........
........
char = !
........
........
...**...
..****..
..****..
..****..
...**...
...**...
...**...
........
...**...
...**...
........
........
........
........
char = "
........
.**...**
.**...**
.**...**
..*...*.
........
........
........
........
........
........
........
........
........
........
........
char = #
........
........
........
..**.**.
..**.**.
.*******
..**.**.
..**.**.
..**.**.
.*******
..**.**.
..**.**.
........
........
........
........
char = $
....**..
....**..
..*****.
.**...**
.**....*
.**.....
..*****.
......**
......**
.*....**
.**...**
..*****.
....**..
....**..
........
........
char = %
........
........
........
........
........
.**....*
.**...**
.....**.
....**..
...**...
..**..**
.**...**
........
........
........
........
char = &
........
........
........
...***..
..**.**.
..**.**.
...***..
..***.**
.**.***.
.**..**.
.**..**.
..***.**
........
........
........
........
char = '
........
..**....
..**....
..**....
.**.....
........
........
........
........
........
........
........
........
........
........
........
char = (
........
........
....**..
...**...
...**...
..**....
..**....
..**....
..**....
...**...
...**...
....**..
........
........
........
........
char = )
........
........
...**...
....**..
....**..
.....**.
.....**.
.....**.
.....**.
....**..
....**..
...**...
........
........
........
........
char = *
........
........
........
........
.*....*.
.**..**.
..****..
********
..****..
.**..**.
.*....*.
........
........
........
........
........
char = +
........
........
........
........
...**...
...**...
...**...
********
...**...
...**...
...**...
........
........
........
........
........
char = ,
........
........
........
........
........
........
........
........
........
........
...**...
...**...
...**...
..**....
........
........
char = -
........
........
........
........
........
........
........
********
........
........
........
........
........
........
........
........
char = .
........
........
........
........
........
........
........
........
........
........
...**...
...**...
........
........
........
........
char = /
........
........
.......*
......**
.....***
....***.
...***..
..***...
.***....
***.....
**......
*.......
........
........
........
........
char = 0
........
........
..*****.
.**...**
.**...**
.**...**
.**.*.**
.**.*.**
.**...**
.**...**
.**...**
..*****.
........
........
........
........
char = 1
........
........
....**..
...***..
..****..
....**..
....**..
....**..
....**..
....**..
....**..
..******
........
........
........
........
char = 2
........
........
..*****.
.**...**
......**
.....**.
....**..
...**...
..**....
.**....*
.**...**
.*******
........
........
........
........
char = 3
........
........
..*****.
.**...**
......**
......**
...****.
......**
......**
......**
.**...**
..*****.
........
........
........
........
char = 4
........
........
.....**.
....***.
...****.
..**.**.
.**..**.
.**..**.
.*******
.....**.
.....**.
....****
........
........
........
........
char = 5
........
........
.*******
.**.....
.**.....
.**.....
.******.
......**
......**
.**...**
.***..**
..*****.
........
........
........
........
char = 6
........
........
...***..
..**....
.**.....
.**.....
.******.
.**...**
.**...**
.**...**
.**...**
..*****.
........
........
........
........
char = 7
........
........
.*******
.**...**
......**
.....**.
.....**.
....**..
....**..
...**...
...**...
...**...
........
........
........
........
char = 8
........
........
..*****.
.**...**
.**...**
.**...**
..*****.
.**...**
.**...**
.**...**
.**...**
..*****.
........
........
........
........
char = 9
........
........
..*****.
.**...**
.**...**
.**...**
.**...**
..******
......**
......**
.....**.
..****..
........
........
........
........
char = :
........
........
........
........
........
...**...
...**...
........
........
........
...**...
...**...
........
........
........
........
char = ;
........
........
........
........
........
...**...
...**...
........
........
........
...**...
...**...
...**...
..**....
........
........
char = <
........
........
........
.....**.
....**..
...**...
..**....
.**.....
..**....
...**...
....**..
.....**.
........
........
........
........
char = =
........
........
........
........
........
........
.******.
........
........
.******.
........
........
........
........
........
........
char = >
........
........
........
.**.....
..**....
...**...
....**..
.....**.
....**..
...**...
..**....
.**.....
........
........
........
........
char = ?
........
........
..*****.
.**...**
.**...**
.....**.
....**..
....**..
....**..
........
....**..
....**..
........
........
........
........
char = @
........
........
..*****.
.**...**
.**...**
.**.****
.**.*.**
.**.*.**
.**.***.
.**.....
.**.....
..*****.
........
........
........
........
char = A
........
........
....*...
...***..
..**.**.
.**...**
.**...**
.**...**
.*******
.**...**
.**...**
.**...**
........
........
........
........
char = B
........
........
.******.
..**..**
..**..**
..**..**
..*****.
..**..**
..**..**
..**..**
..**..**
.******.
........
........
........
........
char = C
........
........
...****.
..**..**
.**....*
.**.....
.**.....
.**.....
.**.....
.**....*
..**..**
...****.
........
........
........
........
char = D
........
........
.*****..
..**.**.
..**..**
..**..**
..**..**
..**..**
..**..**
..**..**
..**.**.
.*****..
........
........
........
........
char = E
........
........
.*******
..**..**
..**...*
..**.*..
..****..
..**.*..
..**....
..**...*
..**..**
.*******
........
........
........
........
char = F
........
........
.*******
..**..**
..**...*
..**.*..
..****..
..**.*..
..**....
..**....
..**....
.****...
........
........
........
........
char = G
........
........
...****.
..**..**
.**....*
.**.....
.**.....
.**.****
.**...**
.**...**
..**.***
...***.*
........
........
........
........
char = H
........
........
.**...**
.**...**
.**...**
.**...**
.*******
.**...**
.**...**
.**...**
.**...**
.**...**
........
........
........
........
char = I
........
........
..****..
...**...
...**...
...**...
...**...
...**...
...**...
...**...
...**...
..****..
........
........
........
........
char = J
........
........
....****
.....**.
.....**.
.....**.
.....**.
.....**.
.....**.
.**..**.
.**..**.
..****..
........
........
........
........
char = K
........
........
.***..**
..**..**
..**.**.
..**.**.
..****..
..**.**.
..**.**.
..**..**
..**..**
.***..**
........
........
........
........
char = L
........
........
.****...
..**....
..**....
..**....
..**....
..**....
..**....
..**...*
..**..**
.*******
........
........
........
........
char = M
........
........
.**...**
.***.***
.*******
.**.*.**
.**...**
.**...**
.**...**
.**...**
.**...**
.**...**
........
........
........
........
char = N
........
........
.**...**
.**...**
.***..**
.****.**
.*******
.**.****
.**..***
.**...**
.**...**
.**...**
........
........
........
........
char = O
........
........
...***..
..**.**.
.**...**
.**...**
.**...**
.**...**
.**...**
.**...**
..**.**.
...***..
........
........
........
........
char = P
........
........
.******.
..**..**
..**..**
..**..**
..*****.
..**....
..**....
..**....
..**....
.****...
........
........
........
........
char = Q
........
........
..*****.
.**...**
.**...**
.**...**
.**...**
.**...**
.**...**
.**.*.**
.**.****
..*****.
.....**.
.....***
........
........
char = R
........
........
.******.
..**..**
..**..**
..**..**
..*****.
..**.**.
..**.**.
..**..**
..**..**
.***..**
........
........
........
........
char = S
........
........
..*****.
.**...**
.**...**
..**....
...***..
.....**.
......**
.**...**
.**...**
..*****.
........
........
........
........
char = T
........
........
********
**.**.**
*..**..*
...**...
...**...
...**...
...**...
...**...
...**...
..****..
........
........
........
........
char = U
........
........
.**...**
.**...**
.**...**
.**...**
.**...**
.**...**
.**...**
.**...**
.**...**
..*****.
........
........
........
........
char = V
........
........
.**...**
.**...**
.**...**
.**...**
.**...**
.**...**
.**...**
..**.**.
...***..
....*...
........
........
........
........
char = W
........
........
.**...**
.**...**
.**...**
.**...**
.**...**
.**.*.**
.**.*.**
.*******
..**.**.
..**.**.
........
........
........
........
char = X
........
........
**....**
**....**
.**..**.
..****..
...**...
...**...
..****..
.**..**.
**....**
**....**
........
........
........
........
char = Y
........
........
**....**
**....**
**....**
.**..**.
..****..
...**...
...**...
...**...
...**...
..****..
........
........
........
........
char = Z
........
........
.*******
.**...**
.*....**
.....**.
....**..
...**...
..**....
.**....*
.**...**
.*******
........
........
........
........
char = [
........
........
..****..
..**....
..**....
..**....
..**....
..**....
..**....
..**....
..**....
..****..
........
........
........
........
char = \
........
........
*.......
**......
***.....
.***....
..***...
...***..
....***.
.....***
......**
.......*
........
........
........
........
char = ]
........
........
..****..
....**..
....**..
....**..
....**..
....**..
....**..
....**..
....**..
..****..
........
........
........
........
char = ^
....*...
...***..
..**.**.
.**...**
........
........
........
........
........
........
........
........
........
........
........
........
char = _
........
........
........
........
........
........
........
........
........
........
........
........
********
........
........
........
char = `
...**...
...**...
....**..
........
........
........
........
........
........
........
........
........
........
........
........
........
char = a
........
........
........
........
........
..****..
.*...**.
.....**.
..*****.
.**..**.
.**..**.
..***.**
........
........
........
........
char = b
........
........
.***....
..**....
..**....
..****..
..**.**.
..**..**
..**..**
..**..**
..**..**
.**.***.
........
........
........
........
char = c
........
........
........
........
........
..*****.
.**...**
.**.....
.**.....
.**.....
.**...**
..*****.
........
........
........
........
char = d
........
........
....***.
.....**.
.....**.
...****.
..**.**.
.**..**.
.**..**.
.**..**.
.**..**.
..***.**
........
........
........
........
char = e
........
........
........
........
........
..*****.
.**...**
.**...**
.******.
.**.....
.**...**
..*****.
........
........
........
........
char = f
........
........
...***..
..**.**.
..**..*.
..**....
.*****..
..**....
..**....
..**....
..**....
.****...
........
........
........
........
char = g
........
........
........
........
........
..***.**
.**..**.
.**..**.
.**..**.
.**..**.
..*****.
.....**.
.**..**.
..****..
........
........
char = h
........
........
.***....
..**....
..**....
..**.**.
..***.**
..**..**
..**..**
..**..**
..**..**
.***..**
........
........
........
........
char = i
........
........
....**..
....**..
........
...***..
....**..
....**..
....**..
....**..
....**..
...****.
........
........
........
........
char = j
........
........
.....**.
.....**.
........
....***.
.....**.
.....**.
.....**.
.....**.
.....**.
.**..**.
.**..**.
..****..
........
........
char = k
........
........
.***....
..**....
..**....
..**..**
..**..**
..**.**.
..****..
..**.**.
..**..**
.***..**
........
........
........
........
char = l
........
........
...***..
....**..
....**..
....**..
....**..
....**..
....**..
....**..
....**..
...****.
........
........
........
........
char = m
........
........
........
........
........
.**.***.
.*******
.**.*.**
.**.*.**
.**.*.**
.**.*.**
.**.*.**
........
........
........
........
char = n
........
........
........
........
........
.**.***.
..**..**
..**..**
..**..**
..**..**
..**..**
..**..**
........
........
........
........
char = o
........
........
........
........
........
..*****.
.**...**
.**...**
.**...**
.**...**
.**...**
..*****.
........
........
........
........
char = p
........
........
........
........
........
.**.***.
..**..**
..**..**
..**..**
..**..**
..*****.
..**....
..**....
.****...
........
........
char = q
........
........
........
........
........
..***.**
.**..**.
.**..**.
.**..**.
.**..**.
..*****.
.....**.
.....**.
....****
........
........
char = r
........
........
........
........
........
.**.***.
..***.**
..**..**
..**....
..**....
..**....
.****...
........
........
........
........
char = s
........
........
........
........
........
..*****.
.**...**
..***...
....***.
......**
.**...**
..*****.
........
........
........
........
char = t
........
........
....*...
...**...
...**...
.******.
...**...
...**...
...**...
...**...
...**.**
....***.
........
........
........
........
char = u
........
........
........
........
........
.**..**.
.**..**.
.**..**.
.**..**.
.**..**.
.**..**.
..***.**
........
........
........
........
char = v
........
........
........
........
........
.**...**
.**...**
..**.**.
..**.**.
...***..
...***..
....*...
........
........
........
........
char = w
........
........
........
........
........
.**...**
.**...**
.**...**
.**.*.**
.**.*.**
.*******
..**.**.
........
........
........
........
char = x
........
........
........
........
........
.**...**
..**.**.
...***..
...***..
...***..
..**.**.
.**...**
........
........
........
........
char = y
........
........
........
........
........
.**...**
.**...**
.**...**
.**...**
.**...**
..******
......**
.....**.
..****..
........
........
char = z
........
........
........
........
........
.*******
.**..**.
....**..
...**...
..**....
.**...**
.*******
........
........
........
........
char = {
........
........
....***.
...**...
...**...
...**...
.***....
...**...
...**...
...**...
...**...
....***.
........
........
........
........
char = |
........
........
...**...
...**...
...**...
...**...
...**...
........
...**...
...**...
...**...
...**...
...**...
........
........
........
char = }
........
........
.***....
...**...
...**...
...**...
....***.
...**...
...**...
...**...
...**...
.***....
........
........
........
........
char = ~
........
........
..***.**
.**.***.
........
........
........
........
........
........
........
........
........
........
........
........