为什么单片机显示汉字乱码?编码怎么选?

嵌入式 · 9 浏览
为什么单片机显示汉字乱码?编码怎么选?

回答(4)

我一般把汉字做成const数组直接送显,不用字符串,彻底避开编码。缺点是不方便后期改内容,所以产品文案多的会放外部Flash字库+索引表。自己权衡吧。
嵌入式老王 · 2026-08-14
补充一个:如果你用串口助手显示中文乱码,那是电脑端的问题,不是单片机。把串口助手的字符集改成GBK或UTF-8试一下,很多软件默认ASCII。别换屏,先调软件。
码农小刘 · 2026-08-14
我遇到过最傻的情况:源码显示正常,烧进去乱码。后来发现IAR默认保存UTF-8,屏幕要GB2312。把文件另存为GB2312就好了,两分钟解决,以后先看编译器右下角编码。
老周不加班 · 2026-08-14
单片机显示汉字乱码,根源几乎都在“编码不匹配”。单片机内部存的是字节流,而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