《ESP8266墨水屏阅读器开发实战》——使用readguy库显示PCtoLCD2002生成的字模

本文实现的功能是基于GitHub上readguy开源代码的二次开发与精简,项目原始作者是friendshipender,项目地址:https://github.com/fsender/readguy

上一篇介绍了如何使用u8g2_wqy字库显示中文,固定字库显示中文适合整篇文章。当字库没有所需的字体和字号时,可以用PCtoLCD2002对这些文字单独取模,只用存储用到的几个字,比加载整套字库更省FLASH。这篇继续分享如何使用readguy库显示PCtoLCD2002生成的字模。
先看效果:
《ESP8266墨水屏阅读器开发实战》——使用readguy库显示PCtoLCD2002生成的字模
PCtoLCD2002取模,64×64 像素 (48号字)
《ESP8266墨水屏阅读器开发实战》——使用readguy库显示PCtoLCD2002生成的字模
《ESP8266墨水屏阅读器开发实战》——使用readguy库显示PCtoLCD2002生成的字模
新建三个文件,font_types.h,fonts.h,font48CN.cpp
font_types.h
#ifndef FONT_TYPES_H#define FONT_TYPES_H#include /* ============================================================ * 汉字字模数据结构 - 兼容 PCtoLCD2002 输出格式 *  * 注意: 使用固定大小数组, 不使用灵活数组(FAM) * 原因: ESP8266 (xtensa-lx106-elf-gcc) 不支持 FAM 嵌套初始化 * * PCtoLCD2002 设置: *   取模方式: 逐行式 *   自定义格式: C51 格式 * ============================================================ */// 最大支持的字体尺寸 (用于数组分配)#define MAX_HEIGHT_FONT 64  // 最大字体高度 (64像素)#define MAX_WIDTH_FONT  64  // 最大字体宽度 (64像素)// 常用字号预设值#define FONT_16_WIDTH   24   // 16号字宽度 (像素)#define FONT_16_HEIGHT  24   // 16号字高度 (像素)#define FONT_20_WIDTH   32   // 20号字宽度 (像素)#define FONT_20_HEIGHT  32   // 20号字高度 (像素)#define FONT_24_WIDTH   32   // 24号字宽度 (像素)#define FONT_24_HEIGHT  41   // 24号字高度 (像素)#define FONT_32_WIDTH   48   // 32号字宽度 (像素)#define FONT_32_HEIGHT  48   // 32号字高度 (像素)#define FONT_48_WIDTH   64   // 48号字宽度 (像素)#define FONT_48_HEIGHT  64   // 48号字高度 (像素)// 汉字字模 (固定大小数组, 兼容 ESP8266)typedef struct {  const char* index;                                        // UTF-8 字符串指针 (如 "你")  const char matrix[MAX_HEIGHT_FONT * MAX_WIDTH_FONT / 8];  // 点阵数据 [164]} CH_CN;// 中文字体集合typedef struct {  const CH_CN* table;    // 字模表  uint16_t size;         // 字模个数  uint16_t ASCII_Width;  // ASCII 字符宽度 (半角)  uint16_t Width;        // 汉字宽度  uint16_t Height;       // 汉字高度} cFONT;/* ------------------------------------------------------------ * 计算字模表条目数的宏 * 用法: FONT_CN_SIZE(Font24CN_Table, 32, 41) * ------------------------------------------------------------ */#define FONT_CN_SIZE(table, w, h) \  (sizeof(table) / (sizeof(CH_CN)))#endif  // FONT_TYPES_H
fonts.h
#ifndef FONT_CN_H#define FONT_CN_H#include "font_types.h"  // 纯C数据结构 (CH_CN, cFONT, FONT_CN_SIZE)#include "readguy.h"     // LovyanGFX, SPI 等C++依赖/* ------------------------------------------------------------ * 绘制中英文字符串 (模板函数, 适用于任何有 drawPixel() 的对象) * * @param gfx            LovyanGFX 对象引用 * @param x, y           起始坐标 * @param pString        UTF-8 编码字符串 * @param font           cFONT 字体指针 * @param color          前景色 * @param bg_color       背景色 (设为 color 可实现透明背景) * @param letter_spacing ASCII字符间距 (默认2像素) * @param cn_spacing     中文字符间距 (默认2像素) * * 用法: *   #include "fonts.h" *   drawStringCN(myDisplay, 10, 50, "你好世界", &Font24CN, TFT_BLACK, TFT_WHITE); * ------------------------------------------------------------ */template<typename T>void drawStringCN(T& gfx, int32_t x, int32_t y,                  const char* pString, const cFONT* font,                  uint32_t color, uint32_t bg_color,                  int32_t letter_spacing = 2int32_t cn_spacing = 2) {  if (!pString || !font || !font->table) return;  const char* p_text = pString;  int32_t cursor_x = x;  int32_t cursor_y = y;  while (*p_text != 0) {    if ((uint8_t)*p_text <= 0x7F) {      // ======== ASCII 字符 (单字节) ========      for (uint16_t num = 0; num < font->size; num++) {        if (*p_text == font->table[num].index[0]) {          const uint8_t* ptr = (const uint8_t*)font->table[num].matrix;          int ascii_w = font->ASCII_Width;          // int bytes_per_row = (font->Width + 7) / 8;          int bytes_per_row = (font->ASCII_Width + 7) / 8;          for (int j = 0; j < font->Height; j++) {            for (int i = 0; i < ascii_w; i++) {              if (ptr[i / 8] & (0x80 >> (i % 8))) {                gfx.drawPixel(cursor_x + i, cursor_y + j, color);              } else if (bg_color != color) {                gfx.drawPixel(cursor_x + i, cursor_y + j, bg_color);              }            }            ptr += bytes_per_row;          }          break;        }      }      p_text += 1;      // cursor_x += font->ASCII_Width;      cursor_x += font->ASCII_Width + letter_spacing;    } else {      // ======== 中文字符 (UTF-8, 3字节) ========      for (uint16_t num = 0; num < font->size; num++) {        if ((uint8_t)p_text[0] == (uint8_t)font->table[num].index[0] && (uint8_t)p_text[1] == (uint8_t)font->table[num].index[1] && (uint8_t)p_text[2] == (uint8_t)font->table[num].index[2]) {          const uint8_t* ptr = (const uint8_t*)font->table[num].matrix;          int w = font->Width;          int h = font->Height;          int bytes_per_row = (w + 7) / 8;          for (int j = 0; j < h; j++) {            for (int i = 0; i < w; i++) {              if (ptr[i / 8] & (0x80 >> (i % 8))) {                gfx.drawPixel(cursor_x + i, cursor_y + j, color);              } else if (bg_color != color) {                gfx.drawPixel(cursor_x + i, cursor_y + j, bg_color);              }            }            ptr += bytes_per_row;          }          break;        }      }      p_text += 3;      //   cursor_x += font->Width;      cursor_x += font->Width + cn_spacing;    }  }}// 方法同上,使用PROGMEMtemplate<typename T>void drawStringCN_PROGMEM(T& gfx, int32_t x, int32_t y,                          const char* pString, const cFONT* font,                          uint32_t color, uint32_t bg_color,                          int32_t letter_spacing = 2int32_t cn_spacing = 2) {  if (!pString || !font || !font->table) return;  const char* p_text = pString;  int32_t cursor_x = x;  int32_t cursor_y = y;  while (*p_text != 0) {    if ((uint8_t)*p_text <= 0x7F) {      // ======== ASCII 字符 (单字节) ========      for (uint16_t num = 0; num < font->size; num++) {        const char* idx = (const char*)pgm_read_ptr(&font->table[num].index);        if (*p_text == idx[0]) {          int ascii_w = font->ASCII_Width;          int bytes_per_row = (font->ASCII_Width + 7) / 8;          for (int j = 0; j < font->Height; j++) {            for (int i = 0; i < ascii_w; i++) {              uint8_t byteVal = pgm_read_byte(&font->table[num].matrix[j * bytes_per_row + i / 8]);              if (byteVal & (0x80 >> (i % 8))) {                gfx.drawPixel(cursor_x + i, cursor_y + j, color);              } else if (bg_color != color) {                gfx.drawPixel(cursor_x + i, cursor_y + j, bg_color);              }            }          }          break;        }      }      p_text += 1;      cursor_x += font->ASCII_Width + letter_spacing;    } else {      // ======== 中文字符 (UTF-8, 3字节) ========      for (uint16_t num = 0; num < font->size; num++) {        const char* idx = (const char*)pgm_read_ptr(&font->table[num].index);        if ((uint8_t)p_text[0] == (uint8_t)idx[0] && (uint8_t)p_text[1] == (uint8_t)idx[1] && (uint8_t)p_text[2] == (uint8_t)idx[2]) {          int w = font->Width;          int h = font->Height;          int bytes_per_row = (w + 7) / 8;          for (int j = 0; j < h; j++) {            for (int i = 0; i < w; i++) {              uint8_t byteVal = pgm_read_byte(&font->table[num].matrix[j * bytes_per_row + i / 8]);              if (byteVal & (0x80 >> (i % 8))) {                gfx.drawPixel(cursor_x + i, cursor_y + j, color);              } else if (bg_color != color) {                gfx.drawPixel(cursor_x + i, cursor_y + j, bg_color);              }            }          }          break;        }      }      p_text += 3;      cursor_x += font->Width + cn_spacing;    }  }}#endif  // FONT_CN_H#ifdef __cplusplusextern "C" {#endif  // font24CN.c 中定义的字体变量  extern cFONT Font16CN;  extern cFONT Font24CN;  extern cFONT Font32CN;  extern cFONT Font48CN;#ifdef __cplusplus}#endif

