单片机显示汉字乱码,根源几乎都在“编码不匹配”。单片机内部存的是字节流,而LCD/OLED屏(尤其ASCII模式)只认GB2312/BIG5或Unicode。常见坑:源码用UTF-8,但屏字库是GB2312,UTF-8汉字占3字节,GB2312占2字节,直接取模或发送必然乱码。
选编码原则:
1. 先确认屏幕字库支持什么编码(看手册,常见中景园OLED/液晶模块是GB2312)。
2. 源码文件统一保存为对应编码(Keil MDK用“Edit-Configuration-Encoding”设为GB2312;VS Code装插件把文件转成GB2312)。
3. 若字库只支持Unicode(如某些LVGL字体),则确保字符串是UTF-8/UTF-16。
4. 取模软件(如PCtoLCD2002)的“点阵格式”和取模方向要匹配屏驱动,否则即使编码对也会花屏。
建议直接用中文取模工具生成数组,避免运行时转换:
```c
const unsigned char hanzi[] = {0x00,0x20,...}; // 直接放置字模
```
若必须用字符串,先用在线工具把UTF-8转GB2312再写死。调试时可打印每个字节的hex,对照编码表核对。
mcuku 阿沐 · 2026-08-14