保定cms建站系统,商标 做网站 是几类,网站建设学徒,企业法律平台网站建设方案U8g2库支持中文显示#xff0c;但需要手动添加中文字体或使用内置的有限中文字符。以下是具体实现方法#xff1a;
方法一 使用U8g2内置的中文字体#xff08;不推荐#xff09;
缺点#xff1a;内置字体支持的汉字较少#xff0c;可能无法显示所有需要的字符。不推荐。…U8g2库支持中文显示但需要手动添加中文字体或使用内置的有限中文字符。以下是具体实现方法
方法一 使用U8g2内置的中文字体不推荐
缺点内置字体支持的汉字较少可能无法显示所有需要的字符。不推荐。
U8g2库内置了一些中文字体但覆盖的汉字有限通常为常用符号或少量汉字。例如
#include U8g2lib.h
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset*/ U8X8_PIN_NONE);void setup() {u8g2.begin();
}void loop() {u8g2.clearBuffer();u8g2.setFont(u8g2_font_unifont_t_chinese2); // 使用内置中文字体部分汉字u8g2.drawStr(0, 20, 你好); // 显示中文u8g2.sendBuffer();delay(1000);
}方法二 使用XBM格式显示中文不推荐
缺点位图方式占用资源仅适合固定内容无法动态修改文本不推荐
如果只需要显示少量固定汉字可以将其转换为 XBM位图直接渲染
使用 LCD Assistant在线工具将汉字转换为XBM格式。在代码中引用XBM数据
#include U8g2lib.h
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset*/ U8X8_PIN_NONE);// 定义中文字符的XBM位图示例你好
static const unsigned char hello_bits[] U8X8_PROGMEM {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ... // 具体数据由工具生成
};void setup() {u8g2.begin();
}void loop() {u8g2.clearBuffer();u8g2.drawXBM(0, 20, 16, 16, hello_bits); // 显示XBM位图u8g2.sendBuffer();delay(1000);
}方法三 自定义中文字体推荐
如果需要显示任意中文需使用 U8g2字体工具 生成自定义字体文件。U8g2库的官方字体转换工具是 bdfconv它可以将标准字体文件如TTF、BDF转换为U8g2兼容的C语言字体文件。 U8g2字体工具bdfconv获取方式
步骤1下载并安装U8g2字体工具bdfconv
GitHub仓库源码工具
U8g2官方字体工具网站 https://github.com/olikraus/u8g2/wiki/fntgrpbdfconv工具https://github.com/olikraus/u8g2/tree/master/tools/font/bdfconv 包含Windows/Linux/macOS的预编译版本
Windows用户直接下载
预编译的Windows版 bdfconv.exe 点击下载 bdfconv.exe
步骤2准备中文字体文件
从系统字体目录如Windows的C:\Windows\Fonts复制一个中文字体如simsun.ttf、msyh.ttf。或使用开源字体如 思源黑体、文泉驿微米黑。
步骤3生成U8g2兼容的字体文件
在命令行运行
./bdfconv -v -f 1 -m 32-127, 19968-40959 simsun.ttf -o my_chinese_font.c参数说明
-f 1抗锯齿级别1无抗锯齿2有抗锯齿。-m 19968-40959指定Unicode汉字范围19968-40959覆盖常用汉字。simsun.ttf输入字体文件。-o my_chinese_font.c输出C语言字体文件。
步骤4在Arduino项目中导入自定义字体
将生成的my_chinese_font.c复制到Arduino项目目录。在代码中引用该字体
#include U8g2lib.h
#include my_chinese_font.c // 导入自定义字体U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset*/ U8X8_PIN_NONE);void setup() {u8g2.begin();
}void loop() {u8g2.clearBuffer();u8g2.setFont(my_chinese_font); // 使用自定义字体u8g2.drawStr(0, 20, 你好世界); // 显示中文u8g2.sendBuffer();delay(1000);
}常见问题
Q1提示“找不到bdfconv” 确保将 bdfconv.exe 放在系统路径如 C:\Windows或当前目录。
- Q2生成的字体文件过大 缩小字符范围如 -m “19968-20000” 仅转换少量汉字。 使用 -b 0 禁用非必要字符
bdfconv -b 0 -m 19968-20000 simsun.ttf -o small_font.cQ3中文显示为乱码 确保字体文件包含目标汉字检查Unicode范围。 在代码中使用 UTF-8编码字符串Arduino IDE默认支持。
Q1中文显示乱码
确保字体文件包含所需汉字的Unicode编码。检查drawStr是否使用UTF-8编码字符串。
Q2字体太大占用过多Flash
减少字体范围如-m 19968-20000仅生成少量汉字。使用-b 0选项禁用非必要字符。
Q3显示速度慢
使用U8G2_FONT_MODE_TRANSPARENT减少渲染时间u8g2.setFontMode(1); // 透明模式总结
方法优点缺点内置中文字体简单无需额外文件支持的汉字有限自定义字体支持任意汉字灵活需手动生成字体文件XBM位图适合固定内容渲染快无法动态修改占用空间较大
推荐
少量中文 → 内置字体大量中文需要完整中文支持 → 使用bdfconv转换TTF字体固定标语 → XBM位图
通过以上方法可以在Arduino OLED项目中完美显示中文
补充无需bdfconv工具的替代方案
方法三还有一个替代方案无需bdfconv在线字体转换工具如 LVGL Font Converter生成兼容U8g2的字体。
方法优点缺点bdfconv工具支持任意字体和汉字灵活需手动操作命令行在线转换工具无需安装软件依赖网络可能格式不兼容
参考 如何利用Arduino来显示Unicode文本 Arduino驱动LED128X64 - U8g2 自定义中文字库 arduino如何在ssd1306上显示中文字符 Arduino技巧使用u8g2函式庫建立自訂字庫讓OLED顯示中文