MakerLab创客实验室 — Let's Make something.
现在注册
已注册用户请 登入

Mini Panel真正开启中文汉字支持u8glib Marlin

3D打印机上用的LCD控制器都是英文的菜单,给新手带来了障碍,MakerLab现已开发支持中文的Marlin版本
Mini Panel简介48 U8glib如何显示中文74 U8glib如何定制字体8 Marlin中文版LCD界面25 如何使用Marlin中文版19 Marlin LCD菜单的功能11 bdf字体文档下载1
Andy large avatar
MakerLab创客实验室  ›  学习系统  ›  3d 打印  ›  Mini Panel真正开启中文汉字支持u8glib Marlin

Marlin中文版LCD界面

By Andy at 2 年前 , 16994 次浏览

如果前面的操作已经掌握了,定制Marlin固件的中文(汉字)LCD界面就不难了。其实就是生成自己的字体数据,并且开始使用这些数据罢了。

更漂亮的字体

自己画的字体实在是不太好看,关键是不协调,没有统一的风格,尤其是中英文一起显示的时候,英文字母显得更加难看了。

所以要换一个更加漂亮专业的字体。在互联网上找了很多,终于找到了一款漂亮的字体,并且字体都是11像素的(有其它像素版本),并且是开源的,最主要的是提供bdf格式文件,这让我们省去了转换格式的麻烦。真是太棒了,感谢Firefly font 的作者,由于网站上没有说明作者信息,所以具体的作者信息我并不了解,如果你知道,可以在本文最下方留言,谢谢了。firefly_R11字体网盘下载:http://pan.baidu.com/s/1sjLSGrF

欣赏一下Firefly字体吧,图片中的中文支持 By 创客实验室 MakerLab.me都是Firefly字体,是不是漂亮多了?!:

提取需要的汉字

由于Firefly字体包含了所有的中文,全部使用是不现实的,所以需要把不需要的汉字或符号删掉,只保留最需要的符号及汉字,并且总数量最好能够控制在1~255之间。我提取了Firefly中,marlin固件所需要的字符,并且对这些字符(主要是汉字和其它不常用ASCII码)进行了重新编码,让汉字可以通过8位ASCII码来显示,缺点是这样的编码跟汉字的unicode没有任何关系。我提取的汉字及8位编码如下,仅列出汉字部分:

表格请参考下面回复部分
中文字体表格

显示汉字

Marlin固件中所需要的字体数据在这里:Marlin中文字体数据
看到这里,如果你明白了我之前所说的内容,你应该知道如何显示列表中任意一个汉字了。你只需要下载上述的代码,导入到U8glib自带的helloworld例子中就可以了,效果如下:

上述例子代码在这里,你可以试试其它汉字的显示:完整的例子代码

本文最后更新于:2 年前
25 回复
旺我 medium avatar
#1 - 2 年前
旺我

太好了!!LCD了看了几天,正烦E文呢!!还有开屏的二个画面哪个FR什么100%现在也不知道什么意思....

Andy medium avatar
#2 - 2 年前
Andy

@旺我 FR是feedrate,就是速度

Andy medium avatar
#3 - 2 年前
Andy

简体中文字符信息表格

ASCII码(16进制)ASCII码(10进制)字符unicodeASCII码(16进制)ASCII码(10进制)字符unicode
0x7F127521B0xAB1716324
0x801285BA20xAC1726536
0x811295B9E0xAD17379FB
0x821309A8C0xAE1748F74
0x831315BA40xAF175901F
0x841324E2D 0xB01765EA6
0x8513365870xB11775934
0x86134652F0xB21785E8A
0x8713563010xB317998CE
0x8813651C60xB41806247
0x8913759070xB518163A7
0x8A13862530xB61825236
0x8B13953700xB71836700
0x8C1405B580xB81845927
0x8D14150A80xB91855C0F
0x8E14253610xBA18656E0
0x8F1435DF20xBB1876570
0x9014463D20xBC1884FE1
0x9114551650xBD189606F
0x9214662D40xBE190754C
0x9314751FA0xBF1919762
0x941484E3B0xC019265E0
0x9514983DC0xC119352A0
0x9615053550xC21946BCF
0x9715181EA0xC31958FD0
0x9815252A80xC41964FDD
0x991535F000xC519753C2
0x9A15459CB0xC61988F7D
0x9B15551730xC71996062
0x9C15695ED0xC8200590D
0x9D1576B650xC92015382
0x9E1588FDB0xCA2025237
0x9F1599A710xCB20365B0
0xA016056DE0xCC2048C03
0xA1161539F0xCD2056574
0xA216270B90xCE2066682
0xA31638BBE0xCF207505C
0xA41645B9A0xD02087EE7
0xA516598840xD12097EED
0xA616670ED0xD22106B62
0xA7167964D0xD32117531
0xA81686E290xD42124F11
0xA916975350xD52137720
0xAA1706E90
恶作剧 medium avatar
#4 - 2 年前
恶作剧

