极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10487|回复: 4

如何让Arduino不用转码直接发中文字符给液晶屏显示?

[复制链接]
发表于 2021-12-17 10:42:15 | 显示全部楼层 |阅读模式
本帖最后由 京小亿 于 2021-12-18 22:14 编辑

前言:

技术售后中,技术论坛上,经常有学习、使用Arduino的小伙伴咨询“怎样能让Arduino IDE输出中文字符串”的问题。归根结底就是Arduino IDE使用的UTF8编码,不支持GB编码方式。


UFT8和GB码的区别:

UTF-8(Unicode TransformationFormat-8bit)是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。


UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。


GB2312编码适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆;新加坡等地也采用此编码。


GB的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示。


从文件大小看, UTF-8(更臃肿、加载更慢) > gb2312 (更小巧,加载更快)


不支持UTF8编码的设备

国内液晶屏内置中文字库绝大多数都是GB编码。这对于使用16进制串口数据的控制器没有问题。但ArduinoIDE使用的是UTF8编码方式(暂时没找到支持GB编码的版本之前有小伙伴说IDE1.8.15支持GB编码,我没用到过,有用过的小伙伴可以分享一下),导致Arduino IDE编程环境无法编辑GB码汉字的问题。Arduino里直接输出中文汉字时就会乱码。


为了解决这个问题,有很多朋友给出了多种解决方案:

有直接对汉字取字模的:



有建字符串数组的



也有直接将GB2312转成16进制的



更有大牛,直接修改Arduino IDE



为什么UTF8转成GB操作这么复杂?

主要就是因为UTF8编码是变长度的。它可能是一个字节,可以是两个字节、三个字节、四个字节、五个字节,最长六个字节。


举个例子:我们在ArduinoIDE中发送中文“试”,它的UTF8码值是:0xE8 0xAF 0x95一共是三个字节。设备接收端在接收过程中,刚收到两个字节(也就是0xE8 0xAF),此时对于判别UTF8编码是不符合规则的,但对GB码是合规的。如果按照GB码规格显示,这时候显示就是错误的。再到最后一个字节(0x95)进来时,就无法判别UTF8码了。


那么在Arduino IDE支持GB编码之前,有没有一种简便的方法,来解决中文汉字输出的问题?
答案就是:ATFC043串口智能屏。

Arduino IDE编译中文字符

这是Arduino IDE自带串口监视器的显示效果

这是ATFC043串口智能屏显示效果

ATFC043串口智能屏:

这款彩色串口屏是专门为Arduino平台开发的。和普通的串口屏相比,有两个最大特色:


1、应用简单:直接使用ArduinoIDE字符串打印模式输出。换句话说,用户不用写彩屏的代码,将彩屏接在Arduino UNO(或者其他控制器)的串口上,就可以像串口监视器(Serial Monitor)那样直接来显示串口数据。真正的“0”代码显示。


2、支持中文字符直接输出:我们再通过ArduinoIDE编译中文字符的时候,就不用再像前面那样,做一些转换的工作,同时支持UTF8和GB2312解码,直接在彩屏上显示中文字符。


这无疑对使用Arduino平台做创客项目的小伙伴带来很大的便捷。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2022-2-16 11:14:39 | 显示全部楼层
意思就是,我可以直接通过uno主板,直接发中文字符,彩屏就能自动显示?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-3 15:10:26 | 显示全部楼层
极客小粉丝 发表于 2022-2-16 11:14
意思就是,我可以直接通过uno主板,直接发中文字符,彩屏就能自动显示?

是的。可以零代码显示。
简单的讲,就把彩屏当成Arduino软件自带的串口监视器。
只要串口发数据就显示。无论是西文字符还是中文字符,都可以。

有兴趣,可以加QQ群交流一下:217142452
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-8 09:14:05 | 显示全部楼层




常规液晶屏的西文字符和汉字,都是使用点阵字库,16*16,32*32等等。这种字库的好处是响应速度快,缺点是显示效果单一,不能自由放大缩小。
现在ATF屏正在开发一个新功能:支持Windows系统字库TTF字库。这样彩屏上的字体大小就可以像电脑上一样,自由设置,还可以设置粗体,斜体等各种显示效果。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-8 10:21:05 | 显示全部楼层




我们不但可以直接输出中文字符,也可以使用矢量字库。

矢量字库和点阵字库相比,边缘光滑无颗粒感。而且一个字库,可以显示不同大小,非常方便。
对UI界面有更高要求的小伙伴,可以看看。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-28 16:02 , Processed in 0.043112 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表