STM32开发踩坑——基于CubeMx+Gcc移植正点原子3.5‘TFTLCD(开发环境:正点F103精英版+3.5‘TFTLCD)

news2024/11/26 18:48:03

成立这个专栏的目的是,记录自己嵌入式开发遇到的问题,与成功的解决方法,方便自己回顾。

最近在学习王维波老师的《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

过几天出一份精简的吧,目前为了调试,都是注释,部分代码可以更改下名称

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/651282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java高级语法】(三)泛型:关于泛型最全面的讲解来了~

Java高级语法详解之泛型 :one: 概念:two: 优势:three: 使用3.1 泛型类3.2 泛型接口3.3 泛型方法 :four: 通配符&#xff08;Wildcards&#xff09;4.1 无界通配符&#xff08;Unbounded Wildcard&#xff09;4.2 上限通配符&#xff08;Upper Bounded Wildcard&#xff09;4.3 …

aardio - 【库】http访问网页

为了简化http访问操作&#xff0c;提高速度&#xff0c;丰富功能&#xff0c;特封装了此库&#xff0c;可以根据需要进行选择。 本库带一个dll&#xff0c;所以建议优先选择使用 inet.http 库&#xff1a; 如果使用 inet.http库&#xff0c;直接 inet.http.get() 速度较慢。 大…

理解3ds max中的容器的概念

实验一&#xff1a; 在场景中创建一个容器 把这个容器保存为一个文件&#xff0c;在文件夹中可看到此容器文件&#xff0c;其大小为892KB&#xff0c;同时可看到生成一个同名的lock类型文件。 将场景中的某一个物体&#xff08;面加多一点的&#xff09;添加到容器中&#x…

框架---面经

Spring 循环依赖 概念 多个实体之间相互依赖并形成闭环的情况就叫做"循环依赖”&#xff0c;也叫做”循环引用。 三级缓存解决循环依赖的原理 循环依赖的解决方案--- Feild注入单例&#xff08;AutoWired&#xff09; 直接在类的成员变量上使用Autowired注解&#xf…

SM2椭圆曲线公钥密码算法

国家密码管理局于2010年12月17日发布了SM2椭圆曲线公钥密码算法&#xff0c;并要求为对现有基于RSA算法的电子认证系统、密钥管理系统、应用系统进行升级改造。关于算法标准&#xff0c;请参见《国家密码管理局公告&#xff08;第 21 号&#xff09;》&#xff0c;网址为​​ht…

JavaWeb【总结】——(请求和响应)浏览器发送请求的方式 服务器响应的方式

本文目录 引出JavaWeb相关知识1.网页状态码web相关背景知识如何在idea中建tomcat web项目2.Web的请求request&#xff1a;get和post&#xff0c;响应response3.同步请求和异步请求Ajax&#xff0c;以及异步的Json响应4.同步jsp和异步ajax的axios下&#xff0c;转发或重定向思考…

【图片轮播】Vue如何实现移动端图片轮播效果,支持左右滑动(附图文及代码)

【写在前面】 日常生活中&#xff0c;其实我们是离不开手机查看相册的&#xff0c;尤其是图片的轮播展示&#xff0c;最近我就接到我家老大给出的需求&#xff0c;首先是从网上下载下来之前她做的图片&#xff0c;然后她就希望能够在自己手机上能随时查看&#xff0c;这不没办法…

Java使用OpenCV进行图像操作

OpenCV图像操作 OpenCV概述下载与安装目录说明项目集成验证 Mat类创建Mat对象其他操作 常见图像API读取与输出图像显示图像图像压缩和解压缩图像转换图像缩放亮度调整图像锐化图像梯度图像二值化边缘检测图像高斯模糊图像反色 OpenCV 概述 OpenCV&#xff08;开源计算机视觉库…

2023互联网高级测试工程师至少具备的能力

业务熟悉 熟悉本系统 测试人员参与测试的系统的各种业务场景&#xff0c;必须做到精熟 。一旦需求有改动&#xff0c;可以清楚快速的知道上下文。同时可以清楚的知道哪些点是需要重点测试的。 熟悉跟本系统有通讯的上下游系统业务 跟本系统有通讯的上下游系统也要非常熟悉。这…