font48CN.cpp(把PCtoLCD2002生成的数据按以下格式填入)

#include #include "font_types.h"
const CH_CN Font48CN_Table[] PROGMEM = {//  面(0) 对(1) 疾(2) 风(3) 吧(4) !(5){"面",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0xC0,0x00,0xFF,0xF8,0x00,0x00,0x00,0x01,0x80,0x7F,0xFF,0xFC,0x00,0x00,0x00,0x01,0xBF,0xFF,0x80,0xFE,0x00,0x00,0xF8,0x3F,0xFF,0xFC,0x00,0x7F,0x00,0x00,0x7F,0xFF,0x80,0x1E,0x00,0x7F,0x00,0x00,0x7F,0x03,0xC0,0x1F,0x00,0x7F,0x00,0x00,0x7C,0x01,0xC0,0x1F,0x00,0x7E,0x00,0x00,0x3C,0x01,0xC0,0x1E,0x00,0x7C,0x00,0x00,0x3E,0x01,0xC7,0x9E,0x00,0x7C,0x00,0x00,0x3E,0x00,0xFF,0xDE,0x00,0x7C,0x00,0x00,0x1E,0x00,0xFF,0x1C,0x00,0x78,0x00,0x00,0x1E,0x00,0xC0,0x1C,0x00,0x78,0x00,0x00,0x1E,0x00,0xC0,0x1C,0x00,0x78,0x00,0x00,0x1E,0x00,0xC0,0x1C,0x00,0x78,0x00,0x00,0x1E,0x00,0xC0,0x1C,0x00,0xF8,0x00,0x00,0x0E,0x00,0xC7,0x9C,0x00,0xF8,0x00,0x00,0x0E,0x00,0xFF,0x9C,0x00,0xF8,0x00,0x00,0x0E,0x00,0xFF,0x1C,0x00,0xF0,0x00,0x00,0x0E,0x00,0xC0,0x1C,0x00,0xF0,0x00,0x00,0x0E,0x00,0xC0,0x18,0x00,0xF0,0x00,0x00,0x0E,0x00,0xC0,0x18,0x01,0xF0,0x00,0x00,0x0F,0x00,0xC0,0x18,0x01,0xF0,0x00,0x00,0x0F,0x00,0xC0,0x18,0x01,0xF0,0x00,0x00,0x0F,0x00,0xC0,0xFF,0xF3,0xF0,0x00,0x00,0x0F,0x00,0xFF,0xFF,0xFB,0xE0,0x00,0x00,0x0F,0xFF,0xFE,0x00,0x1F,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x07,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x06,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x06,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x0E,0x00,0x00,0x00,0x00,0x1F,0xE0,0x00,0x0E,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x0E,0x00,0x00,0x00,0x07,0xFF,0xE0,0x00,0x0E,0x00,0x00,0x01,0xFF,0xC7,0xC0,0x00,0x0E,0x00,0x00,0x00,0xFC,0x03,0xC0,0x00,0x0E,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x0E,0x07,0xC0,0x00,0x00,0x07,0x80,0x00,0x0F,0xFF,0xE0,0x00,0x00,0x07,0x80,0x00,0xFF,0xFF,0xF0,0x00,0x00,0x07,0x81,0xFF,0xFF,0xFF,0xC0,0x00,0x80,0x07,0x1F,0xFF,0xFE,0x00,0x00,0x00,0x60,0x0F,0x07,0xFE,0x0E,0x00,0x00,0x00,0x30,0x0F,0x01,0x80,0x0E,0x00,0x00,0x00,0x1C,0x0E,0x00,0x00,0x0E,0x00,0x00,0x00,0x0E,0x0E,0x00,0x00,0x0E,0x00,0x00,0x00,0x0F,0x1E,0x00,0x00,0x0E,0x00,0x00,0x00,0x07,0x9E,0x03,0x00,0x0E,0x00,0x00,0x00,0x03,0xFC,0x03,0xC0,0x0E,0x00,0x00,0x00,0x01,0xFC,0x03,0xF0,0x0E,0x00,0x00,0x00,0x00,0xFC,0x01,0xF8,0x0E,0x00,0x00,0x00,0x00,0x7C,0x00,0xF8,0x0E,0x00,0x00,0x00,0x00,0x7E,0x00,0x78,0x0E,0x00,0x00,0x00,0x00,0xFF,0x00,0x78,0x0E,0x00,0x00,0x00,0x01,0xFF,0x80,0x38,0x0F,0x00,0x00,0x00,0x01,0xEF,0x80,0x10,0x0F,0x00,0x00,0x00,0x03,0xC7,0xC0,0x00,0x0F,0x00,0x00,0x00,0x07,0x87,0xC0,0x00,0x0F,0x00,0x00,0x00,0x0F,0x03,0xE0,0x00,0x0F,0x00,0x00,0x00,0x1E,0x01,0xE0,0x00,0x0F,0x00,0x00,0x00,0x3C,0x01,0xE0,0x00,0x0F,0x00,0x00,0x00,0x78,0x00,0xE0,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x60,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x0F,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x0F,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x08,0x00,0x00,0x00,0x06,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,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,/*"对",1*/},{"疾",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xC0,0x00,0x00,0x00,0x08,0x01,0xFF,0xFE,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x0F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0xF0,0x00,0x00,0x00,0x00,0x20,0x07,0x00,0xF8,0x00,0x00,0x00,0x00,0x7C,0x07,0x00,0xF8,0x00,0x00,0x00,0x00,0x3F,0x07,0x00,0xF0,0x00,0x00,0x00,0x00,0x1F,0x07,0x01,0xE0,0x1F,0x80,0x00,0x00,0x0F,0x87,0x01,0xC0,0xFF,0xC0,0x00,0x00,0x07,0x07,0x03,0xFF,0xFF,0x80,0x00,0x00,0x01,0x0F,0x07,0xFF,0xF8,0x00,0x00,0x00,0x00,0x0F,0x07,0x7F,0x80,0x00,0x00,0x00,0x00,0x0F,0x0E,0x0F,0x00,0x00,0x00,0x00,0x00,0x0F,0x18,0x0F,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x0E,0x00,0x1C,0x00,0x00,0x00,0x7E,0x00,0x0E,0x03,0xFF,0x00,0x00,0x01,0xFE,0x00,0x0F,0xFF,0xFF,0x80,0x00,0x07,0x9E,0x00,0x7F,0xFF,0xFF,0x80,0x00,0x1F,0x1F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0xFE,0x1C,0xFF,0xCE,0x00,0x00,0x00,0x07,0xF8,0x1C,0x70,0x0F,0x00,0x00,0x00,0x03,0xF0,0x3C,0x00,0x1D,0x80,0x00,0x00,0x01,0xE0,0x38,0x00,0x1D,0xC0,0x00,0x00,0x00,0xC0,0x38,0x00,0x1C,0xE0,0x00,0x00,0x00,0x00,0x78,0x00,0x3C,0x70,0x00,0x00,0x00,0x00,0x70,0x00,0x38,0x38,0x00,0x00,0x00,0x00,0xF0,0x00,0x78,0x3C,0x00,0x00,0x00,0x00,0xE0,0x00,0x70,0x1E,0x00,0x00,0x00,0x01,0xE0,0x00,0xF0,0x0F,0x00,0x00,0x00,0x01,0xC0,0x01,0xE0,0x0F,0x80,0x00,0x00,0x03,0x80,0x03,0xC0,0x07,0xE0,0x00,0x00,0x07,0x80,0x07,0x80,0x03,0xF8,0x00,0x00,0x0F,0x00,0x0F,0x00,0x03,0xFE,0x00,0x00,0x1E,0x00,0x3C,0x00,0x01,0xFF,0xC0,0x00,0x38,0x00,0x70,0x00,0x00,0xFF,0xF8,0x00,0x70,0x01,0x80,0x00,0x00,0x3E,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x80,0x00,0x00,0x03,0xC1,0xFF,0xE0,0x3F,0x00,0x00,0x00,0x03,0xFF,0xF8,0x00,0x3E,0x00,0x00,0x00,0x01,0xF8,0x00,0x00,0x3E,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0xE0,0x00,0x60,0x3C,0x00,0x00,0x00,0x00,0xE0,0x00,0x78,0x38,0x00,0x00,0x00,0x00,0xE0,0x00,0x7C,0x38,0x00,0x00,0x00,0x00,0xE0,0x00,0x7C,0x38,0x00,0x00,0x00,0x00,0xE0,0x00,0x7C,0x38,0x00,0x00,0x00,0x00,0xE0,0x00,0x78,0x38,0x00,0x00,0x00,0x00,0xE0,0x00,0x78,0x38,0x00,0x00,0x00,0x00,0xE1,0x00,0xF0,0x38,0x00,0x00,0x00,0x00,0xE1,0x80,0xF0,0x78,0x00,0x00,0x00,0x00,0xE0,0xC0,0xF0,0x78,0x00,0x00,0x00,0x00,0xE0,0x60,0xE0,0x78,0x00,0x00,0x00,0x00,0xE0,0x71,0xE0,0x78,0x00,0x00,0x00,0x00,0xE0,0x39,0xC0,0x78,0x00,0x00,0x00,0x00,0xE0,0x1F,0xC0,0x78,0x00,0x00,0x00,0x01,0xE0,0x1F,0xC0,0x78,0x00,0x00,0x00,0x01,0xE0,0x0F,0x80,0x38,0x00,0x00,0x00,0x01,0xE0,0x07,0x80,0x38,0x00,0x00,0x00,0x01,0xC0,0x07,0xC0,0x38,0x00,0x00,0x00,0x01,0xC0,0x0F,0xC0,0x38,0x00,0x00,0x00,0x01,0xC0,0x0F,0xE0,0x38,0x00,0x00,0x00,0x01,0xC0,0x1F,0xF0,0x38,0x00,0x00,0x00,0x03,0xC0,0x3C,0xF0,0x38,0x00,0x00,0x00,0x03,0x80,0x38,0xF8,0x38,0x00,0x00,0x00,0x03,0x80,0x70,0x7C,0x3C,0x00,0x00,0x00,0x07,0x80,0xE0,0x7C,0x1C,0x00,0x00,0x00,0x07,0x01,0xE0,0x3E,0x1C,0x00,0x00,0x00,0x07,0x03,0xC0,0x1E,0x1C,0x00,0x00,0x00,0x0F,0x07,0x00,0x1E,0x1E,0x00,0x20,0x00,0x0E,0x0E,0x00,0x0F,0x0E,0x00,0x20,0x00,0x1E,0x1C,0x00,0x0F,0x0F,0x00,0x20,0x00,0x1C,0x38,0x00,0x06,0x0F,0x80,0x60,0x00,0x38,0x60,0x00,0x00,0x07,0x80,0x60,0x00,0x70,0x00,0x00,0x00,0x03,0xC0,0xE0,0x00,0xE0,0x00,0x00,0x00,0x03,0xF0,0xE0,0x01,0xC0,0x00,0x00,0x00,0x01,0xF9,0xE0,0x03,0x80,0x00,0x00,0x00,0x00,0xFF,0xE0,0x06,0x00,0x00,0x00,0x00,0x00,0x7F,0xE0,0x08,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"风",3*/},{"吧",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x1F,0x83,0xF8,0x00,0x00,0x00,0x00,0x7F,0xFC,0x03,0xF0,0x00,0x00,0x00,0xE0,0x3F,0xEE,0x03,0xF0,0x00,0x00,0x03,0xF8,0x3E,0x0F,0x03,0xE0,0x00,0x00,0x0F,0xFC,0x3C,0x0F,0x03,0xC0,0x00,0x1F,0xFF,0xFE,0x1C,0x0F,0x03,0xC0,0x00,0x0F,0xF8,0xFC,0x1C,0x0E,0x03,0x80,0x00,0x0F,0x80,0xF8,0x18,0x0E,0x03,0x80,0x00,0x07,0x80,0x78,0x18,0x0E,0x07,0x00,0x00,0x07,0x80,0x78,0x18,0x0E,0x07,0x80,0x00,0x07,0x80,0x70,0x18,0x0E,0x3F,0xC0,0x00,0x03,0x80,0x70,0x18,0x0F,0xFF,0x80,0x00,0x03,0x80,0x70,0x18,0x0F,0xFC,0x00,0x00,0x03,0x80,0xE0,0x18,0x7F,0xC0,0x00,0x00,0x03,0x80,0xE0,0x1B,0xFC,0x00,0x00,0x00,0x03,0x80,0xE0,0x1F,0xC0,0x00,0x00,0x00,0x03,0x83,0xF0,0x1C,0x00,0x00,0x00,0x00,0x03,0x9F,0xF0,0x18,0x00,0x00,0x00,0x00,0x01,0xFF,0xC0,0x18,0x00,0x00,0x00,0x00,0x01,0xF8,0x00,0x18,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x18,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x18,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x0F,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x07,0xC0,0x00,0x07,0xF8,0x00,0x00,0x00,0x07,0xF8,0x00,0x7F,0xF8,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"吧",4*/},{"!",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"!",5*/}};cFONT Font48CN = {    Font48CN_Table,    FONT_CN_SIZE(Font48CN_Table, FONT_48_WIDTH, FONT_48_HEIGHT),  // ← 正确计算    32,   // ASCII_Width    FONT_48_WIDTH,   // Width    FONT_48_HEIGHT,   // Height};

用此方法可生成其它字体文件。

helloHINK.ino

#include   //arduino功能基础库. 在platformIO平台上此语句不可或缺#include "readguy.h"  //包含readguy_driver 基础驱动库#include "fonts.h"ReadguyDriver myDisplay;  //新建一个readguy对象, 用于显示驱动.void setup() {  Serial.begin(115200);  //初始化串口  Serial.println("");  myDisplay.init(1);  myDisplay.setEpdDriver(truetrue);  myDisplay.fillScreen(TFT_WHITE);  // 全屏填充颜色  myDisplay.setTextColor(01);     //设置显示的颜色. 0代表黑色, 1代表白色  drawStringCN_PROGMEM(myDisplay, 010"面对疾风吧!", &Font24CN, TFT_BLACK, TFT_WHITE);  drawStringCN_PROGMEM(myDisplay, 20100"面对疾风吧!", &Font48CN, TFT_BLACK, TFT_WHITE, 510);  myDisplay.display();  myDisplay.sleepEPD();             //进入睡眠模式, 屏幕不再刷新.}void loop() {  delay(10);  // 降低CPU占用}
 

    暂无评论,快来发表第一条评论吧!

    ?? 需求咨询