成立这个专栏的目的是,记录自己嵌入式开发遇到的问题,与成功的解决方法,方便自己回顾。
最近在学习王维波老师的《STM32Cube高效开发教程》,王老师移植的是普中科技的驱动,而我手动移植了一下正点原子的lcd驱动,其中也踩了不少坑(部分现象还百度不出结果),值得记录一下。
准备环节:正点原子3.5'TFTLCD的官方例程(参考下载链接:3.5寸TFTLCD电阻触摸屏320*480 — 正点原子资料下载中心 1.0.0 文档)依据其新资料进行移植
,F103精英板、CubeMX、Gcc开发环境。
第一步:打开CubeMX,新建项目,选择单片机型号以及项目名称。
第二步:CubeMX初始化RCC、SYS相关(这些参数设置都是根据你的开发板而来的)
时钟树设置,工程设置
第四步:FSMC的配置(各个开发板差异化明显,注意甄别)
上述参数的填写主要依据还是我们自己手上的开发版FSMC的实际电气连接
例如:此处中,LCD (RS)Register Select,书上的标号为A6,但是基于正点原子的开发板实际原理图来看,应该是选择A10(RS---FSMC A10)
FSMC具体参数配置,这个不太明白其中的含义,希望有人能解答下
其中GPIO设置中,我们需要增加背光脚的控制(LCD BL)
点击生成代码即可。
开始驱动移植(修修改改)
将下载下来的模块文件(因为此时不需要触屏,暂不移植触屏)导入到我们的工程当中,为了方便查看,放入到工程新建文件夹{TFTLCD}中
1.修改头文件,修改包含路径,注释掉不存在的头文件,增加替代头文件
atk_md0350.c中
#include "atk_md0350.h"
#include "atk_md0350_font.h"
#include "atk_md0350_fsmc.h"
// #include "./SYSTEM/delay/delay.h"
atk_md0350.h中
// #include "./SYSTEM/sys/sys.h"
#include "main.h"
由于不需要触摸,此处屏蔽掉
/* 定义是否使用ATK-MD0350模块触摸 */
#define ATK_MD0350_USING_TOUCH 0
atk_md0350_font.h 中
#include "atk_md0350.h"
atk_md0350_fsmc.c中
#include "atk_md0350_fsmc.h"
atk_md0350_fsmc.h中
// #include "./SYSTEM/sys/sys.h"
#include "main.h"
2,在atk_md0350.c文件中修改atk_md0350_init函数:由于硬件初始化交给了CubeMx,所以可以适当注释掉原文件中硬件初始化代码
/**
* @brief ATK-MD0350模块初始化
* @param 无
* @retval ATK_MD0350_EOK : ATK_MD0350模块初始化成功
* ATK_MD0350_ERROR: ATK_MD0350模块初始化失败
*/
uint8_t atk_md0350_init(void)
{
uint16_t chip_id;
// atk_md0350_hw_init(); /* ATK-MD0350模块硬件初始化 */
// atk_md0350_fsmc_init(); /* ATK-MD0350模块FSMC接口初始化 */
chip_id = atk_md0350_get_chip_id(); /* 获取ATK-MD0350模块驱动器ID */
if (chip_id != ATK_MD0350_CHIP_ID) {
return ATK_MD0350_ERROR;
} else {
g_atk_md0350_sta.chip_id = chip_id;
g_atk_md0350_sta.width = ATK_MD0350_LCD_WIDTH;
g_atk_md0350_sta.height = ATK_MD0350_LCD_HEIGHT;
}
atk_md0350_reg_init();
atk_md0350_set_disp_dir(ATK_MD0350_LCD_DISP_DIR_0);
atk_md0350_clear(ATK_MD0350_WHITE);
atk_md0350_display_on();
atk_md0350_backlight_on();
#if (ATK_MD0350_USING_TOUCH != 0)
atk_md0350_touch_init();
#endif
return ATK_MD0350_EOK;
}
3,在atk_md0350.c文件中修改背光函数:原因同上
/**
* @brief 开启ATK-MD0350模块LCD背光
* @param 无
* @retval 无
*/
void atk_md0350_backlight_on(void)
{
HAL_GPIO_WritePin(lcd_bl_GPIO_Port, lcd_bl_Pin, GPIO_PIN_SET);
//ATK_MD0350_BL(1);
}
/**
* @brief 关闭ATK-MD0350模块LCD背光
* @param 无
* @retval 无
*/
void atk_md0350_backlight_off(void)
{
HAL_GPIO_WritePin(lcd_bl_GPIO_Port, lcd_bl_Pin, GPIO_PIN_RESET);
//ATK_MD0350_BL(0);
}
4,部分延时函数修改
delay_ms()修改为HAL_Delay()
atk_md0350.c中__nop()修改为__NOP()
static inline uint16_t atk_md0350_fsmc_read_dat(void) /* ATK-MD0350模块通过FSMC接口读数据 */
{
uint16_t dat;
__NOP();
__NOP();
dat = ATK_MD0350_FSMC_DAT_REG;
return dat;
}
开始在main中调用,添加改好的头文件
#include "atk_md0350.h"
在MX初始化后,延时一段时间(我的异常现象就是这么解决的),调用模块的初始化,显示函数即可。
MX_GPIO_Init();
MX_FSMC_Init();
/* USER CODE BEGIN 2 */
HAL_Delay(50);
atk_md0350_init();
atk_md0350_display_on();
atk_md0350_clear(ATK_MD0350_RED);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1) {
atk_md0350_show_string(10, 10, ATK_MD0350_LCD_WIDTH, 32, "Hello world!!!", ATK_MD0350_LCD_FONT_12, ATK_MD0350_WHITE);
atk_md0350_show_string(10, 42, ATK_MD0350_LCD_WIDTH, 24, "STM32!!!", ATK_MD0350_LCD_FONT_24, ATK_MD0350_WHITE);
atk_md0350_show_string(10, 66, ATK_MD0350_LCD_WIDTH, 16, "Hello world!!!", ATK_MD0350_LCD_FONT_16, ATK_MD0350_WHITE);
HAL_GPIO_TogglePin(red_led_GPIO_Port, red_led_Pin);
HAL_Delay(500);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
嫌麻烦的话可以直接copy我的,可以直接使用
atk_md0350.c
/**
****************************************************************************************************
* @file atk_md0350.c
* @author 正点原子团队(ALIENTEK)
* @version V1.0
* @date 2022-06-21
* @brief ATK-MD0350模块驱动代码
* @license Copyright (c) 2020-2032, 广州市星翼电子科技有限公司
****************************************************************************************************
* @attention
*
* 实验平台:正点原子 STM32F103开发板
* 在线视频:www.yuanzige.com
* 技术论坛:www.openedv.com
* 公司网址:www.alientek.com
* 购买地址:openedv.taobao.com
*
****************************************************************************************************
*/
#include "atk_md0350.h"
#include "atk_md0350_font.h"
#include "atk_md0350_fsmc.h"
// #include "./SYSTEM/delay/delay.h"
/* ATK-MD0350模块LCD驱动器ID */
#define ATK_MD0350_CHIP_ID 0x5310
/* ATK-MD0350模块LCD扫描方向 */
#define ATK_MD0350_SCAN_DIR_L2R_U2D (0x0000)
#define ATK_MD0350_SCAN_DIR_L2R_D2U (0x0080)
#define ATK_MD0350_SCAN_DIR_R2L_U2D (0x0040)
#define ATK_MD0350_SCAN_DIR_R2L_D2U (0x00C0)
#define ATK_MD0350_SCAN_DIR_U2D_L2R (0x0020)
#define ATK_MD0350_SCAN_DIR_U2D_R2L (0x0060)
#define ATK_MD0350_SCAN_DIR_D2U_L2R (0x00A0)
#define ATK_MD0350_SCAN_DIR_D2U_R2L (0x00E0)
/* ATK-MD0350模块状态数据结构体 */
static struct
{
uint16_t chip_id; /* 驱动器ID */
uint16_t width; /* LCD宽度 */
uint16_t height; /* LCD高度 */
atk_md0350_lcd_scan_dir_t scan_dir; /* LCD扫描方向 */
atk_md0350_lcd_disp_dir_t disp_dir; /* LCD显示方向 */
} g_atk_md0350_sta = {0};
/**
* @brief ATK-MD0350模块硬件初始化
* @param 无
* @retval 无
*/
static void atk_md0350_hw_init(void)
{
GPIO_InitTypeDef gpio_init_struct = {0};
/* 使能时钟 */
ATK_MD0350_BL_GPIO_CLK_ENABLE();
/* 初始化BL引脚 */
gpio_init_struct.Pin = ATK_MD0350_BL_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;
gpio_init_struct.Pull = GPIO_PULLUP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_BL_GPIO_PORT, &gpio_init_struct);
ATK_MD0350_BL(0);
}
/**
* @brief 获取ATK-MD0350模块驱动器ID
* @param 无
* @retval 无
*/
static inline uint16_t atk_md0350_get_chip_id(void)
{
uint16_t chip_id;
atk_md0350_fsmc_write_cmd(0xD4);
chip_id = atk_md0350_fsmc_read_dat();
chip_id = atk_md0350_fsmc_read_dat();
chip_id = atk_md0350_fsmc_read_dat() << 8;
chip_id |= (atk_md0350_fsmc_read_dat()) & 0x00FF;
return chip_id;
}
/**
* @brief ATK-MD0350模块寄存器初始化
* @param 无
* @retval 无
*/
static void atk_md0350_reg_init(void)
{
atk_md0350_fsmc_write_cmd(0xED);
atk_md0350_fsmc_write_dat(0x01);
atk_md0350_fsmc_write_dat(0xFE);
atk_md0350_fsmc_write_cmd(0xEE);
atk_md0350_fsmc_write_dat(0xDE);
atk_md0350_fsmc_write_dat(0x21);
atk_md0350_fsmc_write_cmd(0xF1);
atk_md0350_fsmc_write_dat(0x01);
atk_md0350_fsmc_write_cmd(0xDF);
atk_md0350_fsmc_write_dat(0x10);
atk_md0350_fsmc_write_cmd(0xC4);
atk_md0350_fsmc_write_dat(0x8F);
atk_md0350_fsmc_write_cmd(0xC6);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xE2);
atk_md0350_fsmc_write_dat(0xE2);
atk_md0350_fsmc_write_dat(0xE2);
atk_md0350_fsmc_write_cmd(0xBF);
atk_md0350_fsmc_write_dat(0xAA);
atk_md0350_fsmc_write_cmd(0xB0);
atk_md0350_fsmc_write_dat(0x0D);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x0D);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x11);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x19);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x21);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x2D);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x3D);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x5D);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x5D);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xB1);
atk_md0350_fsmc_write_dat(0x80);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x8B);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x96);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xB2);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x02);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x03);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xB3);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xB4);
atk_md0350_fsmc_write_dat(0x8B);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x96);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xA1);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xB5);
atk_md0350_fsmc_write_dat(0x02);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x03);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x04);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xB6);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xB7);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x3F);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x5E);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x64);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x8C);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xAC);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xDC);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x70);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x90);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xEB);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xDC);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xB8);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xBA);
atk_md0350_fsmc_write_dat(0x24);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xC1);
atk_md0350_fsmc_write_dat(0x20);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x54);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xFF);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xC2);
atk_md0350_fsmc_write_dat(0x0A);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x04);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xC3);
atk_md0350_fsmc_write_dat(0x3C);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x3A);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x39);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x37);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x3C);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x36);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x32);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x2F);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x2C);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x29);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x26);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x24);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x24);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x23);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x3C);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x36);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x32);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x2F);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x2C);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x29);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x26);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x24);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x24);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x23);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xC4);
atk_md0350_fsmc_write_dat(0x62);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x05);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x84);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xF0);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x18);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xA4);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x18);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x50);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x0C);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x17);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x95);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xF3);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xE6);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xC5);
atk_md0350_fsmc_write_dat(0x32);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x44);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x65);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x76);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x88);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xC6);
atk_md0350_fsmc_write_dat(0x20);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x17);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x01);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xC7);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xC8);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xC9);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xE0);
atk_md0350_fsmc_write_dat(0x16);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x1C);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x21);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x36);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x46);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x52);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x64);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x7A);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x8B);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x99);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xA8);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xB9);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xC4);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xCA);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xD2);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xD9);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xE0);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xF3);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xE1);
atk_md0350_fsmc_write_dat(0x16);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x1C);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x22);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x36);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x45);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x52);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x64);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x7A);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x8B);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x99);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xA8);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xB9);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xC4);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xCA);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xD2);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xD8);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xE0);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xF3);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xE2);
atk_md0350_fsmc_write_dat(0x05);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x0B);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x1B);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x34);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x44);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x4F);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x61);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x79);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x88);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x97);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xA6);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xB7);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xC2);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xC7);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xD1);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xD6);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xDD);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xF3);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xE3);
atk_md0350_fsmc_write_dat(0x05);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xA);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x1C);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x33);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x44);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x50);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x62);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x78);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x88);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x97);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xA6);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xB7);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xC2);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xC7);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xD1);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xD5);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xDD);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xF3);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xE4);
atk_md0350_fsmc_write_dat(0x01);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x01);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x02);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x2A);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x3C);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x4B);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x5D);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x74);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x84);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x93);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xA2);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xB3);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xBE);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xC4);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xCD);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xD3);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xDD);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xF3);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xE5);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x02);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x29);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x3C);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x4B);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x5D);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x74);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x84);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x93);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xA2);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xB3);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xBE);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xC4);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xCD);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xD3);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xDC);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xF3);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xE6);
atk_md0350_fsmc_write_dat(0x11);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x34);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x56);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x76);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x77);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x66);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x88);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x99);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xBB);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x99);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x66);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x55);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x55);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x45);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x43);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x44);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xE7);
atk_md0350_fsmc_write_dat(0x32);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x55);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x76);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x66);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x67);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x67);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x87);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x99);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xBB);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x99);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x77);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x44);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x56);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x23);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x33);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x45);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xE8);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x99);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x87);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x88);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x77);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x66);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x88);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xAA);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0xBB);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x99);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x66);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x55);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x55);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x44);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x44);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x55);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xE9);
atk_md0350_fsmc_write_dat(0xAA);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0x00);
atk_md0350_fsmc_write_dat(0xAA);
atk_md0350_fsmc_write_cmd(0xCF);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xF0);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x50);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xF3);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0xF9);
atk_md0350_fsmc_write_dat(0x06);
atk_md0350_fsmc_write_dat(0x10);
atk_md0350_fsmc_write_dat(0x29);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0x3A);
atk_md0350_fsmc_write_dat(0x55);
atk_md0350_fsmc_write_cmd(0x11);
HAL_Delay(100);
// delay_ms(100);
atk_md0350_fsmc_write_cmd(0x29);
atk_md0350_fsmc_write_cmd(0x35);
atk_md0350_fsmc_write_dat(0x00);
atk_md0350_fsmc_write_cmd(0x51);
atk_md0350_fsmc_write_dat(0xFF);
atk_md0350_fsmc_write_cmd(0x53);
atk_md0350_fsmc_write_dat(0x2C);
atk_md0350_fsmc_write_cmd(0x55);
atk_md0350_fsmc_write_dat(0x82);
atk_md0350_fsmc_write_cmd(0x2C);
}
/**
* @brief 设置ATK-MD0350模块列地址
* @param 无
* @retval 无
*/
static void atk_md0350_set_column_address(uint16_t sc, uint16_t ec)
{
atk_md0350_fsmc_write_cmd(0x2A);
atk_md0350_fsmc_write_dat((uint8_t)(sc >> 8) & 0xFF);
atk_md0350_fsmc_write_dat((uint8_t)sc & 0xFF);
atk_md0350_fsmc_write_dat((uint8_t)(ec >> 8) & 0xFF);
atk_md0350_fsmc_write_dat((uint8_t)ec & 0xFF);
}
/**
* @brief 设置ATK-MD0350模块页地址
* @param 无
* @retval 无
*/
static void atk_md0350_set_page_address(uint16_t sp, uint16_t ep)
{
atk_md0350_fsmc_write_cmd(0x2B);
atk_md0350_fsmc_write_dat((uint8_t)(sp >> 8) & 0xFF);
atk_md0350_fsmc_write_dat((uint8_t)sp & 0xFF);
atk_md0350_fsmc_write_dat((uint8_t)(ep >> 8) & 0xFF);
atk_md0350_fsmc_write_dat((uint8_t)ep & 0xFF);
}
/**
* @brief 开始写ATK-MD0350模块显存
* @param 无
* @retval 无
*/
static void atk_md0350_start_write_memory(void)
{
atk_md0350_fsmc_write_cmd(0x2C);
}
/**
* @brief 开始读ATK-MD0350模块显存
* @param 无
* @retval 无
*/
static void atk_md0350_start_read_memory(void)
{
atk_md0350_fsmc_write_cmd(0x2E);
}
/**
* @brief 平方函数,x^y
* @param x: 底数
* y: 指数
* @retval x^y
*/
static uint32_t atk_md0350_pow(uint8_t x, uint8_t y)
{
uint8_t loop;
uint32_t res = 1;
for (loop = 0; loop < y; loop++) {
res *= x;
}
return res;
}
/**
* @brief ATK-MD0350模块初始化
* @param 无
* @retval ATK_MD0350_EOK : ATK_MD0350模块初始化成功
* ATK_MD0350_ERROR: ATK_MD0350模块初始化失败
*/
uint8_t atk_md0350_init(void)
{
uint16_t chip_id;
// atk_md0350_hw_init(); /* ATK-MD0350模块硬件初始化 */
// atk_md0350_fsmc_init(); /* ATK-MD0350模块FSMC接口初始化 */
chip_id = atk_md0350_get_chip_id(); /* 获取ATK-MD0350模块驱动器ID */
if (chip_id != ATK_MD0350_CHIP_ID) {
return ATK_MD0350_ERROR;
} else {
g_atk_md0350_sta.chip_id = chip_id;
g_atk_md0350_sta.width = ATK_MD0350_LCD_WIDTH;
g_atk_md0350_sta.height = ATK_MD0350_LCD_HEIGHT;
}
atk_md0350_reg_init();
atk_md0350_set_disp_dir(ATK_MD0350_LCD_DISP_DIR_0);
atk_md0350_clear(ATK_MD0350_WHITE);
atk_md0350_display_on();
atk_md0350_backlight_on();
#if (ATK_MD0350_USING_TOUCH != 0)
atk_md0350_touch_init();
#endif
return ATK_MD0350_EOK;
}
/**
* @brief 获取ATK-MD0350模块LCD宽度
* @param 无
* @retval ATK-MD0350模块LCD宽度
*/
uint16_t atk_md0350_get_lcd_width(void)
{
return g_atk_md0350_sta.width;
}
/**
* @brief 获取ATK-MD0350模块LCD高度
* @param 无
* @retval ATK-MD0350模块LCD高度
*/
uint16_t atk_md0350_get_lcd_height(void)
{
return g_atk_md0350_sta.height;
}
/**
* @brief 开启ATK-MD0350模块LCD背光
* @param 无
* @retval 无
*/
void atk_md0350_backlight_on(void)
{
HAL_GPIO_WritePin(lcd_bl_GPIO_Port, lcd_bl_Pin, GPIO_PIN_SET);
//ATK_MD0350_BL(1);
}
/**
* @brief 关闭ATK-MD0350模块LCD背光
* @param 无
* @retval 无
*/
void atk_md0350_backlight_off(void)
{
HAL_GPIO_WritePin(lcd_bl_GPIO_Port, lcd_bl_Pin, GPIO_PIN_RESET);
//ATK_MD0350_BL(0);
}
/**
* @brief 开启ATK-MD0350模块LCD显示
* @param 无
* @retval 无
*/
void atk_md0350_display_on(void)
{
atk_md0350_fsmc_write_cmd(0x29);
}
/**
* @brief 关闭ATK-MD0350模块LCD显示
* @param 无
* @retval 无
*/
void atk_md0350_display_off(void)
{
atk_md0350_fsmc_write_cmd(0x28);
}
/**
* @brief 设置ATK-MD0350模块LCD扫描方向
* @param scan_dir: ATK_MD0350_LCD_SCAN_DIR_L2R_U2D: 从左到右,从上到下
* ATK_MD0350_LCD_SCAN_DIR_L2R_D2U: 从左到右,从下到上
* ATK_MD0350_LCD_SCAN_DIR_R2L_U2D: 从右到左,从上到下
* ATK_MD0350_LCD_SCAN_DIR_R2L_D2U: 从右到左,从下到上
* ATK_MD0350_LCD_SCAN_DIR_U2D_L2R: 从上到下,从左到右
* ATK_MD0350_LCD_SCAN_DIR_U2D_R2L: 从上到下,从右到左
* ATK_MD0350_LCD_SCAN_DIR_D2U_L2R: 从下到上,从左到右
* ATK_MD0350_LCD_SCAN_DIR_D2U_R2L: 从下到上,从右到左
* @retval ATK_MD0350_EOK : 设置ATK-MD0350模块LCD扫描方向成功
* ATK_MD0350_ERROR : 设置ATK-MD0350模块LCD扫描方向失败
* ATK_MD0350_EINVAL: 传入参数错误
*/
uint8_t atk_md0350_set_scan_dir(atk_md0350_lcd_scan_dir_t scan_dir)
{
uint16_t reg36;
switch (g_atk_md0350_sta.disp_dir) {
case ATK_MD0350_LCD_DISP_DIR_0: {
reg36 = (uint16_t)scan_dir;
break;
}
case ATK_MD0350_LCD_DISP_DIR_90: {
switch (scan_dir) {
case ATK_MD0350_LCD_SCAN_DIR_L2R_U2D: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_U2D_R2L;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_L2R_D2U: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_U2D_L2R;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_R2L_U2D: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_D2U_R2L;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_R2L_D2U: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_D2U_L2R;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_U2D_L2R: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_R2L_U2D;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_U2D_R2L: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_R2L_D2U;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_D2U_L2R: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_L2R_U2D;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_D2U_R2L: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_L2R_D2U;
break;
}
default: {
return ATK_MD0350_EINVAL;
}
}
break;
}
case ATK_MD0350_LCD_DISP_DIR_180: {
switch (scan_dir) {
case ATK_MD0350_LCD_SCAN_DIR_L2R_U2D: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_R2L_D2U;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_L2R_D2U: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_R2L_U2D;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_R2L_U2D: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_L2R_D2U;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_R2L_D2U: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_L2R_U2D;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_U2D_L2R: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_D2U_R2L;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_U2D_R2L: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_D2U_L2R;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_D2U_L2R: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_U2D_R2L;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_D2U_R2L: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_U2D_L2R;
break;
}
default: {
return ATK_MD0350_EINVAL;
}
}
break;
}
case ATK_MD0350_LCD_DISP_DIR_270: {
switch (scan_dir) {
case ATK_MD0350_LCD_SCAN_DIR_L2R_U2D: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_D2U_L2R;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_L2R_D2U: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_D2U_R2L;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_R2L_U2D: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_U2D_L2R;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_R2L_D2U: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_U2D_R2L;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_U2D_L2R: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_L2R_D2U;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_U2D_R2L: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_L2R_U2D;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_D2U_L2R: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_R2L_D2U;
break;
}
case ATK_MD0350_LCD_SCAN_DIR_D2U_R2L: {
reg36 = ATK_MD0350_LCD_SCAN_DIR_R2L_U2D;
break;
}
default: {
return ATK_MD0350_EINVAL;
}
}
break;
}
default: {
return ATK_MD0350_ERROR;
}
}
g_atk_md0350_sta.scan_dir = (atk_md0350_lcd_scan_dir_t)reg36;
atk_md0350_fsmc_write_reg(0x36, reg36);
atk_md0350_set_column_address(0, g_atk_md0350_sta.width - 1);
atk_md0350_set_page_address(0, g_atk_md0350_sta.height - 1);
return ATK_MD0350_EOK;
}
/**
* @brief 设置ATK-MD0350模块LCD显示方向
* @param disp_dir: ATK_MD0350_LCD_DISP_DIR_0 : LCD顺时针旋转0°显示内容
* ATK_MD0350_LCD_DISP_DIR_90 : LCD顺时针旋转90°显示内容
* ATK_MD0350_LCD_DISP_DIR_180: LCD顺时针旋转180°显示内容
* ATK_MD0350_LCD_DISP_DIR_270: LCD顺时针旋转270°显示内容
* @retval ATK_MD0350_EOK : 设置ATK-MD0350模块LCD显示方向成功
* ATK_MD0350_EINVAL: 传入参数错误
*/
uint8_t atk_md0350_set_disp_dir(atk_md0350_lcd_disp_dir_t disp_dir)
{
switch (disp_dir) {
case ATK_MD0350_LCD_DISP_DIR_0: {
g_atk_md0350_sta.width = ATK_MD0350_LCD_WIDTH;
g_atk_md0350_sta.height = ATK_MD0350_LCD_HEIGHT;
break;
}
case ATK_MD0350_LCD_DISP_DIR_90: {
g_atk_md0350_sta.width = ATK_MD0350_LCD_HEIGHT;
g_atk_md0350_sta.height = ATK_MD0350_LCD_WIDTH;
break;
}
case ATK_MD0350_LCD_DISP_DIR_180: {
g_atk_md0350_sta.width = ATK_MD0350_LCD_WIDTH;
g_atk_md0350_sta.height = ATK_MD0350_LCD_HEIGHT;
break;
}
case ATK_MD0350_LCD_DISP_DIR_270: {
g_atk_md0350_sta.width = ATK_MD0350_LCD_HEIGHT;
g_atk_md0350_sta.height = ATK_MD0350_LCD_WIDTH;
break;
}
default: {
return ATK_MD0350_EINVAL;
}
}
g_atk_md0350_sta.disp_dir = disp_dir;
atk_md0350_set_scan_dir(ATK_MD0350_LCD_SCAN_DIR_L2R_U2D);
return ATK_MD0350_EOK;
}
/**
* @brief 获取ATK-MD0350模块LCD扫描方向
* @param 无
* @retval ATK-MD0350模块LCD扫描方向
*/
atk_md0350_lcd_scan_dir_t atk_md0350_get_scan_dir(void)
{
return g_atk_md0350_sta.scan_dir;
}
/**
* @brief 获取ATK-MD0350模块LCD显示方向
* @param 无
* @retval ATK-MD0350模块LCD显示方向
*/
atk_md0350_lcd_disp_dir_t atk_md0350_get_disp_dir(void)
{
return g_atk_md0350_sta.disp_dir;
}
/**
* @brief ATK-MD0350模块LCD区域填充
* @param xs : 区域起始X坐标
* ys : 区域起始Y坐标
* xe : 区域终止X坐标
* ye : 区域终止Y坐标
* color: 区域填充颜色
* @retval 无
*/
void atk_md0350_fill(uint16_t xs, uint16_t ys, uint16_t xe, uint16_t ye, uint16_t color)
{
uint16_t x_index;
uint16_t y_index;
atk_md0350_set_column_address(xs, xe);
atk_md0350_set_page_address(ys, ye);
atk_md0350_start_write_memory();
for (y_index = ys; y_index <= ye; y_index++) {
for (x_index = xs; x_index <= xe; x_index++) {
atk_md0350_fsmc_write_dat(color);
}
}
}
/**
* @brief ATK-MD0350模块LCD清屏
* @param color: 清屏颜色
* @retval 无
*/
void atk_md0350_clear(uint16_t color)
{
atk_md0350_fill(0, 0, ATK_MD0350_LCD_WIDTH - 1, ATK_MD0350_LCD_HEIGHT - 1, color);
}
/**
* @brief ATK-MD0350模块LCD画点
* @param x : 待画点的X坐标
* y : 待画点的Y坐标
* color: 待画点的颜色
* @retval 无
*/
void atk_md0350_draw_point(uint16_t x, uint16_t y, uint16_t color)
{
atk_md0350_set_column_address(x, x);
atk_md0350_set_page_address(y, y);
atk_md0350_start_write_memory();
atk_md0350_fsmc_write_dat(color);
}
/**
* @brief ATK-MD0350模块LCD读点
* @param x : 待读点的X坐标
* y : 待读点的Y坐标
* @retval 待读点的颜色
*/
uint16_t atk_md0350_read_point(uint16_t x, uint16_t y)
{
uint16_t color;
uint8_t color_r;
uint8_t color_g;
uint8_t color_b;
if ((x >= g_atk_md0350_sta.width) || (y >= g_atk_md0350_sta.height)) {
return ATK_MD0350_EINVAL;
}
atk_md0350_set_column_address(x, x);
atk_md0350_set_page_address(y, y);
atk_md0350_start_read_memory();
color = atk_md0350_fsmc_read_dat(); /* Dummy */
color = atk_md0350_fsmc_read_dat(); /* [15:11]: R, [7:2]:G */
color_r = (uint8_t)(color >> 11) & 0x1F;
color_g = (uint8_t)(color >> 2) & 0x3F;
color = atk_md0350_fsmc_read_dat(); /* [15:11]: B */
color_b = (uint8_t)(color >> 11) & 0x1F;
return (uint16_t)(color_r << 11) | (color_g << 5) | color_b;
}
/**
* @brief ATK-MD0350模块LCD画线段
* @param x1 : 待画线段端点1的X坐标
* y1 : 待画线段端点1的Y坐标
* x2 : 待画线段端点2的X坐标
* y2 : 待画线段端点2的Y坐标
* color: 待画线段的颜色
* @retval 无
*/
void atk_md0350_draw_line(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
{
uint16_t x_delta;
uint16_t y_delta;
int16_t x_sign;
int16_t y_sign;
int16_t error;
int16_t error2;
x_delta = (x1 < x2) ? (x2 - x1) : (x1 - x2);
y_delta = (y1 < y2) ? (y2 - y1) : (y1 - y2);
x_sign = (x1 < x2) ? 1 : -1;
y_sign = (y1 < y2) ? 1 : -1;
error = x_delta - y_delta;
atk_md0350_draw_point(x2, y2, color);
while ((x1 != x2) || (y1 != y2)) {
atk_md0350_draw_point(x1, y1, color);
error2 = error << 1;
if (error2 > -y_delta) {
error -= y_delta;
x1 += x_sign;
}
if (error2 < x_delta) {
error += x_delta;
y1 += y_sign;
}
}
}
/**
* @brief ATK-MD0350模块LCD画矩形框
* @param x1 : 待画矩形框端点1的X坐标
* y1 : 待画矩形框端点1的Y坐标
* x2 : 待画矩形框端点2的X坐标
* y2 : 待画矩形框端点2的Y坐标
* color: 待画矩形框的颜色
* @retval 无
*/
void atk_md0350_draw_rect(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
{
atk_md0350_draw_line(x1, y1, x2, y1, color);
atk_md0350_draw_line(x1, y2, x2, y2, color);
atk_md0350_draw_line(x1, y1, x1, y2, color);
atk_md0350_draw_line(x2, y1, x2, y2, color);
}
/**
* @brief ATK-MD0350模块LCD画圆形框
* @param x : 待画圆形框原点的X坐标
* y : 待画圆形框原点的Y坐标
* r : 待画圆形框的半径
* color: 待画圆形框的颜色
* @retval 无
*/
void atk_md0350_draw_circle(uint16_t x, uint16_t y, uint16_t r, uint16_t color)
{
int32_t x_t;
int32_t y_t;
int32_t error;
int32_t error2;
x_t = -r;
y_t = 0;
error = 2 - 2 * r;
do {
atk_md0350_draw_point(x - x_t, y + y_t, color);
atk_md0350_draw_point(x + x_t, y + y_t, color);
atk_md0350_draw_point(x + x_t, y - y_t, color);
atk_md0350_draw_point(x - x_t, y - y_t, color);
error2 = error;
if (error2 <= y_t) {
y_t++;
error = error + (y_t * 2 + 1);
if ((-x_t == y_t) && (error2 <= x_t)) {
error2 = 0;
}
}
if (error2 > x_t) {
x_t++;
error = error + (x_t * 2 + 1);
}
} while (x_t <= 0);
}
/**
* @brief ATK-MD0350模块LCD显示1个字符
* @param x : 待显示字符的X坐标
* y : 待显示字符的Y坐标
* ch : 待显示字符
* font : 待显示字符的字体
* color: 待显示字符的颜色
* @retval 无
*/
void atk_md0350_show_char(uint16_t x, uint16_t y, char ch, atk_md0350_lcd_font_t font, uint16_t color)
{
const uint8_t *ch_code;
uint8_t ch_width;
uint8_t ch_height;
uint8_t ch_size;
uint8_t ch_offset;
uint8_t byte_index;
uint8_t byte_code;
uint8_t bit_index;
uint8_t width_index = 0;
uint8_t height_index = 0;
ch_offset = ch - ' ';
switch (font) {
#if (ATK_MD0350_FONT_12 != 0)
case ATK_MD0350_LCD_FONT_12: {
ch_code = atk_md0350_font_1206[ch_offset];
ch_width = ATK_MD0350_FONT_12_CHAR_WIDTH;
ch_height = ATK_MD0350_FONT_12_CHAR_HEIGHT;
ch_size = ATK_MD0350_FONT_12_CHAR_SIZE;
break;
}
#endif
#if (ATK_MD0350_FONT_16 != 0)
case ATK_MD0350_LCD_FONT_16: {
ch_code = atk_md0350_font_1608[ch_offset];
ch_width = ATK_MD0350_FONT_16_CHAR_WIDTH;
ch_height = ATK_MD0350_FONT_16_CHAR_HEIGHT;
ch_size = ATK_MD0350_FONT_16_CHAR_SIZE;
break;
}
#endif
#if (ATK_MD0350_FONT_24 != 0)
case ATK_MD0350_LCD_FONT_24: {
ch_code = atk_md0350_font_2412[ch_offset];
ch_width = ATK_MD0350_FONT_24_CHAR_WIDTH;
ch_height = ATK_MD0350_FONT_24_CHAR_HEIGHT;
ch_size = ATK_MD0350_FONT_24_CHAR_SIZE;
break;
}
#endif
#if (ATK_MD0350_FONT_32 != 0)
case ATK_MD0350_LCD_FONT_32: {
ch_code = atk_md0350_font_3216[ch_offset];
ch_width = ATK_MD0350_FONT_32_CHAR_WIDTH;
ch_height = ATK_MD0350_FONT_32_CHAR_HEIGHT;
ch_size = ATK_MD0350_FONT_32_CHAR_SIZE;
break;
}
#endif
default: {
return;
}
}
if ((x + ch_width > ATK_MD0350_LCD_WIDTH) || (y + ch_height > ATK_MD0350_LCD_HEIGHT)) {
return;
}
for (byte_index = 0; byte_index < ch_size; byte_index++) {
byte_code = ch_code[byte_index];
for (bit_index = 0; bit_index < 8; bit_index++) {
if ((byte_code & 0x80) != 0) {
atk_md0350_draw_point(x + width_index, y + height_index, color);
}
width_index++;
if (width_index == ch_width) {
width_index = 0;
height_index++;
break;
}
byte_code <<= 1;
}
}
}
/**
* @brief ATK-MD0350模块LCD显示字符串
* @note 会自动换行和换页
* @param x : 待显示字符串的X坐标
* y : 待显示字符串的Y坐标
* width : 待显示字符串的显示高度
* height: 待显示字符串的显示宽度
* str : 待显示字符串
* font : 待显示字符串的字体
* color : 待显示字符串的颜色
* @retval 无
*/
void atk_md0350_show_string(uint16_t x, uint16_t y, uint16_t width, uint16_t height, char *str, atk_md0350_lcd_font_t font, uint16_t color)
{
uint8_t ch_width;
uint8_t ch_height;
uint16_t x_raw;
uint16_t y_raw;
uint16_t x_limit;
uint16_t y_limit;
switch (font) {
#if (ATK_MD0350_FONT_12 != 0)
case ATK_MD0350_LCD_FONT_12: {
ch_width = ATK_MD0350_FONT_12_CHAR_WIDTH;
ch_height = ATK_MD0350_FONT_12_CHAR_HEIGHT;
break;
}
#endif
#if (ATK_MD0350_FONT_16 != 0)
case ATK_MD0350_LCD_FONT_16: {
ch_width = ATK_MD0350_FONT_16_CHAR_WIDTH;
ch_height = ATK_MD0350_FONT_16_CHAR_HEIGHT;
break;
}
#endif
#if (ATK_MD0350_FONT_24 != 0)
case ATK_MD0350_LCD_FONT_24: {
ch_width = ATK_MD0350_FONT_24_CHAR_WIDTH;
ch_height = ATK_MD0350_FONT_24_CHAR_HEIGHT;
break;
}
#endif
#if (ATK_MD0350_FONT_32 != 0)
case ATK_MD0350_LCD_FONT_32: {
ch_width = ATK_MD0350_FONT_32_CHAR_WIDTH;
ch_height = ATK_MD0350_FONT_32_CHAR_HEIGHT;
break;
}
#endif
default: {
return;
}
}
x_raw = x;
y_raw = y;
x_limit = ((x + width + 1) > ATK_MD0350_LCD_WIDTH) ? ATK_MD0350_LCD_WIDTH : (x + width + 1);
y_limit = ((y + height + 1) > ATK_MD0350_LCD_HEIGHT) ? ATK_MD0350_LCD_HEIGHT : (y + height + 1);
while ((*str >= ' ') && (*str <= '~')) {
if (x + ch_width >= x_limit) {
x = x_raw;
y += ch_height;
}
if (y + ch_height >= y_limit) {
y = x_raw;
x = y_raw;
}
atk_md0350_show_char(x, y, *str, font, color);
x += ch_width;
str++;
}
}
/**
* @brief ATK-MD0350模块LCD显示数字,可控制显示高位0
* @param x : 待显示数字的X坐标
* y : 待显示数字的Y坐标
* num : 待显示数字
* len : 待显示数字的位数
* mode : ATK_MD0350_NUM_SHOW_NOZERO: 数字高位0不显示
* ATK_MD0350_NUM_SHOW_ZERO : 数字高位0显示
* font : 待显示数字的字体
* color: 待显示数字的颜色
* @retval 无
*/
void atk_md0350_show_xnum(uint16_t x, uint16_t y, uint32_t num, uint8_t len, atk_md0350_num_mode_t mode, atk_md0350_lcd_font_t font, uint16_t color)
{
uint8_t ch_width;
uint8_t len_index;
uint8_t num_index;
uint8_t first_nozero = 0;
char pad;
switch (font) {
#if (ATK_MD0350_FONT_12 != 0)
case ATK_MD0350_LCD_FONT_12: {
ch_width = ATK_MD0350_FONT_12_CHAR_WIDTH;
break;
}
#endif
#if (ATK_MD0350_FONT_16 != 0)
case ATK_MD0350_LCD_FONT_16: {
ch_width = ATK_MD0350_FONT_16_CHAR_WIDTH;
break;
}
#endif
#if (ATK_MD0350_FONT_24 != 0)
case ATK_MD0350_LCD_FONT_24: {
ch_width = ATK_MD0350_FONT_24_CHAR_WIDTH;
break;
}
#endif
#if (ATK_MD0350_FONT_32 != 0)
case ATK_MD0350_LCD_FONT_32: {
ch_width = ATK_MD0350_FONT_32_CHAR_WIDTH;
break;
}
#endif
default: {
return;
}
}
switch (mode) {
case ATK_MD0350_NUM_SHOW_NOZERO: {
pad = ' ';
break;
}
case ATK_MD0350_NUM_SHOW_ZERO: {
pad = '0';
break;
}
default: {
return;
}
}
for (len_index = 0; len_index < len; len_index++) {
num_index = (num / atk_md0350_pow(10, len - len_index - 1)) % 10;
if ((first_nozero == 0) && (len_index < (len - 1))) {
if (num_index == 0) {
atk_md0350_show_char(x + ch_width * len_index, y, pad, font, color);
continue;
} else {
first_nozero = 1;
}
}
atk_md0350_show_char(x + ch_width * len_index, y, num_index + '0', font, color);
}
}
/**
* @brief ATK-MD0350模块LCD显示数字,不显示高位0
* @param x : 待显示数字的X坐标
* y : 待显示数字的Y坐标
* num : 待显示数字
* len : 待显示数字的位数
* font : 待显示数字的字体
* color: 待显示数字的颜色
* @retval 无
*/
void atk_md0350_show_num(uint16_t x, uint16_t y, uint32_t num, uint8_t len, atk_md0350_lcd_font_t font, uint16_t color)
{
atk_md0350_show_xnum(x, y, num, len, ATK_MD0350_NUM_SHOW_NOZERO, font, color);
}
/**
* @brief ATK-MD0350模块LCD图片
* @note 图片取模方式: 水平扫描、RGB565、高位在前
* @param x : 待显示图片的X坐标
* y : 待显示图片的Y坐标
* width : 待显示图片的宽度
* height: 待显示图片的高度
* pic : 待显示图片数组首地址
* @retval 无
*/
void atk_md0350_show_pic(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t *pic)
{
uint16_t x_index;
uint16_t y_index;
if ((x + width > ATK_MD0350_LCD_WIDTH) || (y + height > ATK_MD0350_LCD_HEIGHT)) {
return;
}
atk_md0350_set_column_address(x, x + width - 1);
atk_md0350_set_page_address(y, y + height - 1);
atk_md0350_start_write_memory();
for (y_index = y; y_index <= (y + height); y_index++) {
for (x_index = x; x_index <= (x + width); x_index++) {
atk_md0350_fsmc_write_dat(*pic);
pic++;
}
}
}
atk_md0350.h
/**
****************************************************************************************************
* @file atk_md0350.h
* @author 正点原子团队(ALIENTEK)
* @version V1.0
* @date 2022-06-21
* @brief ATK-MD0350模块驱动代码
* @license Copyright (c) 2020-2032, 广州市星翼电子科技有限公司
****************************************************************************************************
* @attention
*
* 实验平台:正点原子 STM32F103开发板
* 在线视频:www.yuanzige.com
* 技术论坛:www.openedv.com
* 公司网址:www.alientek.com
* 购买地址:openedv.taobao.com
*
****************************************************************************************************
*/
#ifndef __ATK_MD0350_H
#define __ATK_MD0350_H
// #include "./SYSTEM/sys/sys.h"
#include "main.h"
/* 定义ATK-MD0350模块LCD尺寸 */
#define ATK_MD0350_LCD_WIDTH 320
#define ATK_MD0350_LCD_HEIGHT 480
/* 定义是否使用ATK-MD0350模块触摸 */
#define ATK_MD0350_USING_TOUCH 0
/* 定义ATK-MD0350模块启用的字体 */
#define ATK_MD0350_FONT_12 1
#define ATK_MD0350_FONT_16 1
#define ATK_MD0350_FONT_24 1
#define ATK_MD0350_FONT_32 1
/* 默认启用触摸 */
#ifndef ATK_MD0350_USING_TOUCH
#define ATK_MD0350_USING_TOUCH 1
#endif
/* 默认启用12号字体 */
#if ((ATK_MD0350_FONT_12 == 0) && (ATK_MD0350_FONT_16 == 0) && (ATK_MD0350_FONT_24 == 0) && (ATK_MD0350_FONT_32 == 0))
#undef ATK_MD0350_FONT_12
#defien ATK_MD0350_FONT_12 1
#endif
/* 包含头文件 */
#if (ATK_MD0350_USING_TOUCH != 0)
#include "./BSP/ATK_MD0350/atk_md0350_touch.h"
#endif
/* 引脚定义 */
#define ATK_MD0350_BL_GPIO_PORT GPIOB
#define ATK_MD0350_BL_GPIO_PIN GPIO_PIN_0
#define ATK_MD0350_BL_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOB_CLK_ENABLE(); \
} while (0)
/* IO操作 */
#define ATK_MD0350_BL(x) \
do { \
x ? HAL_GPIO_WritePin(ATK_MD0350_BL_GPIO_PORT, ATK_MD0350_BL_GPIO_PIN, GPIO_PIN_SET) : HAL_GPIO_WritePin(ATK_MD0350_BL_GPIO_PORT, ATK_MD0350_BL_GPIO_PIN, GPIO_PIN_RESET); \
} while (0)
/* ATK-MD0350模块LCD扫描方向枚举 */
typedef enum {
ATK_MD0350_LCD_SCAN_DIR_L2R_U2D = 0x0000, /* 从左到右,从上到下 */
ATK_MD0350_LCD_SCAN_DIR_L2R_D2U = 0x0080, /* 从左到右,从下到上 */
ATK_MD0350_LCD_SCAN_DIR_R2L_U2D = 0x0040, /* 从右到左,从上到下 */
ATK_MD0350_LCD_SCAN_DIR_R2L_D2U = 0x00C0, /* 从右到左,从下到上 */
ATK_MD0350_LCD_SCAN_DIR_U2D_L2R = 0x0020, /* 从上到下,从左到右 */
ATK_MD0350_LCD_SCAN_DIR_U2D_R2L = 0x0060, /* 从上到下,从右到左 */
ATK_MD0350_LCD_SCAN_DIR_D2U_L2R = 0x00A0, /* 从下到上,从左到右 */
ATK_MD0350_LCD_SCAN_DIR_D2U_R2L = 0x00E0, /* 从下到上,从右到左 */
} atk_md0350_lcd_scan_dir_t;
/* ATK-MD0350模块LCD旋转方向枚举 */
typedef enum {
ATK_MD0350_LCD_DISP_DIR_0 = 0x00, /* LCD顺时针旋转0°显示内容 */
ATK_MD0350_LCD_DISP_DIR_90, /* LCD顺时针旋转90°显示内容 */
ATK_MD0350_LCD_DISP_DIR_180, /* LCD顺时针旋转180°显示内容 */
ATK_MD0350_LCD_DISP_DIR_270, /* LCD顺时针旋转270°显示内容 */
} atk_md0350_lcd_disp_dir_t;
/* ATK-MD0350模块LCD显示字体枚举 */
typedef enum {
#if (ATK_MD0350_FONT_12 != 0)
ATK_MD0350_LCD_FONT_12, /* 12号字体 */
#endif
#if (ATK_MD0350_FONT_16 != 0)
ATK_MD0350_LCD_FONT_16, /* 16号字体 */
#endif
#if (ATK_MD0350_FONT_24 != 0)
ATK_MD0350_LCD_FONT_24, /* 24号字体 */
#endif
#if (ATK_MD0350_FONT_32 != 0)
ATK_MD0350_LCD_FONT_32, /* 32号字体 */
#endif
} atk_md0350_lcd_font_t;
/* ATK-MD0350模块LCD显示数字模式枚举 */
typedef enum {
ATK_MD0350_NUM_SHOW_NOZERO = 0x00, /* 数字高位0不显示 */
ATK_MD0350_NUM_SHOW_ZERO, /* 数字高位0显示 */
} atk_md0350_num_mode_t;
/* 常用颜色定义(RGB565) */
#define ATK_MD0350_WHITE 0xFFFF
#define ATK_MD0350_BLACK 0x0000
#define ATK_MD0350_BLUE 0x001F
#define ATK_MD0350_BRED 0XF81F
#define ATK_MD0350_GRED 0XFFE0
#define ATK_MD0350_GBLUE 0X07FF
#define ATK_MD0350_RED 0xF800
#define ATK_MD0350_MAGENTA 0xF81F
#define ATK_MD0350_GREEN 0x07E0
#define ATK_MD0350_CYAN 0x7FFF
#define ATK_MD0350_YELLOW 0xFFE0
#define ATK_MD0350_BROWN 0XBC40
#define ATK_MD0350_BRRED 0XFC07
#define ATK_MD0350_GRAY 0X8430
/* 错误代码 */
#define ATK_MD0350_EOK 0 /* 没有错误 */
#define ATK_MD0350_ERROR 1 /* 错误 */
#define ATK_MD0350_EINVAL 2 /* 非法参数 */
/* 操作函数 */
uint8_t atk_md0350_init(void); /* ATK-MD0350模块初始化 */
uint16_t atk_md0350_get_lcd_width(void); /* 获取ATK-MD0350模块LCD宽度 */
uint16_t atk_md0350_get_lcd_height(void); /* 获取ATK-MD0350模块LCD高度 */
void atk_md0350_backlight_on(void); /* 开启ATK-MD0350模块LCD背光 */
void atk_md0350_backlight_off(void); /* 关闭ATK-MD0350模块LCD背光 */
void atk_md0350_display_on(void); /* 开启ATK-MD0350模块LCD显示 */
void atk_md0350_display_off(void); /* 关闭ATK-MD0350模块LCD显示 */
uint8_t atk_md0350_set_scan_dir(atk_md0350_lcd_scan_dir_t scan_dir); /* 设置ATK-MD0350模块LCD扫描方向 */
uint8_t atk_md0350_set_disp_dir(atk_md0350_lcd_disp_dir_t disp_dir); /* 设置ATK-MD0350模块LCD显示方向 */
atk_md0350_lcd_scan_dir_t atk_md0350_get_scan_dir(void); /* 获取ATK-MD0350模块LCD扫描方向 */
atk_md0350_lcd_disp_dir_t atk_md0350_get_disp_dir(void); /* 获取ATK-MD0350模块LCD显示方向 */
void atk_md0350_fill(uint16_t xs, uint16_t ys, uint16_t xe, uint16_t ye, uint16_t color); /* ATK-MD0350模块LCD区域填充 */
void atk_md0350_clear(uint16_t color); /* ATK-MD0350模块LCD清屏 */
void atk_md0350_draw_point(uint16_t x, uint16_t y, uint16_t color); /* ATK-MD0350模块LCD画点 */
uint16_t atk_md0350_read_point(uint16_t x, uint16_t y); /* ATK-MD0350模块LCD读点 */
void atk_md0350_draw_line(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); /* ATK-MD0350模块LCD画线段 */
void atk_md0350_draw_rect(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); /* ATK-MD0350模块LCD画矩形框 */
void atk_md0350_draw_circle(uint16_t x, uint16_t y, uint16_t r, uint16_t color); /* ATK-MD0350模块LCD画圆形框 */
void atk_md0350_show_char(uint16_t x, uint16_t y, char ch, atk_md0350_lcd_font_t font, uint16_t color); /* ATK-MD0350模块LCD显示1个字符 */
void atk_md0350_show_string(uint16_t x, uint16_t y, uint16_t width, uint16_t height, char *str, atk_md0350_lcd_font_t font, uint16_t color); /* ATK-MD0350模块LCD显示字符串 */
void atk_md0350_show_xnum(uint16_t x, uint16_t y, uint32_t num, uint8_t len, atk_md0350_num_mode_t mode, atk_md0350_lcd_font_t font, uint16_t color); /* ATK-MD0350模块LCD显示数字,可控制显示高位0 */
void atk_md0350_show_num(uint16_t x, uint16_t y, uint32_t num, uint8_t len, atk_md0350_lcd_font_t font, uint16_t color); /* ATK-MD0350模块LCD显示数字,不显示高位0 */
void atk_md0350_show_pic(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t *pic); /* ATK-MD0350模块LCD图片 */
#endif
atk_md0350_font.h
/**
****************************************************************************************************
* @file atk_md0350_font.h
* @author 正点原子团队(ALIENTEK)
* @version V1.0
* @date 2022-06-21
* @brief ATK-MD0350模块体取模文件
* @license Copyright (c) 2020-2032, 广州市星翼电子科技有限公司
****************************************************************************************************
* @attention
*
* 实验平台:正点原子 STM32F103开发板
* 在线视频:www.yuanzige.com
* 技术论坛:www.openedv.com
* 公司网址:www.alientek.com
* 购买地址:openedv.taobao.com
*
****************************************************************************************************
*/
#ifndef __ATK_MD0350_FONT_H
#define __ATK_MD0350_FONT_H
#include "atk_md0350.h"
/* 常用ASCII表
* 偏移量32
* ASCII字符集: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
* PC2LCD2002取模方式设置:阴码+逐列式+顺向+C51格式
* 总共:4个字符集(12*12、16*16、24*24和32*32),用户可以自行新增其他分辨率的字符集。
* 每个字符所占用的字节数为:(size/8+((size%8)?1:0))*(size/2),其中size:是字库生成时的点阵大小(12/16/24/32...)
*/
#if (ATK_MD0350_FONT_12 != 0)
#define ATK_MD0350_FONT_12_CHAR_WIDTH 6
#define ATK_MD0350_FONT_12_CHAR_HEIGHT 12
#define ATK_MD0350_FONT_12_CHAR_SIZE 12
/* 12*6 ASCII字符点阵 */
const uint8_t atk_md0350_font_1206[95][ATK_MD0350_FONT_12_CHAR_SIZE] = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* " ",0 */
{0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00}, /* "!",1 */
{0x28, 0x28, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* """,2 */
{0x00, 0x00, 0x50, 0x50, 0xF8, 0x50, 0x50, 0xF8, 0x50, 0x50, 0x00, 0x00}, /* "#",3 */
{0x00, 0x20, 0x70, 0xA8, 0xA0, 0x60, 0x30, 0x28, 0xA8, 0x70, 0x20, 0x00}, /* "$",4 */
{0x00, 0x00, 0x48, 0xA8, 0xB0, 0xA8, 0x74, 0x34, 0x54, 0x48, 0x00, 0x00}, /* "%",5 */
{0x00, 0x00, 0x20, 0x50, 0x50, 0x6C, 0xA8, 0xA8, 0x94, 0x68, 0x00, 0x00}, /* "&",6 */
{0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "'",7 */
{0x08, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x08, 0x00}, /* "(",8 */
{0x40, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x00}, /* ")",9 */
{0x00, 0x00, 0x00, 0x20, 0xA8, 0x70, 0x70, 0xA8, 0x20, 0x00, 0x00, 0x00}, /* "*",10 */
{0x00, 0x00, 0x00, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, /* "+",11 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x80, 0x00}, /* ",",12 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "-",13 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00}, /* ".",14 */
{0x00, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x00}, /* "/",15 */
{0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00}, /* "0",16 */
{0x00, 0x00, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00, 0x00}, /* "1",17 */
{0x00, 0x00, 0x70, 0x88, 0x88, 0x10, 0x20, 0x40, 0x80, 0xF8, 0x00, 0x00}, /* "2",18 */
{0x00, 0x00, 0x70, 0x88, 0x08, 0x30, 0x08, 0x08, 0x88, 0x70, 0x00, 0x00}, /* "3",19 */
{0x00, 0x00, 0x10, 0x30, 0x30, 0x50, 0x90, 0xF8, 0x10, 0x38, 0x00, 0x00}, /* "4",20 */
{0x00, 0x00, 0xF8, 0x80, 0x80, 0xF0, 0x88, 0x08, 0x88, 0x70, 0x00, 0x00}, /* "5",21 */
{0x00, 0x00, 0x30, 0x48, 0x80, 0xB0, 0xC8, 0x88, 0x88, 0x70, 0x00, 0x00}, /* "6",22 */
{0x00, 0x00, 0x78, 0x08, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00}, /* "7",23 */
{0x00, 0x00, 0x70, 0x88, 0x88, 0x70, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00}, /* "8",24 */
{0x00, 0x00, 0x70, 0x88, 0x88, 0x98, 0x68, 0x08, 0x90, 0x60, 0x00, 0x00}, /* "9",25 */
{0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00}, /* ":",26 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00}, /* ";",27 */
{0x00, 0x00, 0x08, 0x10, 0x20, 0x40, 0x40, 0x20, 0x10, 0x08, 0x00, 0x00}, /* "<",28 */
{0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "=",29 */
{0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00}, /* ">",30 */
{0x00, 0x00, 0x70, 0x88, 0x88, 0x10, 0x20, 0x20, 0x00, 0x20, 0x00, 0x00}, /* "?",31 */
{0x00, 0x00, 0x38, 0x44, 0x94, 0xB4, 0xB4, 0xB8, 0x44, 0x38, 0x00, 0x00}, /* "@",32 */
{0x00, 0x00, 0x20, 0x20, 0x30, 0x50, 0x50, 0x78, 0x48, 0xCC, 0x00, 0x00}, /* "A",33 */
{0x00, 0x00, 0xF0, 0x48, 0x48, 0x70, 0x48, 0x48, 0x48, 0xF0, 0x00, 0x00}, /* "B",34 */
{0x00, 0x00, 0x78, 0x88, 0x80, 0x80, 0x80, 0x80, 0x88, 0x70, 0x00, 0x00}, /* "C",35 */
{0x00, 0x00, 0xF0, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0xF0, 0x00, 0x00}, /* "D",36 */
{0x00, 0x00, 0xF8, 0x48, 0x50, 0x70, 0x50, 0x40, 0x48, 0xF8, 0x00, 0x00}, /* "E",37 */
{0x00, 0x00, 0xF8, 0x48, 0x50, 0x70, 0x50, 0x40, 0x40, 0xE0, 0x00, 0x00}, /* "F",38 */
{0x00, 0x00, 0x38, 0x48, 0x80, 0x80, 0x9C, 0x88, 0x48, 0x30, 0x00, 0x00}, /* "G",39 */
{0x00, 0x00, 0xCC, 0x48, 0x48, 0x78, 0x48, 0x48, 0x48, 0xCC, 0x00, 0x00}, /* "H",40 */
{0x00, 0x00, 0xF8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xF8, 0x00, 0x00}, /* "I",41 */
{0x00, 0x00, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x90, 0xE0}, /* "J",42 */
{0x00, 0x00, 0xEC, 0x48, 0x50, 0x60, 0x50, 0x48, 0x48, 0xEC, 0x00, 0x00}, /* "K",43 */
{0x00, 0x00, 0xE0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x44, 0xFC, 0x00, 0x00}, /* "L",44 */
{0x00, 0x00, 0xDC, 0xD8, 0xD8, 0xD8, 0xA8, 0xA8, 0xA8, 0xAC, 0x00, 0x00}, /* "M",45 */
{0x00, 0x00, 0xDC, 0x48, 0x68, 0x68, 0x58, 0x58, 0x48, 0xE8, 0x00, 0x00}, /* "N",46 */
{0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00}, /* "O",47 */
{0x00, 0x00, 0xF0, 0x48, 0x48, 0x70, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x00}, /* "P",48 */
{0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0xE8, 0x98, 0x70, 0x18, 0x00}, /* "Q",49 */
{0x00, 0x00, 0xF0, 0x48, 0x48, 0x70, 0x50, 0x48, 0x48, 0xEC, 0x00, 0x00}, /* "R",50 */
{0x00, 0x00, 0x78, 0x88, 0x80, 0x60, 0x10, 0x08, 0x88, 0xF0, 0x00, 0x00}, /* "S",51 */
{0x00, 0x00, 0xF8, 0xA8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00, 0x00}, /* "T",52 */
{0x00, 0x00, 0xCC, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x30, 0x00, 0x00}, /* "U",53 */
{0x00, 0x00, 0xCC, 0x48, 0x48, 0x50, 0x50, 0x30, 0x20, 0x20, 0x00, 0x00}, /* "V",54 */
{0x00, 0x00, 0xA8, 0xA8, 0xA8, 0xA8, 0x70, 0x50, 0x50, 0x50, 0x00, 0x00}, /* "W",55 */
{0x00, 0x00, 0xD8, 0x50, 0x50, 0x20, 0x20, 0x50, 0x50, 0xD8, 0x00, 0x00}, /* "X",56 */
{0x00, 0x00, 0xD8, 0x50, 0x50, 0x50, 0x20, 0x20, 0x20, 0x70, 0x00, 0x00}, /* "Y",57 */
{0x00, 0x00, 0xF8, 0x90, 0x10, 0x20, 0x20, 0x40, 0x48, 0xF8, 0x00, 0x00}, /* "Z",58 */
{0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x38, 0x00}, /* "[",59 */
{0x00, 0x40, 0x40, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x08, 0x08, 0x00}, /* "\",60 */
{0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x70, 0x00}, /* "]",61 */
{0x20, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "^",62 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC}, /* "_",63 */
{0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "`",64 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x48, 0x38, 0x48, 0x3C, 0x00, 0x00}, /* "a",65 */
{0x00, 0xC0, 0x40, 0x40, 0x40, 0x70, 0x48, 0x48, 0x48, 0x70, 0x00, 0x00}, /* "b",66 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x48, 0x40, 0x48, 0x30, 0x00, 0x00}, /* "c",67 */
{0x00, 0x18, 0x08, 0x08, 0x08, 0x38, 0x48, 0x48, 0x48, 0x3C, 0x00, 0x00}, /* "d",68 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x48, 0x78, 0x40, 0x38, 0x00, 0x00}, /* "e",69 */
{0x00, 0x18, 0x24, 0x20, 0x20, 0x78, 0x20, 0x20, 0x20, 0x78, 0x00, 0x00}, /* "f",70 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x48, 0x30, 0x40, 0x38, 0x44, 0x38}, /* "g",71 */
{0x00, 0xC0, 0x40, 0x40, 0x40, 0x70, 0x48, 0x48, 0x48, 0xEC, 0x00, 0x00}, /* "h",72 */
{0x00, 0x20, 0x20, 0x00, 0x00, 0x60, 0x20, 0x20, 0x20, 0x70, 0x00, 0x00}, /* "i",73 */
{0x00, 0x10, 0x10, 0x00, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0xE0}, /* "j",74 */
{0x00, 0xC0, 0x40, 0x40, 0x40, 0x58, 0x50, 0x60, 0x50, 0xC8, 0x00, 0x00}, /* "k",75 */
{0x00, 0xE0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xF8, 0x00, 0x00}, /* "l",76 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xA8, 0xA8, 0xA8, 0xA8, 0x00, 0x00}, /* "m",77 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x48, 0x48, 0x48, 0xEC, 0x00, 0x00}, /* "n",78 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x48, 0x48, 0x48, 0x30, 0x00, 0x00}, /* "o",79 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x48, 0x48, 0x48, 0x70, 0x40, 0xE0}, /* "p",80 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x48, 0x48, 0x48, 0x38, 0x08, 0x1C}, /* "q",81 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x60, 0x40, 0x40, 0xE0, 0x00, 0x00}, /* "r",82 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x40, 0x30, 0x08, 0x78, 0x00, 0x00}, /* "s",83 */
{0x00, 0x00, 0x00, 0x20, 0x20, 0x78, 0x20, 0x20, 0x20, 0x38, 0x00, 0x00}, /* "t",84 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x48, 0x48, 0x48, 0x3C, 0x00, 0x00}, /* "u",85 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x50, 0x50, 0x20, 0x20, 0x00, 0x00}, /* "v",86 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xA8, 0x70, 0x50, 0x50, 0x00, 0x00}, /* "w",87 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x50, 0x20, 0x50, 0xD8, 0x00, 0x00}, /* "x",88 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x48, 0x48, 0x30, 0x10, 0x20, 0xC0}, /* "y",89 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x10, 0x20, 0x20, 0x78, 0x00, 0x00}, /* "z",90 */
{0x18, 0x10, 0x10, 0x10, 0x10, 0x30, 0x10, 0x10, 0x10, 0x10, 0x18, 0x00}, /* "{",91 */
{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}, /* "|",92 */
{0x60, 0x20, 0x20, 0x20, 0x20, 0x10, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00}, /* "}",93 */
{0x68, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "~",94 */
};
#endif /* ATK_MD0350_FONT_12 */
#if (ATK_MD0350_FONT_16 != 0)
#define ATK_MD0350_FONT_16_CHAR_WIDTH 8
#define ATK_MD0350_FONT_16_CHAR_HEIGHT 16
#define ATK_MD0350_FONT_16_CHAR_SIZE 16
/* 16*8 ASCII字符点阵 */
const uint8_t atk_md0350_font_1608[95][ATK_MD0350_FONT_16_CHAR_SIZE] = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* " ",0 */
{0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00}, /* "!",1 */
{0x00, 0x12, 0x24, 0x24, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* """,2 */
{0x00, 0x00, 0x00, 0x12, 0x12, 0x12, 0x7E, 0x24, 0x24, 0x24, 0x7E, 0x24, 0x24, 0x24, 0x00, 0x00}, /* "#",3 */
{0x00, 0x00, 0x08, 0x3C, 0x4A, 0x4A, 0x48, 0x38, 0x0C, 0x0A, 0x0A, 0x4A, 0x4A, 0x3C, 0x08, 0x08}, /* "$",4 */
{0x00, 0x00, 0x00, 0x44, 0xA4, 0xA8, 0xA8, 0xB0, 0x54, 0x1A, 0x2A, 0x2A, 0x4A, 0x44, 0x00, 0x00}, /* "%",5 */
{0x00, 0x00, 0x00, 0x30, 0x48, 0x48, 0x48, 0x50, 0x6E, 0xA4, 0x94, 0x98, 0x89, 0x76, 0x00, 0x00}, /* "&",6 */
{0x00, 0x60, 0x20, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "'",7 */
{0x00, 0x02, 0x04, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x04, 0x02, 0x00}, /* "(",8 */
{0x00, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00}, /* ")",9 */
{0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0xD6, 0x38, 0x38, 0xD6, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, /* "*",10 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x7F, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00}, /* "+",11 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x20, 0x40}, /* ",",12 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "-",13 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00}, /* ".",14 */
{0x00, 0x00, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x00}, /* "/",15 */
{0x00, 0x00, 0x00, 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, 0x00}, /* "0",16 */
{0x00, 0x00, 0x00, 0x08, 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3E, 0x00, 0x00}, /* "1",17 */
{0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x02, 0x04, 0x08, 0x10, 0x20, 0x42, 0x7E, 0x00, 0x00}, /* "2",18 */
{0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x02, 0x04, 0x18, 0x04, 0x02, 0x42, 0x42, 0x3C, 0x00, 0x00}, /* "3",19 */
{0x00, 0x00, 0x00, 0x04, 0x0C, 0x0C, 0x14, 0x24, 0x24, 0x44, 0x7F, 0x04, 0x04, 0x1F, 0x00, 0x00}, /* "4",20 */
{0x00, 0x00, 0x00, 0x7E, 0x40, 0x40, 0x40, 0x78, 0x44, 0x02, 0x02, 0x42, 0x44, 0x38, 0x00, 0x00}, /* "5",21 */
{0x00, 0x00, 0x00, 0x18, 0x24, 0x40, 0x40, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x22, 0x1C, 0x00, 0x00}, /* "6",22 */
{0x00, 0x00, 0x00, 0x7E, 0x42, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00}, /* "7",23 */
{0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x24, 0x18, 0x24, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00}, /* "8",24 */
{0x00, 0x00, 0x00, 0x38, 0x44, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x02, 0x02, 0x24, 0x18, 0x00, 0x00}, /* "9",25 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00}, /* ":",26 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10}, /* ";",27 */
{0x00, 0x00, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00}, /* "<",28 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "=",29 */
{0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00}, /* ">",30 */
{0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x62, 0x04, 0x08, 0x08, 0x08, 0x00, 0x18, 0x18, 0x00, 0x00}, /* "?",31 */
{0x00, 0x00, 0x00, 0x38, 0x44, 0x5A, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x5C, 0x42, 0x3C, 0x00, 0x00}, /* "@",32 */
{0x00, 0x00, 0x00, 0x10, 0x10, 0x18, 0x28, 0x28, 0x24, 0x3C, 0x44, 0x42, 0x42, 0xE7, 0x00, 0x00}, /* "A",33 */
{0x00, 0x00, 0x00, 0xF8, 0x44, 0x44, 0x44, 0x78, 0x44, 0x42, 0x42, 0x42, 0x44, 0xF8, 0x00, 0x00}, /* "B",34 */
{0x00, 0x00, 0x00, 0x3E, 0x42, 0x42, 0x80, 0x80, 0x80, 0x80, 0x80, 0x42, 0x44, 0x38, 0x00, 0x00}, /* "C",35 */
{0x00, 0x00, 0x00, 0xF8, 0x44, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x44, 0xF8, 0x00, 0x00}, /* "D",36 */
{0x00, 0x00, 0x00, 0xFC, 0x42, 0x48, 0x48, 0x78, 0x48, 0x48, 0x40, 0x42, 0x42, 0xFC, 0x00, 0x00}, /* "E",37 */
{0x00, 0x00, 0x00, 0xFC, 0x42, 0x48, 0x48, 0x78, 0x48, 0x48, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x00}, /* "F",38 */
{0x00, 0x00, 0x00, 0x3C, 0x44, 0x44, 0x80, 0x80, 0x80, 0x8E, 0x84, 0x44, 0x44, 0x38, 0x00, 0x00}, /* "G",39 */
{0x00, 0x00, 0x00, 0xE7, 0x42, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x42, 0xE7, 0x00, 0x00}, /* "H",40 */
{0x00, 0x00, 0x00, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00}, /* "I",41 */
{0x00, 0x00, 0x00, 0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x88, 0xF0}, /* "J",42 */
{0x00, 0x00, 0x00, 0xEE, 0x44, 0x48, 0x50, 0x70, 0x50, 0x48, 0x48, 0x44, 0x44, 0xEE, 0x00, 0x00}, /* "K",43 */
{0x00, 0x00, 0x00, 0xE0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x42, 0xFE, 0x00, 0x00}, /* "L",44 */
{0x00, 0x00, 0x00, 0xEE, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x54, 0x54, 0x54, 0x54, 0xD6, 0x00, 0x00}, /* "M",45 */
{0x00, 0x00, 0x00, 0xC7, 0x62, 0x62, 0x52, 0x52, 0x4A, 0x4A, 0x4A, 0x46, 0x46, 0xE2, 0x00, 0x00}, /* "N",46 */
{0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00}, /* "O",47 */
{0x00, 0x00, 0x00, 0xFC, 0x42, 0x42, 0x42, 0x42, 0x7C, 0x40, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x00}, /* "P",48 */
{0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0xB2, 0x4C, 0x38, 0x06, 0x00}, /* "Q",49 */
{0x00, 0x00, 0x00, 0xFC, 0x42, 0x42, 0x42, 0x7C, 0x48, 0x48, 0x44, 0x44, 0x42, 0xE3, 0x00, 0x00}, /* "R",50 */
{0x00, 0x00, 0x00, 0x3E, 0x42, 0x42, 0x40, 0x20, 0x18, 0x04, 0x02, 0x42, 0x42, 0x7C, 0x00, 0x00}, /* "S",51 */
{0x00, 0x00, 0x00, 0xFE, 0x92, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00}, /* "T",52 */
{0x00, 0x00, 0x00, 0xE7, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00}, /* "U",53 */
{0x00, 0x00, 0x00, 0xE7, 0x42, 0x42, 0x44, 0x24, 0x24, 0x28, 0x28, 0x18, 0x10, 0x10, 0x00, 0x00}, /* "V",54 */
{0x00, 0x00, 0x00, 0xD6, 0x54, 0x54, 0x54, 0x54, 0x54, 0x6C, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00}, /* "W",55 */
{0x00, 0x00, 0x00, 0xE7, 0x42, 0x24, 0x24, 0x18, 0x18, 0x18, 0x24, 0x24, 0x42, 0xE7, 0x00, 0x00}, /* "X",56 */
{0x00, 0x00, 0x00, 0xEE, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00}, /* "Y",57 */
{0x00, 0x00, 0x00, 0x7E, 0x84, 0x04, 0x08, 0x08, 0x10, 0x20, 0x20, 0x42, 0x42, 0xFC, 0x00, 0x00}, /* "Z",58 */
{0x00, 0x1E, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1E, 0x00}, /* "[",59 */
{0x00, 0x00, 0x40, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02}, /* "\",60 */
{0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x78, 0x00}, /* "]",61 */
{0x00, 0x18, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "^",62 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, /* "_",63 */
{0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "`",64 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x0C, 0x34, 0x44, 0x4C, 0x36, 0x00, 0x00}, /* "a",65 */
{0x00, 0x00, 0x00, 0x00, 0xC0, 0x40, 0x40, 0x58, 0x64, 0x42, 0x42, 0x42, 0x64, 0x58, 0x00, 0x00}, /* "b",66 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x40, 0x40, 0x40, 0x22, 0x1C, 0x00, 0x00}, /* "c",67 */
{0x00, 0x00, 0x00, 0x00, 0x06, 0x02, 0x02, 0x3E, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3B, 0x00, 0x00}, /* "d",68 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x7E, 0x40, 0x42, 0x3C, 0x00, 0x00}, /* "e",69 */
{0x00, 0x00, 0x00, 0x00, 0x0C, 0x12, 0x10, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00}, /* "f",70 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x44, 0x44, 0x38, 0x40, 0x3C, 0x42, 0x42, 0x3C}, /* "g",71 */
{0x00, 0x00, 0x00, 0x00, 0xC0, 0x40, 0x40, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x42, 0xE7, 0x00, 0x00}, /* "h",72 */
{0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00}, /* "i",73 */
{0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x1C, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x44, 0x78}, /* "j",74 */
{0x00, 0x00, 0x00, 0x00, 0xC0, 0x40, 0x40, 0x4E, 0x48, 0x50, 0x70, 0x48, 0x44, 0xEE, 0x00, 0x00}, /* "k",75 */
{0x00, 0x00, 0x00, 0x10, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00}, /* "l",76 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x49, 0x49, 0x49, 0x49, 0x49, 0xED, 0x00, 0x00}, /* "m",77 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x62, 0x42, 0x42, 0x42, 0x42, 0xE7, 0x00, 0x00}, /* "n",78 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00}, /* "o",79 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x64, 0x42, 0x42, 0x42, 0x64, 0x58, 0x40, 0xE0}, /* "p",80 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x26, 0x42, 0x42, 0x42, 0x26, 0x1A, 0x02, 0x07}, /* "q",81 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x32, 0x20, 0x20, 0x20, 0x20, 0xF8, 0x00, 0x00}, /* "r",82 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x42, 0x40, 0x3C, 0x02, 0x42, 0x7C, 0x00, 0x00}, /* "s",83 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x12, 0x0C, 0x00, 0x00}, /* "t",84 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3B, 0x00, 0x00}, /* "u",85 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0x00, 0x00}, /* "v",86 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0x89, 0x4A, 0x5A, 0x54, 0x24, 0x24, 0x00, 0x00}, /* "w",87 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x24, 0x18, 0x18, 0x18, 0x24, 0x6E, 0x00, 0x00}, /* "x",88 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x42, 0x24, 0x24, 0x18, 0x18, 0x10, 0x10, 0x60}, /* "y",89 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x44, 0x08, 0x10, 0x10, 0x22, 0x7E, 0x00, 0x00}, /* "z",90 */
{0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x00}, /* "{",91 */
{0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08}, /* "|",92 */
{0x00, 0xC0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0xC0, 0x00}, /* "}",93 */
{0x20, 0x5A, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "~",94 */
};
#endif /* ATK_MD0350_FONT_16 */
#if (ATK_MD0350_FONT_24 != 0)
#define ATK_MD0350_FONT_24_CHAR_WIDTH 12
#define ATK_MD0350_FONT_24_CHAR_HEIGHT 24
#define ATK_MD0350_FONT_24_CHAR_SIZE 48
/* 24*12 ASCII字符点阵 */
const uint8_t atk_md0350_font_2412[95][ATK_MD0350_FONT_24_CHAR_SIZE] = {
{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}, /* " ",0 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "!",1 */
{0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x06, 0x60, 0x0C, 0xC0, 0x19, 0x80, 0x11, 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, 0x00, 0x00, 0x00, 0x00}, /* """,2 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x08, 0x40, 0x08, 0x40, 0x08, 0x40, 0x7F, 0xE0, 0x7F, 0xE0, 0x10, 0x40, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x7F, 0xE0, 0x7F, 0xE0, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "#",3 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x0F, 0x80, 0x1A, 0xC0, 0x32, 0xC0, 0x33, 0xC0, 0x32, 0x00, 0x1A, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x02, 0xC0, 0x32, 0xC0, 0x3A, 0xC0, 0x32, 0xC0, 0x12, 0x80, 0x0F, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00}, /* "$",4 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x50, 0x80, 0x89, 0x00, 0x89, 0x00, 0x89, 0x00, 0x8A, 0x00, 0x8A, 0x00, 0x5C, 0x00, 0x75, 0xC0, 0x05, 0x40, 0x0A, 0x20, 0x0A, 0x20, 0x12, 0x20, 0x12, 0x20, 0x12, 0x20, 0x21, 0x40, 0x21, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "%",5 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x36, 0x00, 0x36, 0x00, 0x36, 0x00, 0x36, 0x00, 0x36, 0x00, 0x34, 0x00, 0x19, 0xE0, 0x38, 0x80, 0x58, 0x80, 0xCC, 0x80, 0xCC, 0x80, 0xC6, 0x80, 0xC7, 0x00, 0xC3, 0x10, 0x63, 0x90, 0x3C, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "&",6 */
{0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x38, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "'",7 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00}, /* "(",8 */
{0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00}, /* ")",9 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x00, 0x62, 0x30, 0x72, 0xF0, 0x0B, 0x80, 0x0F, 0x80, 0x7A, 0xF0, 0x62, 0x30, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "*",10 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x7F, 0xF0, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "+",11 */
{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, 0x30, 0x00, 0x38, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00}, /* ",",12 */
{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, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "-",13 */
{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, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* ".",14 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x60, 0x00, 0x40, 0x00, 0xC0, 0x00, 0x80, 0x00, 0x80, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x06, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x40, 0x00, 0x00, 0x00}, /* "/",15 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x19, 0x80, 0x30, 0xC0, 0x30, 0xC0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0xC0, 0x30, 0xC0, 0x19, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "0",16 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x3E, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "1",17 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x21, 0x80, 0x40, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x00, 0xC0, 0x00, 0x80, 0x01, 0x80, 0x03, 0x00, 0x06, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x40, 0x20, 0x40, 0x60, 0x40, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "2",18 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x63, 0x00, 0x61, 0x80, 0x61, 0x80, 0x01, 0x80, 0x01, 0x80, 0x03, 0x00, 0x0E, 0x00, 0x01, 0x80, 0x00, 0x80, 0x00, 0xC0, 0x00, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x61, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "3",19 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x03, 0x80, 0x05, 0x80, 0x05, 0x80, 0x09, 0x80, 0x11, 0x80, 0x11, 0x80, 0x21, 0x80, 0x41, 0x80, 0x7F, 0xF0, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "4",20 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x31, 0x80, 0x20, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x41, 0x80, 0x21, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "5",21 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x18, 0xC0, 0x30, 0xC0, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x67, 0x80, 0x68, 0xC0, 0x70, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x20, 0x60, 0x30, 0x40, 0x18, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "6",22 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x30, 0x60, 0x20, 0x40, 0x20, 0x80, 0x00, 0x80, 0x00, 0x80, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "7",23 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x30, 0xC0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x40, 0x38, 0xC0, 0x0F, 0x00, 0x13, 0x80, 0x30, 0xC0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0xC0, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "8",24 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x30, 0x80, 0x30, 0xC0, 0x60, 0x40, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xE0, 0x31, 0x60, 0x1E, 0x60, 0x00, 0x60, 0x00, 0xC0, 0x00, 0xC0, 0x30, 0x80, 0x31, 0x80, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "9",25 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* ":",26 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00}, /* ";",27 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "<",28 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "=",29 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* ">",30 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x18, 0x60, 0x20, 0x30, 0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xE0, 0x01, 0x80, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "?",31 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x18, 0xC0, 0x30, 0x40, 0x33, 0xA0, 0x26, 0xA0, 0x66, 0xA0, 0x65, 0xA0, 0x6D, 0x20, 0x6D, 0x20, 0x6D, 0x20, 0x6D, 0x20, 0x6D, 0x40, 0x27, 0x80, 0x30, 0x20, 0x30, 0x40, 0x18, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "@",32 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x09, 0x00, 0x09, 0x00, 0x11, 0x00, 0x11, 0x80, 0x10, 0x80, 0x1F, 0x80, 0x20, 0xC0, 0x20, 0xC0, 0x20, 0x40, 0x40, 0x40, 0x40, 0x60, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "A",33 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x31, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x31, 0x80, 0x3F, 0x00, 0x30, 0xC0, 0x30, 0x40, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0xC0, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "B",34 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x18, 0xC0, 0x30, 0x60, 0x30, 0x20, 0x20, 0x20, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x20, 0x30, 0x20, 0x30, 0x40, 0x18, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "C",35 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x31, 0x80, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0xC0, 0x30, 0xC0, 0x31, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "D",36 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x60, 0xC0, 0x60, 0x20, 0x60, 0x20, 0x60, 0x00, 0x61, 0x00, 0x61, 0x00, 0x7F, 0x00, 0x61, 0x00, 0x61, 0x00, 0x61, 0x00, 0x60, 0x00, 0x60, 0x20, 0x60, 0x20, 0x60, 0x40, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "E",37 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x60, 0xC0, 0x60, 0x20, 0x60, 0x20, 0x60, 0x00, 0x61, 0x00, 0x61, 0x00, 0x7F, 0x00, 0x61, 0x00, 0x61, 0x00, 0x61, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "F",38 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x18, 0x80, 0x30, 0x40, 0x30, 0x40, 0x20, 0x40, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x63, 0xF0, 0x60, 0xC0, 0x60, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x18, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "G",39 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7F, 0xE0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "H",40 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "I",41 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x63, 0x00, 0x66, 0x00, 0x3C, 0x00}, /* "J",42 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xC0, 0x61, 0x80, 0x63, 0x00, 0x62, 0x00, 0x64, 0x00, 0x68, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x76, 0x00, 0x62, 0x00, 0x63, 0x00, 0x61, 0x00, 0x61, 0x80, 0x60, 0x80, 0x60, 0xC0, 0xF1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "K",43 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x20, 0x60, 0x20, 0x60, 0x40, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "L",44 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x61, 0xC0, 0x61, 0xC0, 0x71, 0xC0, 0x71, 0xC0, 0x72, 0xC0, 0x72, 0xC0, 0x52, 0xC0, 0x5A, 0xC0, 0x5A, 0xC0, 0x5C, 0xC0, 0x4C, 0xC0, 0x4C, 0xC0, 0x4C, 0xC0, 0x48, 0xC0, 0xE1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "M",45 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xF0, 0x30, 0x40, 0x38, 0x40, 0x38, 0x40, 0x2C, 0x40, 0x2C, 0x40, 0x26, 0x40, 0x26, 0x40, 0x22, 0x40, 0x23, 0x40, 0x21, 0x40, 0x21, 0xC0, 0x21, 0xC0, 0x20, 0xC0, 0x20, 0xC0, 0xF8, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "N",46 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x19, 0x80, 0x30, 0xC0, 0x30, 0x40, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x40, 0x30, 0xC0, 0x19, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "O",47 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x60, 0xC0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x61, 0xC0, 0x7F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "P",48 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x19, 0x80, 0x30, 0xC0, 0x30, 0x40, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x6E, 0x60, 0x32, 0x40, 0x33, 0xC0, 0x19, 0x80, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0xC0, 0x00, 0x00}, /* "Q",49 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x60, 0xC0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xC0, 0x7F, 0x00, 0x62, 0x00, 0x63, 0x00, 0x61, 0x00, 0x61, 0x80, 0x60, 0xC0, 0x60, 0xC0, 0x60, 0x60, 0xF0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "R",50 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x40, 0x30, 0xC0, 0x60, 0x40, 0x60, 0x40, 0x60, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xC0, 0x00, 0xE0, 0x40, 0x60, 0x40, 0x60, 0x60, 0x60, 0x30, 0xC0, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "S",51 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x46, 0x20, 0x86, 0x10, 0x86, 0x10, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "T",52 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xE0, 0x30, 0x40, 0x30, 0x40, 0x30, 0x40, 0x30, 0x40, 0x30, 0x40, 0x30, 0x40, 0x30, 0x40, 0x30, 0x40, 0x30, 0x40, 0x30, 0x40, 0x30, 0x40, 0x30, 0x40, 0x30, 0x40, 0x18, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "U",53 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xE0, 0x60, 0x40, 0x20, 0x80, 0x20, 0x80, 0x30, 0x80, 0x30, 0x80, 0x11, 0x00, 0x11, 0x00, 0x19, 0x00, 0x19, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0x0E, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "V",54 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x70, 0x46, 0x20, 0x42, 0x20, 0x62, 0x20, 0x62, 0x20, 0x26, 0x40, 0x26, 0x40, 0x27, 0x40, 0x27, 0x40, 0x39, 0x40, 0x39, 0x80, 0x19, 0x80, 0x19, 0x80, 0x11, 0x80, 0x11, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "W",55 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xE0, 0x30, 0x80, 0x10, 0x80, 0x18, 0x80, 0x09, 0x00, 0x0D, 0x00, 0x06, 0x00, 0x04, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0B, 0x00, 0x09, 0x00, 0x11, 0x80, 0x10, 0x80, 0x20, 0xC0, 0x71, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "X",56 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0x60, 0x20, 0x20, 0x40, 0x30, 0x40, 0x10, 0x80, 0x18, 0x80, 0x1D, 0x00, 0x0D, 0x00, 0x0E, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "Y",57 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x30, 0x40, 0x60, 0xC0, 0x40, 0x80, 0x01, 0x80, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x18, 0x00, 0x10, 0x20, 0x30, 0x20, 0x20, 0x40, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "Z",58 */
{0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x07, 0xC0, 0x00, 0x00}, /* "[",59 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x20}, /* "\",60 */
{0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x3E, 0x00, 0x00, 0x00}, /* "]",61 */
{0x00, 0x00, 0x06, 0x00, 0x09, 0x00, 0x10, 0x80, 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}, /* "^",62 */
{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, 0xFF, 0xF0}, /* "_",63 */
{0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x06, 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}, /* "`",64 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x30, 0xC0, 0x30, 0xC0, 0x00, 0xC0, 0x07, 0xC0, 0x38, 0xC0, 0x70, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x71, 0xD0, 0x3E, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "a",65 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x70, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x33, 0x80, 0x3C, 0xC0, 0x38, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x40, 0x38, 0xC0, 0x27, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "b",66 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x31, 0x80, 0x31, 0x80, 0x61, 0x80, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x40, 0x30, 0x40, 0x30, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "c",67 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x03, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x1E, 0xC0, 0x31, 0xC0, 0x30, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x20, 0xC0, 0x31, 0xE0, 0x1E, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "d",68 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x18, 0xC0, 0x10, 0x40, 0x30, 0x60, 0x30, 0x60, 0x3F, 0xE0, 0x30, 0x00, 0x30, 0x00, 0x18, 0x20, 0x18, 0x40, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "e",69 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x06, 0x60, 0x0C, 0x60, 0x0C, 0x00, 0x0C, 0x00, 0x7F, 0x80, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "f",70 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x1B, 0x60, 0x31, 0x80, 0x31, 0x80, 0x31, 0x80, 0x19, 0x80, 0x1F, 0x00, 0x30, 0x00, 0x3F, 0x00, 0x33, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x71, 0xC0, 0x1F, 0x00}, /* "g",71 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x70, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x37, 0x80, 0x38, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "h",72 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x3E, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "i",73 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x33, 0x00, 0x3E, 0x00}, /* "j",74 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x70, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0xC0, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x3A, 0x00, 0x31, 0x00, 0x31, 0x80, 0x30, 0x80, 0x30, 0xC0, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "k",75 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x3E, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "l",76 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xE0, 0x77, 0x60, 0x66, 0x60, 0x66, 0x60, 0x66, 0x60, 0x66, 0x60, 0x66, 0x60, 0x66, 0x60, 0x66, 0x60, 0x66, 0x60, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "m",77 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x80, 0x38, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "n",78 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x19, 0x80, 0x30, 0xC0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0xC0, 0x30, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "o",79 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x80, 0x38, 0xC0, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0xC0, 0x38, 0xC0, 0x37, 0x80, 0x30, 0x00, 0x30, 0x00, 0x7C, 0x00}, /* "p",80 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x40, 0x31, 0xC0, 0x30, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x20, 0xC0, 0x31, 0xC0, 0x1E, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x03, 0xE0}, /* "q",81 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xC0, 0x1A, 0x60, 0x1C, 0x60, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "r",82 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x38, 0xC0, 0x30, 0x40, 0x30, 0x40, 0x1C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x20, 0xC0, 0x20, 0xC0, 0x31, 0xC0, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "s",83 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x7F, 0x80, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x40, 0x0C, 0x40, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "t",84 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x71, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x39, 0xE0, 0x1E, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "u",85 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xE0, 0x30, 0x40, 0x10, 0x80, 0x10, 0x80, 0x18, 0x80, 0x09, 0x00, 0x0D, 0x00, 0x0D, 0x00, 0x06, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "v",86 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x70, 0x46, 0x20, 0x62, 0x20, 0x26, 0x40, 0x26, 0x40, 0x37, 0x40, 0x39, 0x80, 0x19, 0x80, 0x19, 0x80, 0x19, 0x80, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "w",87 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xE0, 0x18, 0x80, 0x08, 0x80, 0x0D, 0x00, 0x06, 0x00, 0x06, 0x00, 0x07, 0x00, 0x09, 0x00, 0x10, 0x80, 0x10, 0xC0, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "x",88 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xE0, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x09, 0x00, 0x09, 0x00, 0x0D, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x04, 0x00, 0x04, 0x00, 0x24, 0x00, 0x38, 0x00}, /* "y",89 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x21, 0x80, 0x23, 0x00, 0x22, 0x00, 0x06, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x18, 0x40, 0x10, 0x40, 0x30, 0xC0, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "z",90 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xC0, 0x00, 0x00}, /* "{",91 */
{0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00}, /* "|",92 */
{0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x30, 0x00, 0x00, 0x00}, /* "}",93 */
{0x00, 0x00, 0x38, 0x00, 0x44, 0x20, 0x43, 0x20, 0x01, 0xC0, 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}, /* "~",94 */
};
#endif /* ATK_MD0350_FONT_24 */
#if (ATK_MD0350_FONT_32 != 0)
#define ATK_MD0350_FONT_32_CHAR_WIDTH 16
#define ATK_MD0350_FONT_32_CHAR_HEIGHT 32
#define ATK_MD0350_FONT_32_CHAR_SIZE 64
/* 32*16 ASCII字符点阵 */
const uint8_t atk_md0350_font_3216[95][ATK_MD0350_FONT_32_CHAR_SIZE] = {
{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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* " ",0 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0xC0, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "!",1 */
{0x00, 0x00, 0x00, 0x00, 0x03, 0x18, 0x07, 0x38, 0x07, 0x38, 0x0E, 0x70, 0x0C, 0x60, 0x18, 0xC0, 0x31, 0x80, 0x21, 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}, /* """,2 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x18, 0x30, 0x10, 0x20, 0x10, 0x20, 0x10, 0x20, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "#",3 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x03, 0xC0, 0x0D, 0x30, 0x09, 0x18, 0x19, 0x18, 0x19, 0x38, 0x19, 0x38, 0x1D, 0x00, 0x0D, 0x00, 0x0F, 0x00, 0x07, 0x00, 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xF0, 0x01, 0x30, 0x01, 0x38, 0x01, 0x18, 0x39, 0x18, 0x39, 0x18, 0x31, 0x18, 0x31, 0x30, 0x19, 0x60, 0x07, 0xC0, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00}, /* "$",4 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x10, 0x6C, 0x10, 0x44, 0x20, 0xC6, 0x20, 0xC6, 0x40, 0xC6, 0x40, 0xC6, 0x40, 0xC6, 0x80, 0xC6, 0x80, 0x44, 0x80, 0x6D, 0x38, 0x39, 0x6C, 0x02, 0x44, 0x02, 0xC6, 0x02, 0xC6, 0x04, 0xC6, 0x04, 0xC6, 0x08, 0xC6, 0x08, 0xC6, 0x08, 0x44, 0x10, 0x6C, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "%",5 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x19, 0x00, 0x31, 0x80, 0x31, 0x80, 0x31, 0x80, 0x31, 0x80, 0x31, 0x00, 0x33, 0x00, 0x3A, 0x00, 0x1C, 0x00, 0x38, 0x7C, 0x3C, 0x10, 0x4C, 0x10, 0xCE, 0x10, 0xC6, 0x20, 0xC7, 0x20, 0xC3, 0x20, 0xC1, 0xC0, 0xC1, 0xC2, 0x60, 0xE6, 0x31, 0x7C, 0x1E, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "&",6 */
{0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x08, 0x00, 0x30, 0x00, 0x60, 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}, /* "'",7 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x18, 0x00, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x40, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x40, 0x00, 0x60, 0x00, 0x20, 0x00, 0x30, 0x00, 0x18, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00}, /* "(",8 */
{0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x06, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00}, /* ")",9 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x30, 0xC6, 0x38, 0x8E, 0x1C, 0x9C, 0x06, 0xB0, 0x01, 0xC0, 0x01, 0xC0, 0x06, 0xB0, 0x1C, 0x9C, 0x38, 0x8E, 0x31, 0x86, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "*",10 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x3F, 0xFE, 0x00, 0x80, 0x00, 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}, /* "+",11 */
{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, 0x38, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x08, 0x00, 0x30, 0x00, 0x60, 0x00}, /* ",",12 */
{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, 0xFE, 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}, /* "-",13 */
{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, 0x18, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* ".",14 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x08, 0x00, 0x18, 0x00, 0x10, 0x00, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x40, 0x00, 0xC0, 0x00, 0x80, 0x01, 0x80, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x06, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x08, 0x00, 0x18, 0x00, 0x10, 0x00, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "/",15 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x06, 0x20, 0x0C, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x08, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x18, 0x08, 0x18, 0x18, 0x18, 0x18, 0x0C, 0x30, 0x06, 0x20, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "0",16 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x1F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x03, 0xC0, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "1",17 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x08, 0x38, 0x10, 0x18, 0x20, 0x0C, 0x20, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x02, 0x00, 0x04, 0x04, 0x08, 0x04, 0x10, 0x04, 0x20, 0x0C, 0x3F, 0xF8, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "2",18 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x18, 0x60, 0x30, 0x30, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x03, 0xC0, 0x00, 0x70, 0x00, 0x18, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x08, 0x30, 0x18, 0x18, 0x30, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "3",19 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xE0, 0x01, 0x60, 0x01, 0x60, 0x02, 0x60, 0x04, 0x60, 0x04, 0x60, 0x08, 0x60, 0x08, 0x60, 0x10, 0x60, 0x30, 0x60, 0x20, 0x60, 0x40, 0x60, 0x7F, 0xFC, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "4",20 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x0F, 0xFC, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x13, 0xE0, 0x14, 0x30, 0x18, 0x18, 0x10, 0x08, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x20, 0x18, 0x20, 0x18, 0x18, 0x30, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "5",21 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x06, 0x18, 0x0C, 0x18, 0x08, 0x18, 0x18, 0x00, 0x10, 0x00, 0x10, 0x00, 0x30, 0x00, 0x33, 0xE0, 0x36, 0x30, 0x38, 0x18, 0x38, 0x08, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x18, 0x0C, 0x18, 0x08, 0x0C, 0x18, 0x0E, 0x30, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "6",22 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x1F, 0xFC, 0x10, 0x08, 0x30, 0x10, 0x20, 0x10, 0x20, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x80, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "7",23 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x0C, 0x30, 0x18, 0x18, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x38, 0x0C, 0x38, 0x08, 0x1E, 0x18, 0x0F, 0x20, 0x07, 0xC0, 0x18, 0xF0, 0x30, 0x78, 0x30, 0x38, 0x60, 0x1C, 0x60, 0x0C, 0x60, 0x0C, 0x60, 0x0C, 0x60, 0x0C, 0x30, 0x18, 0x18, 0x30, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "8",24 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x18, 0x20, 0x30, 0x10, 0x30, 0x18, 0x60, 0x08, 0x60, 0x0C, 0x60, 0x0C, 0x60, 0x0C, 0x60, 0x0C, 0x60, 0x0C, 0x70, 0x1C, 0x30, 0x2C, 0x18, 0x6C, 0x0F, 0x8C, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x18, 0x00, 0x10, 0x30, 0x30, 0x30, 0x60, 0x30, 0xC0, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "9",25 */
{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, 0x01, 0x80, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* ":",26 */
{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, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x01, 0x80, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00}, /* ";",27 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "<",28 */
{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, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "=",29 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* ">",30 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x0C, 0x18, 0x18, 0x0C, 0x10, 0x06, 0x30, 0x06, 0x38, 0x06, 0x38, 0x06, 0x38, 0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x70, 0x00, 0xC0, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "?",31 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x06, 0x10, 0x0C, 0x08, 0x18, 0x04, 0x30, 0xD4, 0x31, 0xB2, 0x21, 0x32, 0x63, 0x32, 0x63, 0x22, 0x66, 0x22, 0x66, 0x22, 0x66, 0x22, 0x66, 0x62, 0x66, 0x64, 0x66, 0x64, 0x26, 0xE8, 0x33, 0x30, 0x30, 0x02, 0x10, 0x04, 0x18, 0x0C, 0x0C, 0x18, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "@",32 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x04, 0xC0, 0x04, 0xC0, 0x04, 0xC0, 0x04, 0xC0, 0x0C, 0x40, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x20, 0x1F, 0xF0, 0x10, 0x30, 0x10, 0x30, 0x10, 0x30, 0x20, 0x18, 0x20, 0x18, 0x20, 0x18, 0x60, 0x1C, 0xF8, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "A",33 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x18, 0x38, 0x18, 0x18, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x18, 0x18, 0x30, 0x1F, 0xE0, 0x18, 0x18, 0x18, 0x0C, 0x18, 0x04, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x0C, 0x18, 0x18, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "B",34 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x06, 0x1C, 0x08, 0x0C, 0x18, 0x06, 0x30, 0x02, 0x30, 0x02, 0x30, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x30, 0x02, 0x30, 0x02, 0x10, 0x04, 0x18, 0x08, 0x0C, 0x10, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "C",35 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x18, 0x70, 0x18, 0x18, 0x18, 0x08, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x04, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x60, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "D",36 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x18, 0x0C, 0x18, 0x04, 0x18, 0x02, 0x18, 0x02, 0x18, 0x00, 0x18, 0x00, 0x18, 0x10, 0x18, 0x10, 0x18, 0x30, 0x1F, 0xF0, 0x18, 0x30, 0x18, 0x10, 0x18, 0x10, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x02, 0x18, 0x02, 0x18, 0x04, 0x18, 0x0C, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "E",37 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x18, 0x1C, 0x18, 0x04, 0x18, 0x02, 0x18, 0x02, 0x18, 0x00, 0x18, 0x00, 0x18, 0x10, 0x18, 0x10, 0x18, 0x30, 0x1F, 0xF0, 0x18, 0x30, 0x18, 0x10, 0x18, 0x10, 0x18, 0x10, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "F",38 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x0C, 0x30, 0x08, 0x10, 0x18, 0x18, 0x30, 0x08, 0x30, 0x08, 0x20, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x7E, 0x60, 0x18, 0x60, 0x18, 0x20, 0x18, 0x30, 0x18, 0x30, 0x18, 0x10, 0x18, 0x18, 0x18, 0x0C, 0x20, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "G",39 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x3F, 0xFC, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "H",40 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "I",41 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x70, 0x60, 0x70, 0xC0, 0x71, 0x80, 0x3F, 0x00}, /* "J",42 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7C, 0x18, 0x30, 0x18, 0x20, 0x18, 0x60, 0x18, 0x40, 0x18, 0x80, 0x18, 0x80, 0x19, 0x00, 0x19, 0x00, 0x1B, 0x00, 0x1D, 0x80, 0x1D, 0x80, 0x18, 0xC0, 0x18, 0xC0, 0x18, 0x60, 0x18, 0x60, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "K",43 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x02, 0x18, 0x02, 0x18, 0x04, 0x18, 0x0C, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "L",44 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x4C, 0x2C, 0x4C, 0x26, 0x4C, 0x26, 0x4C, 0x26, 0x4C, 0x26, 0x8C, 0x22, 0x8C, 0x23, 0x8C, 0x23, 0x8C, 0x23, 0x0C, 0x23, 0x0C, 0x21, 0x0C, 0xF1, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "M",45 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x38, 0x04, 0x38, 0x04, 0x2C, 0x04, 0x2C, 0x04, 0x26, 0x04, 0x26, 0x04, 0x23, 0x04, 0x23, 0x04, 0x21, 0x84, 0x21, 0x84, 0x20, 0xC4, 0x20, 0xC4, 0x20, 0x64, 0x20, 0x64, 0x20, 0x34, 0x20, 0x34, 0x20, 0x1C, 0x20, 0x1C, 0x20, 0x0C, 0x20, 0x0C, 0xF8, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "N",46 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x0C, 0x30, 0x18, 0x18, 0x10, 0x08, 0x30, 0x0C, 0x30, 0x0C, 0x60, 0x04, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x20, 0x06, 0x30, 0x0C, 0x30, 0x0C, 0x10, 0x08, 0x18, 0x18, 0x0C, 0x30, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "O",47 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x18, 0x18, 0x18, 0x0C, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x0C, 0x18, 0x18, 0x1F, 0xE0, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "P",48 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x0C, 0x30, 0x18, 0x18, 0x10, 0x08, 0x30, 0x0C, 0x30, 0x0C, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x27, 0x84, 0x38, 0xCC, 0x38, 0x6C, 0x18, 0x78, 0x0C, 0x70, 0x03, 0xE0, 0x00, 0x32, 0x00, 0x3C, 0x00, 0x1C, 0x00, 0x00}, /* "Q",49 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x18, 0x38, 0x18, 0x18, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x18, 0x18, 0x30, 0x1F, 0xE0, 0x18, 0xC0, 0x18, 0xC0, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "R",50 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC8, 0x18, 0x78, 0x30, 0x18, 0x60, 0x18, 0x60, 0x08, 0x60, 0x08, 0x60, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x78, 0x00, 0x18, 0x00, 0x1C, 0x40, 0x0C, 0x40, 0x0C, 0x60, 0x0C, 0x20, 0x0C, 0x30, 0x18, 0x38, 0x30, 0x27, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "S",51 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x31, 0x84, 0x21, 0x86, 0x41, 0x82, 0x41, 0x82, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "T",52 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3E, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x30, 0x08, 0x18, 0x10, 0x1C, 0x20, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "U",53 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x1E, 0x18, 0x0C, 0x18, 0x08, 0x18, 0x08, 0x18, 0x08, 0x0C, 0x10, 0x0C, 0x10, 0x0C, 0x10, 0x0C, 0x10, 0x0C, 0x20, 0x06, 0x20, 0x06, 0x20, 0x06, 0x20, 0x06, 0x40, 0x03, 0x40, 0x03, 0x40, 0x03, 0x40, 0x03, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "V",54 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xCF, 0x61, 0x86, 0x61, 0x84, 0x21, 0x84, 0x20, 0x84, 0x30, 0xC4, 0x31, 0xC4, 0x31, 0xC4, 0x31, 0xC8, 0x31, 0xC8, 0x11, 0xC8, 0x12, 0x48, 0x1A, 0x68, 0x1A, 0x68, 0x1A, 0x70, 0x1C, 0x70, 0x0C, 0x70, 0x0C, 0x70, 0x0C, 0x30, 0x0C, 0x20, 0x08, 0x20, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "W",55 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x3E, 0x18, 0x08, 0x18, 0x10, 0x0C, 0x10, 0x0C, 0x20, 0x06, 0x20, 0x06, 0x40, 0x03, 0x40, 0x03, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xC0, 0x02, 0xC0, 0x02, 0x60, 0x04, 0x60, 0x04, 0x70, 0x08, 0x30, 0x08, 0x30, 0x18, 0x18, 0x10, 0x1C, 0x7C, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "X",56 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x3E, 0x38, 0x08, 0x18, 0x08, 0x18, 0x10, 0x0C, 0x10, 0x0C, 0x10, 0x0C, 0x20, 0x06, 0x20, 0x06, 0x20, 0x03, 0x40, 0x03, 0x40, 0x03, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "Y",57 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x1C, 0x0C, 0x18, 0x0C, 0x30, 0x18, 0x20, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0x60, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0x80, 0x01, 0x80, 0x03, 0x00, 0x03, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x18, 0x02, 0x18, 0x06, 0x30, 0x04, 0x30, 0x1C, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "Z",58 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00}, /* "[",59 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x06, 0x00, 0x02, 0x00, 0x03, 0x00, 0x01, 0x00, 0x01, 0x80, 0x01, 0x80, 0x00, 0x80, 0x00, 0xC0, 0x00, 0x40, 0x00, 0x60, 0x00, 0x60, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x18, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x06, 0x00, 0x00}, /* "\",60 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00}, /* "]",61 */
{0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x03, 0xE0, 0x06, 0x20, 0x08, 0x10, 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, 0x00}, /* "^",62 */
{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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}, /* "_",63 */
{0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x03, 0x00, 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, 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}, /* "`",64 */
{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, 0x07, 0xE0, 0x18, 0x30, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x00, 0x38, 0x07, 0xD8, 0x1C, 0x18, 0x30, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60, 0x19, 0x30, 0x79, 0x1F, 0x8E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "a",65 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x78, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x19, 0xE0, 0x1A, 0x38, 0x1C, 0x18, 0x1C, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x08, 0x1C, 0x18, 0x1C, 0x30, 0x13, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "b",66 */
{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, 0x03, 0xE0, 0x0E, 0x10, 0x0C, 0x18, 0x18, 0x18, 0x30, 0x18, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x04, 0x18, 0x04, 0x18, 0x08, 0x0C, 0x10, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "c",67 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x78, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x07, 0xD8, 0x0C, 0x38, 0x18, 0x18, 0x18, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x10, 0x18, 0x18, 0x38, 0x0C, 0x5E, 0x07, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "d",68 */
{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, 0x03, 0xC0, 0x0C, 0x30, 0x08, 0x18, 0x18, 0x08, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x3F, 0xFC, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x18, 0x04, 0x18, 0x08, 0x0E, 0x18, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "e",69 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x01, 0x86, 0x01, 0x06, 0x03, 0x06, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x3F, 0xF8, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "f",70 */
{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, 0x03, 0xEE, 0x0C, 0x36, 0x08, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x08, 0x18, 0x0C, 0x30, 0x0F, 0xE0, 0x18, 0x00, 0x18, 0x00, 0x1F, 0xC0, 0x0F, 0xF8, 0x18, 0x1C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x18, 0x18, 0x07, 0xE0}, /* "g",71 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x78, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x19, 0xE0, 0x1A, 0x30, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "h",72 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x03, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "i",73 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x78, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0xF0, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x18, 0x60, 0x18, 0x40, 0x0F, 0x80}, /* "j",74 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x78, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x7C, 0x18, 0x30, 0x18, 0x20, 0x18, 0x40, 0x18, 0x80, 0x19, 0x80, 0x1B, 0x80, 0x1E, 0xC0, 0x1C, 0xC0, 0x18, 0x60, 0x18, 0x30, 0x18, 0x30, 0x18, 0x18, 0x18, 0x1C, 0x7E, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "k",75 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "l",76 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xEF, 0x3C, 0x71, 0xC6, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0xF3, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "m",77 */
{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, 0x09, 0xE0, 0x7A, 0x30, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "n",78 */
{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, 0x03, 0xC0, 0x0C, 0x30, 0x08, 0x18, 0x18, 0x18, 0x10, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x18, 0x18, 0x18, 0x18, 0x0C, 0x30, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "o",79 */
{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, 0x09, 0xE0, 0x7A, 0x30, 0x1C, 0x18, 0x18, 0x08, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x0C, 0x18, 0x18, 0x1C, 0x18, 0x1E, 0x30, 0x19, 0xE0, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x7E, 0x00}, /* "p",80 */
{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, 0x03, 0xC8, 0x0C, 0x78, 0x18, 0x38, 0x18, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x10, 0x18, 0x18, 0x38, 0x0C, 0x78, 0x07, 0x98, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x7E}, /* "q",81 */
{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, 0x06, 0x1C, 0x7E, 0x66, 0x06, 0x86, 0x07, 0x80, 0x07, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "r",82 */
{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, 0x03, 0xE4, 0x06, 0x1C, 0x0C, 0x0C, 0x0C, 0x04, 0x0C, 0x04, 0x0E, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x78, 0x00, 0x1C, 0x10, 0x0C, 0x10, 0x0C, 0x18, 0x0C, 0x1C, 0x18, 0x13, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "s",83 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x03, 0x00, 0x07, 0x00, 0x3F, 0xF8, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x04, 0x03, 0x04, 0x01, 0x88, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "t",84 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x78, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x0C, 0x5E, 0x07, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "u",85 */
{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, 0x7C, 0x3E, 0x18, 0x0C, 0x18, 0x08, 0x18, 0x18, 0x0C, 0x10, 0x0C, 0x10, 0x04, 0x20, 0x06, 0x20, 0x06, 0x20, 0x03, 0x40, 0x03, 0x40, 0x03, 0xC0, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "v",86 */
{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, 0xFB, 0xCF, 0x61, 0x86, 0x21, 0x84, 0x31, 0x84, 0x31, 0x84, 0x31, 0xC8, 0x11, 0xC8, 0x1A, 0xC8, 0x1A, 0x48, 0x1A, 0x70, 0x0E, 0x70, 0x0C, 0x70, 0x0C, 0x30, 0x0C, 0x20, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "w",87 */
{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, 0x3E, 0x7C, 0x0C, 0x10, 0x0E, 0x10, 0x06, 0x20, 0x03, 0x40, 0x03, 0x40, 0x01, 0x80, 0x01, 0x80, 0x01, 0xC0, 0x02, 0x60, 0x04, 0x60, 0x04, 0x30, 0x08, 0x18, 0x18, 0x18, 0x7C, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "x",88 */
{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, 0x7C, 0x3E, 0x18, 0x18, 0x18, 0x10, 0x08, 0x10, 0x0C, 0x10, 0x04, 0x20, 0x06, 0x20, 0x06, 0x20, 0x02, 0x40, 0x03, 0x40, 0x01, 0x40, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x3E, 0x00, 0x3C, 0x00}, /* "y",89 */
{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, 0x3F, 0xF8, 0x30, 0x38, 0x30, 0x30, 0x20, 0x60, 0x20, 0xE0, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x80, 0x03, 0x00, 0x06, 0x00, 0x0E, 0x04, 0x0C, 0x04, 0x18, 0x0C, 0x30, 0x18, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* "z",90 */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xC0, 0x01, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x10, 0x00, 0x0C, 0x00, 0x00}, /* "{",91 */
{0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80}, /* "|",92 */
{0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x80, 0x00, 0xC0, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00}, /* "}",93 */
{0x00, 0x00, 0x1E, 0x00, 0x23, 0x00, 0x41, 0x82, 0x40, 0x82, 0x00, 0xE4, 0x00, 0x38, 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}, /* "~",94 */
};
#endif /* ATK_MD0350_FONT_32 */
#endif
atk_md0350_fsmc.c
/**
****************************************************************************************************
* @file atk_md0350_fsmc.c
* @author 正点原子团队(ALIENTEK)
* @version V1.0
* @date 2022-06-21
* @brief ATK-MD0350模块FSMC接口驱动代码
* @license Copyright (c) 2020-2032, 广州市星翼电子科技有限公司
****************************************************************************************************
* @attention
*
* 实验平台:正点原子 STM32F103开发板
* 在线视频:www.yuanzige.com
* 技术论坛:www.openedv.com
* 公司网址:www.alientek.com
* 购买地址:openedv.taobao.com
*
****************************************************************************************************
*/
#include "atk_md0350_fsmc.h"
/* ATK-MD0350模块FSMC句柄 */
static SRAM_HandleTypeDef g_sram_handle = {0};
/**
* @brief ATK-MD0350模块FSMC接口初始化
* @param 无
* @retval 无
*/
void atk_md0350_fsmc_init(void)
{
GPIO_InitTypeDef gpio_init_struct = {0};
FSMC_NORSRAM_TimingTypeDef read_timing = {0};
FSMC_NORSRAM_TimingTypeDef write_timing = {0};
/* 使能时钟 */
ATK_MD0350_FSMC_CLK_ENABLE();
ATK_MD0350_FSMC_RS_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_CS_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_RD_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_WR_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D0_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D1_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D2_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D3_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D4_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D5_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D6_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D7_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D8_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D9_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D10_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D11_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D12_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D13_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D14_GPIO_CLK_ENABLE();
ATK_MD0350_FSMC_D15_GPIO_CLK_ENABLE();
/* 初始化RS引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_RS_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_RS_GPIO_PORT, &gpio_init_struct);
/* 初始化CS引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_CS_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_CS_GPIO_PORT, &gpio_init_struct);
/* 初始化RD引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_RD_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_RD_GPIO_PORT, &gpio_init_struct);
/* 初始化WR引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_WR_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_WR_GPIO_PORT, &gpio_init_struct);
/* 初始化D0引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D0_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D0_GPIO_PORT, &gpio_init_struct);
/* 初始化D1引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D1_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D1_GPIO_PORT, &gpio_init_struct);
/* 初始化D2引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D2_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D2_GPIO_PORT, &gpio_init_struct);
/* 初始化D3引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D3_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D3_GPIO_PORT, &gpio_init_struct);
/* 初始化D4引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D4_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D4_GPIO_PORT, &gpio_init_struct);
/* 初始化D5引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D5_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D5_GPIO_PORT, &gpio_init_struct);
/* 初始化D6引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D6_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D6_GPIO_PORT, &gpio_init_struct);
/* 初始化D7引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D7_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D7_GPIO_PORT, &gpio_init_struct);
/* 初始化D8引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D8_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D8_GPIO_PORT, &gpio_init_struct);
/* 初始化D9引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D9_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D9_GPIO_PORT, &gpio_init_struct);
/* 初始化D10引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D10_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D10_GPIO_PORT, &gpio_init_struct);
/* 初始化D11引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D11_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D11_GPIO_PORT, &gpio_init_struct);
/* 初始化D12引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D12_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D12_GPIO_PORT, &gpio_init_struct);
/* 初始化D13引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D13_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D13_GPIO_PORT, &gpio_init_struct);
/* 初始化D14引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D14_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D14_GPIO_PORT, &gpio_init_struct);
/* 初始化D15引脚 */
gpio_init_struct.Pin = ATK_MD0350_FSMC_D15_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MD0350_FSMC_D15_GPIO_PORT, &gpio_init_struct);
/* FSMC配置 */
g_sram_handle.Instance = FSMC_NORSRAM_DEVICE;
g_sram_handle.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
g_sram_handle.Init.NSBank = ATK_MD0350_FSMC_BANK;
g_sram_handle.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
g_sram_handle.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM;
g_sram_handle.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;
g_sram_handle.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;
g_sram_handle.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
g_sram_handle.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
g_sram_handle.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
g_sram_handle.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;
g_sram_handle.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
g_sram_handle.Init.ExtendedMode = FSMC_EXTENDED_MODE_ENABLE;
g_sram_handle.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
g_sram_handle.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;
/* FSMC读时序配置 */
read_timing.AddressSetupTime = ATK_MD0350_FSMC_READ_AST;
read_timing.DataSetupTime = ATK_MD0350_FSMC_READ_DST;
read_timing.BusTurnAroundDuration = 0;
read_timing.AccessMode = FSMC_ACCESS_MODE_A;
/* FSMC写时序配置 */
write_timing.AddressSetupTime = ATK_MD0350_FSMC_WRITE_AST;
write_timing.DataSetupTime = ATK_MD0350_FSMC_WRITE_DST;
write_timing.BusTurnAroundDuration = 0;
write_timing.AccessMode = FSMC_ACCESS_MODE_A;
/* 初始化FSMC */
HAL_SRAM_Init(&g_sram_handle, &read_timing, &write_timing);
}
atk_md0350_fsmc.h
/**
****************************************************************************************************
* @file atk_md0350_fsmc.h
* @author 正点原子团队(ALIENTEK)
* @version V1.0
* @date 2022-06-21
* @brief ATK-MD0350模块FSMC接口驱动代码
* @license Copyright (c) 2020-2032, 广州市星翼电子科技有限公司
****************************************************************************************************
* @attention
*
* 实验平台:正点原子 STM32F103开发板
* 在线视频:www.yuanzige.com
* 技术论坛:www.openedv.com
* 公司网址:www.alientek.com
* 购买地址:openedv.taobao.com
*
****************************************************************************************************
*/
#ifndef __ATK_MD0350_FSMC_H
#define __ATK_MD0350_FSMC_H
// #include "./SYSTEM/sys/sys.h"
#include "main.h"
/* ATK-MD0350模块FSMC接口定义 */
#define ATK_MD0350_FSMC_BANK FSMC_NORSRAM_BANK4 /* ATK-MD0350模块所接FSMC的Bank */
#define ATK_MD0350_FSMC_BANK_ADDR (0x6C000000)
#define ATK_MD0350_FSMC_REG_SEL (10)
#define ATK_MD0350_FSMC_READ_AST 0x00 /* 读时序的地址建立时间,单位:HCLK */
#define ATK_MD0350_FSMC_READ_DST 0x0F /* 读时序的数据建立时间,单位:HCLK */
#define ATK_MD0350_FSMC_WRITE_AST 0x00 /* 写时序的地址建立时间,单位:HCLK */
#define ATK_MD0350_FSMC_WRITE_DST 0x01 /* 写时序的数据建立时间,单位:HCLK */
#define ATK_MD0350_FSMC_CLK_ENABLE() \
do { \
__HAL_RCC_FSMC_CLK_ENABLE(); \
} while (0) /* ATK-MD0350模块所接FSMC时钟使能 */
/* ATK-MD0350模块FSMC接口读写命令、数据地址 */
#define ATK_MD0350_FSMC_CMD_ADDR (ATK_MD0350_FSMC_BANK_ADDR | (((1U << ATK_MD0350_FSMC_REG_SEL) - 1) << 1))
#define ATK_MD0350_FSMC_DAT_ADDR (ATK_MD0350_FSMC_BANK_ADDR | ((1U << ATK_MD0350_FSMC_REG_SEL) << 1))
/* ATK-MD0350模块FSMC接口读写命令、数据 */
#define ATK_MD0350_FSMC_CMD_REG (*(volatile uint16_t *)ATK_MD0350_FSMC_CMD_ADDR)
#define ATK_MD0350_FSMC_DAT_REG (*(volatile uint16_t *)ATK_MD0350_FSMC_DAT_ADDR)
/* 引脚定义 */
#define ATK_MD0350_FSMC_RS_GPIO_PORT GPIOG
#define ATK_MD0350_FSMC_RS_GPIO_PIN GPIO_PIN_0
#define ATK_MD0350_FSMC_RS_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOG_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_CS_GPIO_PORT GPIOG
#define ATK_MD0350_FSMC_CS_GPIO_PIN GPIO_PIN_12
#define ATK_MD0350_FSMC_CS_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOG_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_RD_GPIO_PORT GPIOD
#define ATK_MD0350_FSMC_RD_GPIO_PIN GPIO_PIN_4
#define ATK_MD0350_FSMC_RD_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOD_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_WR_GPIO_PORT GPIOD
#define ATK_MD0350_FSMC_WR_GPIO_PIN GPIO_PIN_5
#define ATK_MD0350_FSMC_WR_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOD_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D0_GPIO_PORT GPIOD
#define ATK_MD0350_FSMC_D0_GPIO_PIN GPIO_PIN_14
#define ATK_MD0350_FSMC_D0_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOD_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D1_GPIO_PORT GPIOD
#define ATK_MD0350_FSMC_D1_GPIO_PIN GPIO_PIN_15
#define ATK_MD0350_FSMC_D1_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOD_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D2_GPIO_PORT GPIOD
#define ATK_MD0350_FSMC_D2_GPIO_PIN GPIO_PIN_0
#define ATK_MD0350_FSMC_D2_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOD_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D3_GPIO_PORT GPIOD
#define ATK_MD0350_FSMC_D3_GPIO_PIN GPIO_PIN_1
#define ATK_MD0350_FSMC_D3_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOD_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D4_GPIO_PORT GPIOE
#define ATK_MD0350_FSMC_D4_GPIO_PIN GPIO_PIN_7
#define ATK_MD0350_FSMC_D4_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOE_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D5_GPIO_PORT GPIOE
#define ATK_MD0350_FSMC_D5_GPIO_PIN GPIO_PIN_8
#define ATK_MD0350_FSMC_D5_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOE_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D6_GPIO_PORT GPIOE
#define ATK_MD0350_FSMC_D6_GPIO_PIN GPIO_PIN_9
#define ATK_MD0350_FSMC_D6_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOE_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D7_GPIO_PORT GPIOE
#define ATK_MD0350_FSMC_D7_GPIO_PIN GPIO_PIN_10
#define ATK_MD0350_FSMC_D7_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOE_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D8_GPIO_PORT GPIOE
#define ATK_MD0350_FSMC_D8_GPIO_PIN GPIO_PIN_11
#define ATK_MD0350_FSMC_D8_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOE_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D9_GPIO_PORT GPIOE
#define ATK_MD0350_FSMC_D9_GPIO_PIN GPIO_PIN_12
#define ATK_MD0350_FSMC_D9_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOE_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D10_GPIO_PORT GPIOE
#define ATK_MD0350_FSMC_D10_GPIO_PIN GPIO_PIN_13
#define ATK_MD0350_FSMC_D10_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOE_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D11_GPIO_PORT GPIOE
#define ATK_MD0350_FSMC_D11_GPIO_PIN GPIO_PIN_14
#define ATK_MD0350_FSMC_D11_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOE_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D12_GPIO_PORT GPIOE
#define ATK_MD0350_FSMC_D12_GPIO_PIN GPIO_PIN_15
#define ATK_MD0350_FSMC_D12_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOE_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D13_GPIO_PORT GPIOD
#define ATK_MD0350_FSMC_D13_GPIO_PIN GPIO_PIN_8
#define ATK_MD0350_FSMC_D13_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOD_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D14_GPIO_PORT GPIOD
#define ATK_MD0350_FSMC_D14_GPIO_PIN GPIO_PIN_9
#define ATK_MD0350_FSMC_D14_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOD_CLK_ENABLE(); \
} while (0)
#define ATK_MD0350_FSMC_D15_GPIO_PORT GPIOD
#define ATK_MD0350_FSMC_D15_GPIO_PIN GPIO_PIN_10
#define ATK_MD0350_FSMC_D15_GPIO_CLK_ENABLE() \
do { \
__HAL_RCC_GPIOD_CLK_ENABLE(); \
} while (0)
/* 操作函数 */
void atk_md0350_fsmc_init(void); /* ATK-MD0350模块FSMC接口初始化 */
static inline void atk_md0350_fsmc_write_cmd(volatile uint16_t cmd) /* ATK-MD0350模块通过FSMC接口写命令 */
{
ATK_MD0350_FSMC_CMD_REG = cmd;
}
static inline void atk_md0350_fsmc_write_dat(volatile uint16_t dat) /* ATK-MD0350模块通过FSMC接口写数据 */
{
ATK_MD0350_FSMC_DAT_REG = dat;
}
static inline void atk_md0350_fsmc_write_reg(volatile uint16_t reg, volatile uint16_t dat) /* ATK-MD0350模块通过FSMC接口写寄存器 */
{
ATK_MD0350_FSMC_CMD_REG = reg;
ATK_MD0350_FSMC_DAT_REG = dat;
}
static inline uint16_t atk_md0350_fsmc_read_dat(void) /* ATK-MD0350模块通过FSMC接口读数据 */
{
uint16_t dat;
__NOP();
__NOP();
dat = ATK_MD0350_FSMC_DAT_REG;
return dat;
}
#endif
过几天出一份精简的吧,目前为了调试,都是注释,部分代码可以更改下名称