PCtoLCD2013字模提取完全指南:OLED显示汉字不再乱码
1. 为什么OLED必须喂字模先从点阵屏的工作原理说起很多刚接触OLED显示的朋友都有过这样的困惑明明代码抄得一字不差驱动库也编译通过了屏幕就是不显示汉字或者显示出来全是乱码。这时候十有八九不是代码的问题而是字模提取这一步出了岔子。要搞懂字模提取先得明白一个最基本的事实OLED屏幕本质上是一张由发光点组成的网格每个点只能处于亮或灭两种状态——没有第三种。以最常见的0.96寸OLED为例它通常是128×64的分辨率也就是横向128个点、纵向64个点一共8192个发光点。你想要显示一个汉字本质上就是决定这8192个点里哪些点亮、哪些点灭。字模这个说法就是把这些亮灭信息转换成单片机能够理解的数据格式。中文一个字通常用16×16的点阵来表示也就是在16行、每行16个点的范围内通过点亮不同的点来勾勒出汉字轮廓。如果屏幕上出现了一个中字那么在对应的16×16区域内大约有那么几十个点被点亮剩下的点都是暗的。字模提取工具干的活儿就是把这个哪些点亮、哪些点灭的信息按一定规则编译成一组十六进制字节让单片机可以直接读取并送屏幕。PCtoLCD2013这个软件就是干这个的。它的界面看起来有点老旧选项也相当多新手一打开往往直接懵掉——一堆按钮和下拉框不知道该动哪个、不该动哪个。但实际上真正影响字模数据的核心选项就那几个搞明白它们的意思你就能完全掌控这个工具。后面我会一步步把每个关键选项讲透保证你看完之后无论遇到什么型号的OLED、什么架构的单片机都能快速提取出正确的字模。顺带说一句PCtoLCD2013不仅支持汉字取模还支持ASCII字符字母、数字、符号和图片取模应用场景很广。网上很多现成的字库工具都是基于它的思路做的所以把这个工具玩明白了以后换啥工具都能快速上手。2. 认识PCtoLCD2013的关键选项取模前的必修课打开PCtoLCD2013你可能觉得界面很乱但别慌。字模提取这件事真正决定输出数据长相的选项就那么几个。我按对结果影响程度从高到低排个序逐个说明白它们是什么、为什么这么选。2.1 取模方向逐行式还是逐列式这是最容易出问题、也是新手最容易忽略的一个选项。取模方向指的是从哪个方向开始扫描点阵按什么顺序把亮/灭信息排成字节。点阵取模主要有两种方向逐行式也叫横向取模先从左到右扫描第一行的16个点凑成两个字节8个点一个字节再扫描第二行以此类推。这种方式生成的数据一行一行的特征非常明显方便人肉眼去和屏幕上的显示结果对照。逐列式也叫纵向取模先从上到下扫描第一列的16个点凑成两个字节再扫描第二列以此类推。这种方式的每个字节正好对应OLED驱动芯片如SSD1306内部显存里的一列数据往显存里搬运时逻辑更顺。实际使用中绝大多数OLED驱动库包括网上流传最广的HAL库驱动、江协科技的OLED例程、很多ESP32 IDF项目都会在显存填充函数里按逐列式处理数据。也就是说驱动代码默认了你的字模是按列取出来的。这里就出现了第一个经典踩坑点你用逐行式取了模驱动却按逐列式解析那屏幕上的字就是花的——笔画七零八落完全看不清是什么字。反过来的情况也一样。我的建议是先看你手上的驱动代码是怎么写的。如果驱动函数里显存坐标是按页地址列地址的方式递增那通常就是逐列式如果你只是往缓冲区里顺序塞数据那大概率也是逐列式。90%以上的情况选逐列式就对了。提示打开PCtoLCD2013后在选项菜单里能找到取模方式相关的设置。这个选项不设置对后面无论怎么调都是白忙活。2.2 阴码还是阳码决定数据里的1含义这个选项直接决定了一个事情点亮的点是1还是0。阴码点亮的点取1灭掉的点取0。这是最符合人类直觉的表示方式。oled屏幕上亮就是1暗就是0所以数据显示出来是什么样屏幕就显示什么样。阳码反过来点亮的点取0灭掉的点取1。相当于黑白反转。绝大多数情况下选阴码就完事了。除非你想在OLED上反白显示比如黑色背景上的字变成白色背景上的黑字视觉上就是反色效果那才需要考虑用阳码配合其他逻辑。这里再多说一句前面提到的16×16字模取出来每个汉字大概32个字节数据。如果用阴码数据里1的位置就是笔画如果用阳码0的位置才是笔画。很多人在代码里把字模数组定义成const unsigned char类型然后把PCtoLCD2013生成的十六进制数据原封不动地粘贴进去如果这里阴码/阳码选错屏幕上显示的就是一个镂空的字——外框在、笔画没或者反过来。2.3 逐行式还是列行式、字节正序还是倒序什么是列行式有些工具里管它叫逆向逐列式或逐列式。前面说了逐列式是从上到下扫描一列列行式不过是另一种叫法。关键要注意另外两个容易混淆的子选项字节正序一个字节内从高位bit7到低位bit0排列数据。字节倒序一个字节内从低位bit0到高位bit7排列数据。为什么会有正序倒序的区别因为OLED驱动芯片的显存结构是每个字节的8个bit对应竖直方向连续排列的8个像素点。最高位bit7对应上面那个点最低位bit0对应下面那个点。如果你的取模工具扫描方向是自上而下那第一个扫描到的点应该放在最高位这就是正序如果工具扫描方向是自下而上那第一个点应该放在最低位这就是倒序。实际选哪个同样取决于你的驱动代码。大多数驱动库用的是正序即高位在上。但你得看你自己用的代码有的第三发库做了bit反转那就需要倒序来匹配。一次性把PCtoLCD2013的逐列式和字节正序都选上这组合能覆盖绝大多数场景。2.4 自定义格式如何生成最顺手的C语言数组PCtoLCD2013支持多种输出格式C51格式、Keil格式、汇编格式、BIN格式等。这里强烈建议选择C51格式或直接选自定义格式。C51格式的典型输出长这样0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x30,0x78,0x78,0x78,0x78,0x78,0x78, ...每一行固定生成固定数量的字节方便直接复制粘贴到数组里。自定义格式建议按这个配置来每行字节数填8也就是一行8个字节方便排版也方便你用16进制编辑器对照行前缀填0x行后缀填,字节间分隔符不填或填英文逗号数据类型选unsigned char这样生成出来的数据直接就是一个合法的C数组初始化列表复制粘贴零修改非常省事。2.5 字体设置与取模范围PCtoLCD2013支持设置取模的字号常见的有8×8、8×16、12×12、16×16、24×24、32×32。这里的数字代表点阵宽×高比如16×16就是一个汉字占16列16行。选择字号时要注意不是任意字号都能在所有OLED上正常显示。128×64的屏幕一行能显示16×16汉字8个128除以16如果换12×12的字体理论上能显示10个多一点但12不是8的整数倍显示位置对齐时很别扭。所以实际项目里最常用的汉字字号就是16×16ASCII字符就是8×16或者6×12、8×8这种。字号选定了在正文输入框里敲入你想转换的汉字点生成字模工具就会遍历每个字符按你设定好的规则生成对应数量的字节数据。3. 手把手提取中文字模从配置到生成完整步骤这一节我用一个实际示例走一遍全流程。假设你的板子是常见的STM32F103C8T6配一块0.96寸128×64 I2C接口的OLED驱动芯片是SSD1306你正在用的驱动代码是网上最常见的HAL库版本显存刷新函数把数据按列填充。3.1 配置取模参数打开PCtoLCD2013依次完成以下操作点击菜单栏设置→字模选项或者直接点工具栏上的选项按钮打开参数配置对话框。取模方式选择逐列式。这个选项在不同版本里叫法可能略有区别有的写列行式有的写纵向取模意思一样。取模走向选择顺向高位在前也就是字节正序。输出数制选择十六进制。图形选项里勾选阴码。字节排列顺序选择高位在前如果是8×16字符通常也要配套选上。每行显示字数选8或16影响的是输出排版不影响数据本身。文件保存格式选C51格式。这些配置好之后点击确定保存。3.2 输入文字并生成字模在PCtoLCD2013主界面的输入框中输入你想显示的汉字。比如我要在OLED上显示温度湿度四个字就把这四个字输入进去。点击生成字模按钮下方输出区立刻出现这样的数据{0x00,0x00,0x20,0x60,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0xFE,0xFE,0x00,0x00, //温 ... }注意观察每个汉字生成32个字节16×16点阵每列两个字节一共16列四个字就是128个字节。这里有个非常重要的校验技巧生成之后PCtoLCD2013的预览区会直接画出这个字的点阵效果。你肉眼对照一下预览区和屏幕上期望的形状是否一致。如果不一致十有八九是阴码/阳码或扫描方向没配对。这一步很多人跳过导致数据烧进单片机才发现问题排查起来更费劲。3.3 把字模数据接入工程代码打开你的OLED驱动文件通常会看到类似这样的结构// 汉字字模数组 const unsigned char F16x16[][32] { {0x00,0x00,0x20,0x60,...}, // 温 {0x00,0x00,0x10,0x10,...}, // 度 ... }; // 显示单个汉字的函数 void OLED_ShowChinese(uint8_t x, uint8_t y, uint8_t num) { uint8_t i; for (i 0; i 16; i) { OLED_WR_Byte(F16x16[num][i * 2], OLED_DATA); OLED_WR_Byte(F16x16[num][i * 2 1], OLED_DATA); } }注意看这个循环i从0到15每次取两个字节对应一列的两个8点。这就是逐列式字模数据和驱动函数配合的方式。如果你的字模是逐行式取的这里打印上屏的图案就是竖条状的乱码。把PCtoLCD2013生成的数据直接替换进数组编译烧录屏幕上应该就能正常显示温度湿度了。3.4 一个常见的翻车现场为什么显示出来全是竖着的条条这问题我在各种单片机交流群里见过不下几十次。现象是屏幕上有内容但完全看不出是什么字全是一条条竖着的短横线或者像二维码的局部图案。这个时候不要怀疑驱动代码先检查字模方向。把PCtoLCD2013的取模方式从逐列式改成逐行式再生成一次替换进去试试。如果替换完正常了说明根本原因就是取模方向不匹配。如果你换过去反而花得更厉害了那说明可能还有字节顺序的问题再看看字节正序/倒序设置。这种先怀疑取模参数、再动代码的排查顺序能帮你节省大量时间。4. ASCII字符与图片的取模同一个工具不同玩法4.1 ASCII字符取模的尺寸选择逻辑ASCII字符字母数字和常用符号在OLED上的显示通常比汉字小得多。常见的搭配方案有两种8×16和6×12也有用8×8的。8×16的含义是一个字符占8列16行正好是半个16×16汉字的宽度。这样在同一行里一个汉字占16个像素宽度两个字符占16个像素宽度中英文混排时对齐非常舒服。操作上和汉字取模完全一样在输入框输入英文字符把字号改成8×16生成字模。每个字符生成16字节数据。注意如果驱动函数要求你按字符顺序排列数据而你的字符数组还包含空格、标点等特殊符号建议按ASCII码顺序制作完整的字符库而不是只取用到的几个字符。一个完整8×16 ASCII字库大约有95个可见字符占用约1520字节Flash对绝大多数单片机来说毫无压力。有些现成的驱动库自带ASCII字库比如U8g2、U8glib但你要是用的是自写精简驱动从PCtoLCD2013提取一次完整ASCII字库一劳永逸。4.2 图片取模从BMP到OLED 1-bit位图OLED不能像LCD那样直接显示彩色图片它只能显示单色的点阵图。要把一张图片显示到OLED上过程是把图片转成BMP格式最好先转成灰度图或纯黑白图二值化。把图片尺寸调整到OLED分辨率以内常见的是128×64、128×32、72×40等。在PCtoLCD2013里点击打开图片按钮选择处理好的BMP文件。设置取模参数逐列式、阴码、高位在前跟字模设置保持一致。生成字模数据这时生成的数据量是宽/8×高 个字节。注意一个问题图片的明暗关系会影响取模结果。如果你生成之后发现OLED上显示出来是黑白颠倒的背景全亮、图案暗的把阴码改成阳码重新生成一次就好。图片取模在实战中最常见的用途是开机Logo显示、自定义图标菜单、简单动画帧。比如128×64的Logo一次取模要1024字节Flash小的小单片机如STM32F030的16KB Flash得多留意空间占用。4.3 字模数组在Flash里的组织方式做菜单系统时通常需要把汉字字模、ASCII字模、图标数据分开存放。我习惯这样组织// 字体结构体定义 typedef struct { uint8_t width; // 字符宽度像素 uint8_t height; // 字符高度像素 const uint8_t *data; // 字模数据指针 } FONT_T; // ASCII 8x16字库 static const uint8_t Ascii_8x16[95][16] {...}; static const FONT_T Font_Ascii_8x16 {8, 16, Ascii_8x16[0][0]}; // 汉字16x16字库 static const uint8_t Chinese_16x16[][32] {...};这样组织的好处是驱动函数可以写成通用接口比如OLED_ShowChar(x, y, ch, Font_Ascii_8x16)和OLED_ShowChinese(x, y, index, Chinese_16x16)。换字体时只需要换一个结构体指针不用改主体逻辑。5. 数据入库与上屏验证如何快速定位乱码根源字模提取出来、也写进代码了但屏幕显示效果不对。这时候你需要一套系统的排查方法而不是瞎试各种参数。以下是我在实际调试中总结的定位流程。5.1 第一步排除驱动代码本身的问题先不要急着怀疑字模。做一件最基础的事用驱动代码自带的测试函数直接点亮某个坐标区域的像素点。比如调用OLED_DrawPoint(0, 0, 1)点亮左上角第一个点再调用OLED_DrawPoint(127, 63, 1)点亮右下角最后一个点。如果这两个点都能正常点亮说明显存填充和I2C通信链路没问题。提示I2C通信不稳也会导致显示乱码但这个乱码通常是满屏随机花点、闪烁花点跟字模方向错误导致的规则性花屏明显不一样。后者的花屏有规律——同一列的8个点总是一起亮或一起灭。5.2 第二步单字符测试排除多字干扰写一段测试代码只显示一个汉字比如中。如果这个单字显示正确说明取模参数和驱动逻辑是匹配的问题可能出在数组索引、字库偏移之类的代码逻辑上。如果单字就花那一定是取模方向或字节序的问题。单字符测试时还有一个关键技巧查看PCtoLCD2013的数据预览和OLED实显示之间是否存在明显的镜像关系。如果屏幕上显示的图案像是把正确图案水平翻转了通常是字节正序/倒序反了如果像是垂直翻转了通常是扫描起止方向反了比如从下往上而不是从上往下如果是密密麻麻的颗粒状碎点那是行列方向不对也就是逐行/逐列搞错了。5.3 第三步构造一个已知图案做对照取模方向对不对光看汉字不一定容易判断因为汉字笔画复杂。一个更简单的测试图形是在PCtoLCD2013里输入一个大写的E或F这两个字母的笔画横平竖直最容易看出方向错误。如果E显示出来变成了山或者三的形状说明扫描方向存在垂直翻转如果显示成上下颠倒说明行顺序反了。还有一种高效的对照方法用一个画图工具画一个只有左上角1个黑点的8×8图案然后取模看数据是0x80,0x00,...还是0x01,0x00,...。前者说明高位在前后者说明低位在前。手工核对一下就能立刻判断字节序是否匹配。这个方法只需要几秒钟但能定位掉90%的字模方向问题。5.4 第四步用规律性像素测试I2C时序问题如果你怀疑是通信问题而非字模问题可以在驱动代码里写一个循环每隔一段时间刷新一屏纯色全0xFF或全0x00。如果全亮和全灭切换正常屏幕没有缺行、缺列、雪花点那就说明I2C硬件通路是可靠的。如果全屏纯色显示都有问题那就是驱动的底层时序或者地址配置有问题跟字模提取一毛钱关系都没有。这里顺便提一个很多新手不知道的坑SSD1306的I2C从机地址7位地址形式是0x3C或者0x3D取决于DC引脚电平但有很多驱动代码在初始化函数里传的是0x78或0x7A这样的8位形式。这俩数据差一位移位搞错了屏幕一点反应都没有但不影响你已经提取好的字模数据。所以字模是字模通信是通信排查时别混在一起。5.5 关于显示位置与坐标计算的常见误区最后说一个和字模数据无关、但很容易被误判为字模错误的问题显示位置。有些驱动库的坐标原点在左上角有些允许你自由设定显存窗口但很多时候汉字显示函数是按页page对齐的。SSD1306的显存是按8行一页组织的16×16的汉字占两页——第一页是上面8行第二页是下面8行。如果你的驱动库的写数据函数没有处理好跨页问题当你把一个汉字放在y坐标为3的位置而不是0、8、16这种页对齐坐标时字符上半部分和下半部分会错开一条缝。这看起来很像字模数据错了其实纯粹是显示算法问题。解决办法很简单显示汉字时把y坐标强制对齐到8的整数倍或者用带偏移量处理的便捷抽页写入方式。另外再补充一个经验128×64分辨率的OLED16×16汉字横坐标从0开始最大可以到112因为11216128再往后就超出屏幕边界了。如果你的字库代码在显示过程中忽略了边界检查数据也会越界写入造成屏幕出现不该有的内容。写显示函数时务必加上坐标边界判断。6. 不同平台移植时的字模适配经验PCtoLCD2013提取的字模是平台无关的——它生成的就是一堆字节数据不管你的主控是STM32、ESP32、51单片机还是Arduino数据本身都一样。但不同平台的驱动代码在解析这些数据的逻辑上可能有差异移植时需要留意几个适配点。6.1 STM32 HAL库平台的常见写法STM32 HAL库驱动OLED的代码网上铺天盖地绝大多数用的是模拟I2C或硬件I2C。硬件I2C的写法通常长这样uint8_t OLED_WR_Byte(uint8_t dat, uint8_t cmd) { uint8_t buf[2] {cmd ? 0x40 : 0x00, dat}; HAL_I2C_Master_Transmit(hi2c1, 0x78, buf, 2, 100); }这里0x78就是8位形式的I2C地址7位地址0x3C左移一位。不管这个函数怎么实现它最终把字模数据字节送到OLED的显存里。只要字模匹配驱动要求逐列、阴码、高位在前显示就正常。用HAL库的硬件I2C时要注意I2C时钟频率。SSD1306的I2C最高支持400kHzFast Mode在STM32里配置成100kHz或400kHz都能正常工作。如果配置成1MHz超出规格偶尔会出现字节错位表现也是花屏。这种情况容易误判为字模问题。我建议先按400kHz以下跑验证字模没问题后再考虑超频。6.2 ESP32 IDF与Arduino平台的差异ESP32上常用的OLED库是u8g2或Adafruit SSD1306。这些库自带字体但你要显示自定义中文时还是得自己提供字模数组。u8g2提供了几个API可以直接画位图比如u8g2.drawXBM(x, y, w, h, bitmap_data);这个函数要求位图数据按逐行取模horizontal mode也就是每行8个像素一个字节从左到右排列。如果你用PCtoLCD2013按逐列式提取的图片数据直接喂给drawXBM一定花屏。反过来如果你用的是自行封装驱动类似于STM32那种直接写显存页的方式那逐列式就完全没问题。所以ESp32平台有一个关键判断你用的库到底期望哪种取模方式。u8g2的核心是页缓冲机制它内部把逻辑坐标映射到物理显存时自动做了转换所以数据格式要求是逐行式而如果你直接操作SSD1306的显存寄存器那就是逐列式。动手前先读一遍所用库的文档或者看库源码里的绘制函数怎么解析数组这是最稳妥的做法。Arduino平台的情况就比较杂了。Adafruit_SSD1306库的drawBitmap函数默认期望逐行取模的位图数据而有些国产改版库沿用了STM32式的驱动思路期望逐列式。同一个字模数组在不同库上显示效果天差地别这都是库期望的数据格式不同导致的。判断方法仍然是先看库源代码里如何解析数组字节。6.3 从PCtoLCD2013移植到其他取模工具的迁移知识PCtoLCD2013生成的数据格式和其他取模工具比如字模提取精灵、OLED取模助手、Img2Lcd等生成的数据本质是一样的点阵数据区别只在于字节排列顺序和输出格式。从PCtoLCD2013迁移到Img2Lcd这类工具时最需要注意的是扫描方向和颜色反转两个参数。Img2Lcd里叫扫描模式可选水平/垂直颜色反转就是反色选项。照着PCtoLCD2013的对应设置去配就行。如果你确实不知道对方工具的参数含义最笨但最有效的方法就是用一个已知的8×8字母作为测试图案在两个工具里分别取模对比生成的数据是否一致。一致就说明参数匹配不一致就微调方向或反色设置直到一致为止。7. 经验总结与效率技巧在结束之前分享几个我在长期使用PCtoLCD2013过程中沉淀下来的实用技巧这些细节全是文档里不会写、但实战中特别提效的东西。7.1 建立一个自己的字模库管理习惯每次给某个项目提取完字模把所有字模数据和对应的显示函数放在一个专门的源文件里比如oled_font.c和oled_font.h。文件命名、数组命名统一带前缀汉字数组命名为Font_Chinese_16x16ASCII数组命名为Font_ASCII_8x16图片数组命名为Logo_128x64。这样写新项目时直接复制这个源文件省去重新取模的时间。更重要的是建议在每个数组前面加注释标明使用的取模参数// 取模方式逐列式阴码字节正序高位在前 // 字号16x16每行8字节 // 字符数8个温度湿度系统界面 const unsigned char Font_Chinese_16x16[8][32] {...};这条注释至少能救未来的你一次——因为几个月后回看项目时你很可能记不清当初用的是哪种取模方式了。没有这个注释你只能再次瞎猜参数浪费时间。7.2 批量生成整库字模的操作细节如果要做带完整字库的小系统比如只显示固定几个菜单项每个菜单项汉字不超过20个直接用PCtoLCD2013逐个敲入汉字再点生成工作量不大。但如果你做一个能显示任意中文内容的系统比如配合输入法或SD卡字库建议一次性生成常用汉字字库。这时可以把所有需要的汉字放进一个TXT文件每行一个或不分行在PCtoLCD2013里用导入文本功能一次生成数百个汉字的字模数据。但注意一次性生成大量汉字后你要在程序里维护一个汉字到索引的映射表。最简单的做法是按拼音或Unicode编码排序然后用二分查找在数组中匹配编码值。每个汉字的编码值和索引的对应关系需要写程序预处理手工会疯的。我的做法是先写个小脚本Python或者C读取Unicode编码生成一个{编码, 索引}的查找表再配合PCtoLCD2013生成的按相同顺序排列的字模数组。这两个顺序必须完全一致否则显示的就是错字。7.3 小容量Flash的省字模方案有些项目用的单片机Flash特别小比如8KB的Attiny系列或者某些资源紧张的STC单片机塞不下完整的16×16汉字库。这时候有几个替代方案用12×12字号每个汉字从32字节降到24字节省25%。用8×8的ASCII 16×16的汉字混排ASCII用占空间最小的字库常用汉字单独提取不常用的塞Flash不用。把字模存到外部存储I2C接口的EEPROM或SPI Flash按需读取。这种情况下字模数据提取方式不变只是存储介质换了。以12×12为例PCtoLCD2013里把字号设为12×12再生成驱动代码也要相应调整——每列数据不是完整的8位对齐写显存时需要考虑移位拼接。如果你的驱动库不支持任意尺寸字模硬上12×12反而得不偿失。所以省空间这件事优先考虑的是换小尺寸字库其次才是改驱动。7.4 调试时用逻辑分析仪验证I2C数据如果你手头有逻辑分析仪哪怕是十几块钱的USB逻辑分析仪建议在验证字模问题时接上SDA和SCL线抓一次波形。你可以直接看到发送给OLED的数据字节是否和字模数组一致。这样可以快速区分数据本来就不对和数据对但显存排列不对这两种情况。很多时候字模数组本身没问题而是驱动函数在填充显存时索引算错了导致取的是数组里偏移位置错误的数据显示出来的字自然不对。逻辑分析仪一拍这个原因立现。7.5 关于PCtoLCD2013本身的几点使用提醒PCtoLCD2013是个绿色小软件免安装但在Windows 10以上系统运行时偶尔会有界面字体显示模糊或按钮错位的问题。解决办法是在程序快捷方式的兼容性里勾选替代高DPI缩放行为并选择系统或应用程序。另外程序有时会在生成大量字模时出现假死现象特别是导入几千个汉字的TXT文件时。别急着关进程等十几秒到几十秒通常它会恢复正常。如果实在无响应确认输入文本没问题后建议把文本拆分成多个小文件分批导入稳定性更高。还有一个细节PCtoLCD2013的默认字体是宋体。如果你需要黑体、楷体等字形的字模需要在Windows字体文件里替换默认字体或者在输入文字前先把系统字体切换成目标字体。这个功能入口在设置→字体里。不同字体产生的字模视觉效果差异很大做界面排版时值得花时间选一选。不过要注意你选的字体必须是系统中已安装的PCtoLCD2013不会自带字体文件。最后说一个几乎所有教程都不会提、但我个人觉得特别实用的小操作PCtoLCD2013生成的字模数据可以保存为文本文件然后你在代码中利用#include或者脚本自动把文本文件转成.c文件。如果你用脚本做自动化整个字库的更新流程就能打通以后再改显示内容只要更新文本和重新生成字模文件不必手动复制粘贴几KB的数据。这个自动化思路对产品迭代频繁的项目特别有用。