Exception in thread “main“ java.lang.UnsupportedClassVersionError 50报错处理

之间正常走jenkinsdocker自动化部署的项目&#xff0c;今天改了一个文件&#xff0c;点了一下&#xff0c;竟然没有部署上去&#xff0c;提示如上&#xff0c;如下 Exception in thread "main" java.lang.UnsupportedClassVersionError: com/coocaa/tsp/sys/user/Use…

Web 自动化测试Selenium 之PO 模型

目录 1. po 模型介绍 2. PageObject 设计模式 3. PO 的核心要素 4. 非PO 实现 5. PO 实现 6. 总结 7. PO 模式的特点 总结&#xff1a; 1. po 模型介绍 在自动化中&#xff0c;Selenium 自动化测试中有一个名字经常被提及 PageObject (思想与面向对象的特征相同)&#x…

【改进算法】混合鲸鱼WOA和BAT算法(Matlab代码实现)​

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Python键盘监听:实现快捷操作和自动化脚本(监听组合键

前言 本文主要介绍一下使用Python进行事件监听功能&#xff0c;以实现一些特有的操作。本文旨在介绍如何实现这一功能。 笔者根据一些需求写了一个小工具&#xff0c;流程和功能如下图所示&#xff08;实际功能有更多&#xff09;&#xff1a; 该工具主要实现了 键盘监听 和 鼠…

从Linux源码看TIME_WAIT状态的持续时间

前言 笔者一直以为在Linux下TIME_WAIT状态的Socket持续状态是60s左右。线上实际却存在TIME_WAIT超过100s的Socket。由于这牵涉到最近出现的一个复杂Bug的分析。所以&#xff0c;笔者就去Linux源码里面&#xff0c;一探究竟。 首先介绍下Linux环境 TIME_WAIT这个参数通常和五…

C++入门,一些C++基本概念介绍

文章目录 目录 前言 1.C关键字 1.1命名空间 1.2命名空间定义 1.3命名空间的使用 2.C输入&输出 3.缺省参数 3.1缺省参数的概念 3.2缺省参数分类 4.函数重载 4.1函数重载的概念 5.引用 5.1 引用特性 5.2 常引用 5.3引用的使用场景 5.4引用和指针 6.内联函数…

【Java基础】注解——自定义注解

什么是注解? Java 注解(Annotation)又称 Java 标注&#xff0c;是 JDK5.0 引入的一种注释机制。 比如我们常见的Override和Deprecated都是注解&#xff0c;注解可以加在类、方法、成员变量等上面&#xff0c;类似于给他们“打标签"。 注解怎么定义? public interface…

华为OD机试真题 JavaScript 实现【百钱买百鸡问题】【牛客练习题】

一、题目描述 公元五世纪&#xff0c;我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”&#xff1a;鸡翁一值钱五&#xff0c;鸡母一值钱三&#xff0c;鸡雏三值钱一。百钱买百鸡&#xff0c;问鸡翁、鸡母、鸡雏各几何&#xff1f; 现要求你打印出所有花一百元买一百…

AM@空间直角坐标系@数量积和向量积@向量的外积在物理学中的相关概念

文章目录 空间直角坐标系坐标面分向量坐标分解式余弦定理数量积的坐标表示公式 向量积向量积的坐标表示公式 向量的外积在物理学中的相关概念物理量ref 角速度和向量积量纲Base unit (measurement)Background&#x1f388;International System of Units&#x1f388;附 表达方…

【ROS】ROS1导航(了解)

1、简述 ROS1导航模块navigation&#xff0c;它从里程计、传感器流和目标姿势中获取信息&#xff0c;并将速度、角速度控制命令发送至差速控制单元。 因为是ROS1&#xff0c;所以下面的内容只是一带而过&#xff0c;没有深入学习总结。详细内容可参考官网&#xff1a;http://…

Spring高手之路5——彻底掌握Bean的生命周期

文章目录 1. 理解Bean的生命周期1.1 生命周期的各个阶段 2. 理解init-method和destroy-method2.1 从XML配置创建Bean看生命周期2.2 从配置类注解配置创建Bean看生命周期2.3 初始化和销毁方法的特性2.4 探究Bean的初始化流程顺序 3. PostConstruct和PreDestroy3.1 示例&#xff…