能把其它的一些字符贴出来么?

Andy medium avatar
#5 - 2 年前
Andy

@恶作剧 其它字符基本就是可显示的ASCII码了,比如字母,数字,常见符号等

恶作剧 medium avatar
#6 - 2 年前
恶作剧

32到126之间是可显示的ASCII码,那么214到255之间是什么呢?

Andy medium avatar
#7 - 2 年前
Andy

@恶作剧 大部分是空的,部分特殊符合是marlin需要用的,你可以看一下marlin代码就知道了。比如文件夹图标、向右箭头等等

恶作剧 medium avatar
#8 - 2 年前
恶作剧

因为我看了下你那个marlin的中文版,为什么那个文件夹图标会出现乱码呢?怎么才能把它修改好了?

Andy medium avatar
#9 - 2 年前
Andy

@恶作剧 那个图标找不到合适的,所以。。。

恶作剧 medium avatar
#10 - 2 年前
恶作剧

u8g_font_m2icon_9字体里面的0x41感觉挺像个文件夹图标的

define_ni medium avatar
#11 - 2 年前
define_ni

我有个问题一直想问忍不住要问了,自带中文字库的12864直接调用中文感觉要简单很多,Mega controller能用Full Graphic Smart Controller吗?

Andy medium avatar
#12 - 2 年前
Andy

@define_ni 可以用,但是并不推荐,因为字体都是16*16像素的,显得大而笨重,很不美观。Full Graphic Smart Controller是可以用我的中文固件的。你可以试试看

bot medium avatar
#13 - 2 年前
bot

信息对应表里的ASCII码和字符怎么建立的对应关系

Andy medium avatar
#14 - 2 年前
Andy

@bot 汉字部分就是顺序问题,我完全可以把两个汉字进行互换,对应显示用的ASCII码也就是需要互换。跟你的汉字生成数据的顺序有关。

wanhaixin medium avatar
#15 - 2 年前
wanhaixin

更改为英文界面,如何更改欢迎界面呢?谢谢!

學習者 medium avatar
#17 - 2 年前
學習者

你好 我想請教您 我字編碼出來了 "中" 這個字 我該從哪裡 設定 "中" 的ASCII码(16进制)為0xD6

Andy medium avatar
#18 - 2 年前
Andy

@學習者 简单说就是这个字在字库文件中的排序,如果把它放在第一个,就是0x01,如果放在第2个,就是0x02,以此类推

學習者 medium avatar
#19 - 2 年前
學習者

您好 https://gist.github.com/AndySze/67b6ebf1f828340c296c 我再這個資料庫裡 最下面加入了 編碼好我要的字 當我點下 打勾 卻跑出 In file included from /dogm_lcd_implementation.h:38,
from ultralcd.cpp:36:
dogm_font_data_marlin.h:599: error: too many initializers for 'const u8g_fntpgm_uint8_t [3819]'
還請您幫我糾正 哪裡錯誤 謝謝

yanzy_002 medium avatar
#20 - 2 年前
yanzy_002

andy: 能否提供firefly字库给我

小羊 medium avatar
#22 - 2 年前
小羊

@Andy 简体中文字符信息表格是怎么生成的啊!

Andy medium avatar
#23 - 2 年前
Andy

@小羊 excel自己总结的,不是自动生成的

小羊 medium avatar
#24 - 2 年前
小羊

@Andy 如果我已经把中文字体数据生成好了,是不是放在Marlin固件中的dogm_font_data_marlin.h中?