OLED(二)
(1)购买链接:https://item.szlcsc.com/5960631.html
(2)实物图
1.1 硬件设计
硬件引脚和之前EEPROM
接的一样,形成主从架构,单片机主,从设备为这两个;
如何在OLED屏指定位置显示ASCII表中的指定字符?
1.2 点亮屏幕
1.2.1 定义写控制命令的函数
#define OLED_ADDR 0x78
#define CMD_MODE 0x00 // 发送多个命令
void Int_Oled_WriteCmd(u8 bytes[], u8 length)
{
u8 i;
// 发送起始信号
Dri_IIC_Start();
// 发送设备地址
Dri_IIC_SendByte(OLED_ADDR);
Dri_IIC_ReceiveAck();
// 发送控制字节
Dri_IIC_SendByte(CMD_MODE);
Dri_IIC_ReceiveAck();
// 发送数据
for (i = 0; i < length; i++) {
Dri_IIC_SendByte(bytes[i]);
Dri_IIC_ReceiveAck();
}
Dri_IIC_Stop();
}
1.2.2 点亮
关于点亮屏幕的初始化命令操作见屏幕手册,开启屏幕之前做 Segment重映射和Common重映射:
void Int_Oled_Init()
{
u8 bytes[6];
// 关闭屏幕
bytes[0] = 0xAE;
// Segment重映射
bytes[1] = 0xA1;
// Common重映射
bytes[2] = 0xC8;
// 启动内置电荷泵(用于升压)
bytes[3] = 0x8D;
bytes[4] = 0x14;
// 开启屏幕
bytes[5] = 0xAF;
Int_Oled_WriteCmd(bytes, 6);
}
执行函数Int_Oled_Init()
即可点亮屏幕,此时屏幕呈雪花状,需要下一步清屏。
1.3 清除屏幕
1.3.1 定义写显示数据的函数
#define DATA_MODE 0x40 // 01 000000连续发送多个显示数据
void Int_Oled_WriteData(u8 bytes[], u8 length)
{
u8 i;
// 发送起始信号
Dri_IIC_Start();
// 发送设备地址
Dri_IIC_SendByte(OLED_ADDR);
Dri_IIC_ReceiveAck();
// 发送控制字节
Dri_IIC_SendByte(DATA_MODE);
Dri_IIC_ReceiveAck();
// 发送数据
for (i = 0; i < length; i++) {
Dri_IIC_SendByte(bytes[i]);
Dri_IIC_ReceiveAck();
}
Dri_IIC_Stop();
}
1.3.2 清屏
发送显示数据0,让所有二极管都熄灭即可完成清屏
- 发送控制命令选择内存寻址模式为水平寻址:左->右,满一行后换到下一行;
- 连续发送多个显示数据0,熄灭二极管;
void Int_OLED_Clear(){
u8 cmd_bytes[2];
u8 data_bytes[8] = {0};
u8 i;
cmd_bytes[0]= 0x20; // 0x20: 0b00100000 (内存寻址模式key)
cmd_bytes[1]= 0x00; // 0x00: 0b00000000 (内存寻址模式value) 水平寻址:左->右,满一行后换到下一行
Int_Oled_WriteCmd(cmd_bytes,2);
for(i = 0; i < 128; i++){ // 每次写8位,写128次,为什么不一次写128位,ram不足
Int_Oled_WriteData(data_bytes, 8);
}
}
1.4 左上角显示一个8*8的正方形
I²C 协议中数据是按字节传输的,一个字节点亮竖直八个二极管,需要点亮8列,清屏后写入的指向地址刚好是第一行第一个:
u8 data_bytes[16] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
Int_Oled_Init();
Int_OLED_Clear();
Int_Oled_WriteData(data_bytes, 16);
1.5 在指定位置显示ASCII表中的指定字符
想要在指定位置显示ASCII
表中的指定字符,首先需要为每个字符制作字模。至于显示位置的控制,只需通过命令指定自模数据写入GDDRAM
的位置即可实现。
1.5.1 制作字模
现规定,每个字符占用屏幕上的8*16个像素:
其对应的GDDGRAM
显存数据如下(默认1表示像素亮起),现以该字符为例制作字模:
按照GDDRAM
的内存组织结构,一个8*16的字符,会跨越两个Page
,每个Page各占8个byte,共计16个byte,将这16个byte保存至一个数组,即可得到该字符的字模,这16个byte在数组中的顺序应该如何确定?
16个byte的顺序需要结合GDDRAM的寻址方式确定
- 若采用页寻址或者是水平寻址,将来数据的写入顺序应为
所以此时16个byte在数组中的顺序应为:
- 若采用垂直寻址,将来数据的写入顺序应为:
所以此时16个byte在数组中的顺序应为:
- 这里选择页寻址,最终得到的字模为:
需要注意的是,在页寻址模式下,向GDDRAM中写入字模数据时,需要先写完一个分页(字符上半部分),然后手动切换到下一个分页,最后写另一个分页(字符下半部分)
假如现在要显示字符串hello,其写入顺序如下:
1.5.2 显示位置
每个字符占用屏幕上的8x16个像素,因此整块屏幕共可显示16x4个这样的字符现;规定,屏幕左上角为原点,建立如下坐标系为方便理解,后序编写程序时,统一根据坐标指定字符的显示位置例如,坐标(3,2)对应的位置为绿色区域:
需要注意的是,在实际向GDDRAM中写入数据时,需要将我们人为定义的坐标(x,y)转换为页地址和列地址;在页寻址模式下,向GDDRAM写入数据时,上下两部分需分开写入,因此需要根据坐标,计算出两组起始地址;上半部分的起始地址应为Page=2y,Column=8x
下半部分的起始地址应为Page=2y+1,Column=8x
1.6 字模显示测试
要求屏幕左上角显示Z字符,先画上部分,再把page+1画下半部分:
// Z字模
u8 bytes_data[16] = { 0x10, 0x08, 0x08, 0x08, 0xC8, 0x38, 0x08, 0x00, 0x20, 0x38, 0x26, 0x21, 0x20, 0x20, 0x18, 0x00 };
u8 command[5];
u8 command_page2[1]; // 第二页的起始地址
command[0] = 0x20; // 寻址方式: 页寻址
command[1] = 0x00; // 寻址方式
command[2] = 0xb0; // 页地址
command[3] = 0x00; // 列地址低位
command[4] = 0x10; // 列地址高位
Int_Oled_Init();
Int_OLED_Clear();
Int_Oled_WriteCmd(command, 5);
Int_Oled_WriteData(bytes_data, 8); // 显示第一页的数据
command_page2[1] = command[2]+1; // 第二页的起始地址
Int_Oled_WriteCmd(command_page2, 2); // 发送第二页的起始地址
Int_Oled_WriteData(bytes_data + 8, 8);
while (1) {}
1.7 字模显示
设置页地址和列地址
/**
* @param page 页地址
* @param column 列地址
*/
void Int_Oled_SetPointer(u8 page, u8 column)
{
u8 bytes[3];
// 2 页 010 & 111, 10110000 | 00000010
bytes[0] = 0xB0 | (page & 0x07);
bytes[1] = 0x00 | (column & 0x0F); //0F:1111&取column后四位为bytes[1]后四位
bytes[2] = 0x10 | ((column >> 4) & 0x07); //0111column前四位为bytes[2]后四位
Int_Oled_WriteCmd(bytes, 3);
}
设置屏幕显示
Int_Oled_Font二维数组,存的是ASCII字符的字模;字模索引 = ASCII码值 - 32,如字模A = 65 - 32 = 33
void Int_Oled_ShowStr(u8 x, u8 y, u8 *str)
{
u8 i;
// 上半部分
// 设置页地址和列地址
Int_Oled_SetPointer(2 * y, 8 * x);
// 发送数据16 - x不超出本行,str[i]:循环str字符串遇到\0停止
for (i = 0; i < 16 - x && str[i]; i++) {
// str[i] - 32:str[i]为字母ascii码,-32刚好拿到数组索引的字模
Int_Oled_WriteData(Int_Oled_Font[str[i] - 32], 8);
}
// 下半部分
// 设置页地址和列地址
Int_Oled_SetPointer(2 * y + 1, 8 * x);
// 发送数据
for (i = 0; i < 16 - x && str[i]; i++) {
Int_Oled_WriteData(Int_Oled_Font[str[i] - 32] + 8, 8);
}
}
设置数字显示,如显示-123456
- 方法一:用 sprintf函数将数字
-123456
转为字符串数组,再用Int_Oled_ShowStr显示:
#include <stdio.h>
void Int_Oled_ShowNum(u8 x,u8 y,long int num){
char idata str[12];
sprintf(str, "%ld",num); // 转成字符串形式,存入 str 数组,如num: -1234, str:{'-','1', '2', '3', '4', '\0'}
Int_Oled_ShowStr(x,y,str);
}
- 方法二
长整型数字转字符串
void Int_Oled_ShowNum2(u8 x, u8 y, long int num)
{
u8 idata str[17];
u8 i = 0;
u8 j = 0;
u8 tmp;
if (num == 0) {
str[0] = '0'; // 如果传入的是 0,直接显示字符 '0',后面不用再处理。
} else {
if (num < 0) { // 如果是负数,先在 str[0] 写入负号 '-'
str[i++] = '-';
num = -num; // 然后将 num 取反变成正数继续处理
j = 1; // 此时 j=1 表示从 str[1] 开始是数字部分,反转时跳过 '-'
}
// 转换字符串, 得到的数字字符串是倒序的
while (num) {
str[i++] = num % 10 + '0'; // 用 %10 拆出最低位数字,加 '0' 转成字符
num = num / 10; // 不断除以 10 直到为 0
}
// 字符串终止
str[i] = 0;
i--;
// 由于前面是倒序写入数字,现在需要反转回来
while (i > j) {
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
i--;
j++;
}
}
Int_Oled_ShowStr(x, y, str);
}
显示
Int_Oled_Init();
Int_Oled_Clear();
Int_Oled_ShowStr(0, 0, "Hello world!");
Int_Oled_ShowNum(0, 1, 123456);
1.8 ASCII字符字模数组
数组 Int_Oled_Font[][18]
是一个 字体表,它的每个元素对应一个 ASCII 字符
- Int_Oled_Font[0] 对应 ASCII 32 -> 字符 ' '
- Int_Oled_Font[1] 对应 ASCII 33 -> 字符 '!'
- Int_Oled_Font[2] 对应 ASCII 34 -> 字符 '"'
- ...
Int_Oled_Font[33] 对应 ASCII 65 -> 字符 'A' - ...
Int_Oled_Font[94] 对应 ASCII 126 -> 字符 '~'
字模索引 = ASCII码值 - 32,如字模A = 65 - 32 = 33
code const u8 Int_Oled_Font[][19] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0
0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x33, 0x30, 0x00, 0x00, 0x00, //! 1
0x00, 0x10, 0x0C, 0x06, 0x10, 0x0C, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //" 2
0x40, 0xC0, 0x78, 0x40, 0xC0, 0x78, 0x40, 0x00,
0x04, 0x3F, 0x04, 0x04, 0x3F, 0x04, 0x04, 0x00, // # 3
0x00, 0x70, 0x88, 0xFC, 0x08, 0x30, 0x00, 0x00,
0x00, 0x18, 0x20, 0xFF, 0x21, 0x1E, 0x00, 0x00, //$ 4
0xF0, 0x08, 0xF0, 0x00, 0xE0, 0x18, 0x00, 0x00,
0x00, 0x21, 0x1C, 0x03, 0x1E, 0x21, 0x1E, 0x00, //% 5
0x00, 0xF0, 0x08, 0x88, 0x70, 0x00, 0x00, 0x00,
0x1E, 0x21, 0x23, 0x24, 0x19, 0x27, 0x21, 0x10, //& 6
0x10, 0x16, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //' 7
0x00, 0x00, 0x00, 0xE0, 0x18, 0x04, 0x02, 0x00,
0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x00, //( 8
0x00, 0x02, 0x04, 0x18, 0xE0, 0x00, 0x00, 0x00,
0x00, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, //) 9
0x40, 0x40, 0x80, 0xF0, 0x80, 0x40, 0x40, 0x00,
0x02, 0x02, 0x01, 0x0F, 0x01, 0x02, 0x02, 0x00, //* 10
0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x1F, 0x01, 0x01, 0x01, 0x00, //+ 11
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, //, 12
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //- 13
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, //. 14
0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, 0x04,
0x00, 0x60, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, /// 15
0x00, 0xE0, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00,
0x00, 0x0F, 0x10, 0x20, 0x20, 0x10, 0x0F, 0x00, // 0 16
0x00, 0x10, 0x10, 0xF8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // 1 17
0x00, 0x70, 0x08, 0x08, 0x08, 0x88, 0x70, 0x00,
0x00, 0x30, 0x28, 0x24, 0x22, 0x21, 0x30, 0x00, // 2 18
0x00, 0x30, 0x08, 0x88, 0x88, 0x48, 0x30, 0x00,
0x00, 0x18, 0x20, 0x20, 0x20, 0x11, 0x0E, 0x00, // 3 19
0x00, 0x00, 0xC0, 0x20, 0x10, 0xF8, 0x00, 0x00,
0x00, 0x07, 0x04, 0x24, 0x24, 0x3F, 0x24, 0x00, // 4 20
0x00, 0xF8, 0x08, 0x88, 0x88, 0x08, 0x08, 0x00,
0x00, 0x19, 0x21, 0x20, 0x20, 0x11, 0x0E, 0x00, // 5 21
0x00, 0xE0, 0x10, 0x88, 0x88, 0x18, 0x00, 0x00,
0x00, 0x0F, 0x11, 0x20, 0x20, 0x11, 0x0E, 0x00, // 6 22
0x00, 0x38, 0x08, 0x08, 0xC8, 0x38, 0x08, 0x00,
0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, // 7 23
0x00, 0x70, 0x88, 0x08, 0x08, 0x88, 0x70, 0x00,
0x00, 0x1C, 0x22, 0x21, 0x21, 0x22, 0x1C, 0x00, // 8 24
0x00, 0xE0, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00,
0x00, 0x00, 0x31, 0x22, 0x22, 0x11, 0x0F, 0x00, // 9 25
0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, //: 26
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00, //; 27
0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00,
0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, //< 28
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, //= 29
0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00,
0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, //> 30
0x00, 0x70, 0x48, 0x08, 0x08, 0x08, 0xF0, 0x00,
0x00, 0x00, 0x00, 0x30, 0x36, 0x01, 0x00, 0x00, //? 31
0xC0, 0x30, 0xC8, 0x28, 0xE8, 0x10, 0xE0, 0x00,
0x07, 0x18, 0x27, 0x24, 0x23, 0x14, 0x0B, 0x00, //@ 32
0x00, 0x00, 0xC0, 0x38, 0xE0, 0x00, 0x00, 0x00,
0x20, 0x3C, 0x23, 0x02, 0x02, 0x27, 0x38, 0x20, // A 33
0x08, 0xF8, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00,
0x20, 0x3F, 0x20, 0x20, 0x20, 0x11, 0x0E, 0x00, // B 34
0xC0, 0x30, 0x08, 0x08, 0x08, 0x08, 0x38, 0x00,
0x07, 0x18, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, // C 35
0x08, 0xF8, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00,
0x20, 0x3F, 0x20, 0x20, 0x20, 0x10, 0x0F, 0x00, // D 36
0x08, 0xF8, 0x88, 0x88, 0xE8, 0x08, 0x10, 0x00,
0x20, 0x3F, 0x20, 0x20, 0x23, 0x20, 0x18, 0x00, // E 37
0x08, 0xF8, 0x88, 0x88, 0xE8, 0x08, 0x10, 0x00,
0x20, 0x3F, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, // F 38
0xC0, 0x30, 0x08, 0x08, 0x08, 0x38, 0x00, 0x00,
0x07, 0x18, 0x20, 0x20, 0x22, 0x1E, 0x02, 0x00, // G 39
0x08, 0xF8, 0x08, 0x00, 0x00, 0x08, 0xF8, 0x08,
0x20, 0x3F, 0x21, 0x01, 0x01, 0x21, 0x3F, 0x20, // H 40
0x00, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x00, 0x00,
0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // I 41
0x00, 0x00, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x00,
0xC0, 0x80, 0x80, 0x80, 0x7F, 0x00, 0x00, 0x00, // J 42
0x08, 0xF8, 0x88, 0xC0, 0x28, 0x18, 0x08, 0x00,
0x20, 0x3F, 0x20, 0x01, 0x26, 0x38, 0x20, 0x00, // K 43
0x08, 0xF8, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x30, 0x00, // L 44
0x08, 0xF8, 0xF8, 0x00, 0xF8, 0xF8, 0x08, 0x00,
0x20, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x20, 0x00, // M 45
0x08, 0xF8, 0x30, 0xC0, 0x00, 0x08, 0xF8, 0x08,
0x20, 0x3F, 0x20, 0x00, 0x07, 0x18, 0x3F, 0x00, // N 46
0xE0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00,
0x0F, 0x10, 0x20, 0x20, 0x20, 0x10, 0x0F, 0x00, // O 47
0x08, 0xF8, 0x08, 0x08, 0x08, 0x08, 0xF0, 0x00,
0x20, 0x3F, 0x21, 0x01, 0x01, 0x01, 0x00, 0x00, // P 48
0xE0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00,
0x0F, 0x18, 0x24, 0x24, 0x38, 0x50, 0x4F, 0x00, // Q 49
0x08, 0xF8, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,
0x20, 0x3F, 0x20, 0x00, 0x03, 0x0C, 0x30, 0x20, // R 50
0x00, 0x70, 0x88, 0x08, 0x08, 0x08, 0x38, 0x00,
0x00, 0x38, 0x20, 0x21, 0x21, 0x22, 0x1C, 0x00, // S 51
0x18, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x18, 0x00,
0x00, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x00, 0x00, // T 52
0x08, 0xF8, 0x08, 0x00, 0x00, 0x08, 0xF8, 0x08,
0x00, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x00, // U 53
0x08, 0x78, 0x88, 0x00, 0x00, 0xC8, 0x38, 0x08,
0x00, 0x00, 0x07, 0x38, 0x0E, 0x01, 0x00, 0x00, // V 54
0xF8, 0x08, 0x00, 0xF8, 0x00, 0x08, 0xF8, 0x00,
0x03, 0x3C, 0x07, 0x00, 0x07, 0x3C, 0x03, 0x00, // W 55
0x08, 0x18, 0x68, 0x80, 0x80, 0x68, 0x18, 0x08,
0x20, 0x30, 0x2C, 0x03, 0x03, 0x2C, 0x30, 0x20, // X 56
0x08, 0x38, 0xC8, 0x00, 0xC8, 0x38, 0x08, 0x00,
0x00, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x00, 0x00, // Y 57
0x10, 0x08, 0x08, 0x08, 0xC8, 0x38, 0x08, 0x00,
0x20, 0x38, 0x26, 0x21, 0x20, 0x20, 0x18, 0x00, // Z 58
0x00, 0x00, 0x00, 0xFE, 0x02, 0x02, 0x02, 0x00,
0x00, 0x00, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x00, //[ 59
0x00, 0x0C, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x06, 0x38, 0xC0, 0x00, //\ 60
0x00, 0x02, 0x02, 0x02, 0xFE, 0x00, 0x00, 0x00,
0x00, 0x40, 0x40, 0x40, 0x7F, 0x00, 0x00, 0x00, //] 61
0x00, 0x00, 0x04, 0x02, 0x02, 0x02, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //^ 62
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //_ 63
0x00, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //` 64
0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
0x00, 0x19, 0x24, 0x22, 0x22, 0x22, 0x3F, 0x20, // a 65
0x08, 0xF8, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00,
0x00, 0x3F, 0x11, 0x20, 0x20, 0x11, 0x0E, 0x00, // b 66
0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00,
0x00, 0x0E, 0x11, 0x20, 0x20, 0x20, 0x11, 0x00, // c 67
0x00, 0x00, 0x00, 0x80, 0x80, 0x88, 0xF8, 0x00,
0x00, 0x0E, 0x11, 0x20, 0x20, 0x10, 0x3F, 0x20, // d 68
0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
0x00, 0x1F, 0x22, 0x22, 0x22, 0x22, 0x13, 0x00, // e 69
0x00, 0x80, 0x80, 0xF0, 0x88, 0x88, 0x88, 0x18,
0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // f 70
0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,
0x00, 0x6B, 0x94, 0x94, 0x94, 0x93, 0x60, 0x00, // g 71
0x08, 0xF8, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00,
0x20, 0x3F, 0x21, 0x00, 0x00, 0x20, 0x3F, 0x20, // h 72
0x00, 0x80, 0x98, 0x98, 0x00, 0x00, 0x00, 0x00,
0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // i 73
0x00, 0x00, 0x00, 0x80, 0x98, 0x98, 0x00, 0x00,
0x00, 0xC0, 0x80, 0x80, 0x80, 0x7F, 0x00, 0x00, // j 74
0x08, 0xF8, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00,
0x20, 0x3F, 0x24, 0x02, 0x2D, 0x30, 0x20, 0x00, // k 75
0x00, 0x08, 0x08, 0xF8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // l 76
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,
0x20, 0x3F, 0x20, 0x00, 0x3F, 0x20, 0x00, 0x3F, // m 77
0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00,
0x20, 0x3F, 0x21, 0x00, 0x00, 0x20, 0x3F, 0x20, // n 78
0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
0x00, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x00, // o 79
0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00,
0x80, 0xFF, 0xA1, 0x20, 0x20, 0x11, 0x0E, 0x00, // p 80
0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00,
0x00, 0x0E, 0x11, 0x20, 0x20, 0xA0, 0xFF, 0x80, // q 81
0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00,
0x20, 0x20, 0x3F, 0x21, 0x20, 0x00, 0x01, 0x00, // r 82
0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,
0x00, 0x33, 0x24, 0x24, 0x24, 0x24, 0x19, 0x00, // s 83
0x00, 0x80, 0x80, 0xE0, 0x80, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1F, 0x20, 0x20, 0x00, 0x00, // t 84
0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00,
0x00, 0x1F, 0x20, 0x20, 0x20, 0x10, 0x3F, 0x20, // u 85
0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80,
0x00, 0x01, 0x0E, 0x30, 0x08, 0x06, 0x01, 0x00, // v 86
0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80,
0x0F, 0x30, 0x0C, 0x03, 0x0C, 0x30, 0x0F, 0x00, // w 87
0x00, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00,
0x00, 0x20, 0x31, 0x2E, 0x0E, 0x31, 0x20, 0x00, // x 88
0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80,
0x80, 0x81, 0x8E, 0x70, 0x18, 0x06, 0x01, 0x00, // y 89
0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,
0x00, 0x21, 0x30, 0x2C, 0x22, 0x21, 0x30, 0x00, // z 90
0x00, 0x00, 0x00, 0x00, 0x80, 0x7C, 0x02, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x40, //{ 91
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, //| 92
0x00, 0x02, 0x02, 0x7C, 0x80, 0x00, 0x00, 0x00,
0x00, 0x40, 0x40, 0x3F, 0x00, 0x00, 0x00, 0x00, //} 93
0x00, 0x06, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //~ 94
};
1
1
1
1
1
1
1
1
1
1