一、准备工作
1、oled ssd1306已经能连上v102,并且正确显示英文。
如有问题,请参考上一篇:https://blog.csdn.net/michaelzhouh/article/details/103182133
2、下载官网的代码
https://github.com/TPYBoard/TPYBoard-v102
“32.学习OLED显示中文”
因为我是用的4针脚IIC接口的显示屏,同理main.py修改
# I2C connected to Y9, Y10 (I2C bus 2)
display = SSD1306(pinout={'scl': 'Y9',
'sda': 'Y10'},
height=64,
external_vcc=False)
经过1和2,应该能正常执行,并显示示例的中文了。下面是扩展中文需要用到的。
3、中文转16进制utf8(临时用php写的,一看就明白不做过多介绍)
https://www.mhw666.com/tool/to_utf8?s=我爱你祖国
4、字模提取工具下载
http://tpyboard.com/download/tool/187.html
二、新字的添加步骤
打开官方的font.py最后,能看到“我爱你祖国”的中文,照着做
字模工具设置(非常重要)
下面放上我测试的font.py和main.py:
# font.py新增的中文部分
byte2 = {
0xe68891:[
0x04,0x0E,0x78,0x08,0x08,0xFF,0x08,0x08,0x0A,0x0C,0x18,0x68,0x08,0x08,0x2B,0x10,
0x40,0x50,0x48,0x48,0x40,0xFE,0x40,0x44,0x44,0x48,0x30,0x22,0x52,0x8A,0x06,0x02,
],#我
0xe788b1:[
0x00,0x01,0x7E,0x22,0x11,0x7F,0x42,0x82,0x7F,0x04,0x07,0x0A,0x11,0x20,0x43,0x1C,
0x08,0xFC,0x10,0x10,0x20,0xFE,0x02,0x04,0xF8,0x00,0xF0,0x10,0x20,0xC0,0x30,0x0E,
],#爱
0xe4bda0:[
0x08,0x08,0x08,0x11,0x11,0x32,0x34,0x50,0x91,0x11,0x12,0x12,0x14,0x10,0x10,0x10,
0x80,0x80,0x80,0xFE,0x02,0x04,0x20,0x20,0x28,0x24,0x24,0x22,0x22,0x20,0xA0,0x40,
],#你
0xe7a596:[
0x20,0x11,0x11,0xF9,0x09,0x11,0x11,0x39,0x55,0x95,0x11,0x11,0x11,0x11,0x17,0x10,
0x00,0xF8,0x08,0x08,0x08,0xF8,0x08,0x08,0x08,0xF8,0x08,0x08,0x08,0x08,0xFE,0x00
],#祖
0xe59bbd:[
0x00,0x7F,0x40,0x40,0x5F,0x41,0x41,0x4F,0x41,0x41,0x41,0x5F,0x40,0x40,0x7F,0x40,
0x00,0xFC,0x04,0x04,0xF4,0x04,0x04,0xE4,0x04,0x44,0x24,0xF4,0x04,0x04,0xFC,0x04
],#国
# 不忘初心
0xe4b88d:[
0x00,0x7F,0x00,0x00,0x01,0x01,0x03,0x05,0x09,0x11,0x21,0x41,0x81,0x01,0x01,0x01,
0x00,0xFC,0x80,0x80,0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x04,0x00,0x00,0x00,0x00
],
0xe5bf98:[
0x02,0x01,0xFF,0x10,0x10,0x10,0x10,0x1F,0x00,0x01,0x08,0x48,0x48,0x48,0x87,0x00,
0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x88,0x84,0x12,0x12,0xF0,0x00
],
0xe5889d:[
0x20,0x10,0x01,0xFC,0x08,0x10,0x10,0x34,0x58,0x94,0x14,0x10,0x10,0x11,0x12,0x14,
0x00,0x00,0xFC,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x04,0x28,0x10
],
0xe5bf83:[
0x00,0x02,0x01,0x00,0x00,0x04,0x04,0x24,0x24,0x24,0x44,0x44,0x84,0x04,0x03,0x00,
0x00,0x00,0x00,0x80,0x80,0x00,0x08,0x04,0x04,0x02,0x02,0x12,0x10,0x10,0xF0,0x00
],
# 牢记使命
0xe789a2:[
0x02,0x01,0x7F,0x40,0x81,0x11,0x11,0x1F,0x21,0x41,0x01,0xFF,0x01,0x01,0x01,0x01,
0x00,0x00,0xFE,0x02,0x04,0x00,0x00,0xF8,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00
],
0xe8aeb0:[
0x00,0x20,0x11,0x10,0x00,0x00,0xF0,0x11,0x11,0x11,0x11,0x11,0x15,0x19,0x10,0x00,
0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x08,0x00,0x00,0x00,0x02,0x02,0xFE,0x00
],
0xe4bdbf:[
0x10,0x10,0x1F,0x20,0x20,0x67,0x64,0xA4,0x27,0x20,0x22,0x21,0x20,0x21,0x22,0x2C,
0x40,0x40,0xFE,0x40,0x40,0xFC,0x44,0x44,0xFC,0x40,0x40,0x40,0x80,0x40,0x30,0x0E
],
0xe591bd:[
0x01,0x01,0x02,0x04,0x08,0x37,0xC0,0x00,0x3E,0x22,0x22,0x22,0x3E,0x22,0x00,0x00,
0x00,0x00,0x80,0x40,0x20,0xD8,0x06,0x00,0xF8,0x88,0x88,0x88,0xA8,0x90,0x80,0x80
]
}
import pyb
from ssd1306_lib import SSD1306
import font
led = pyb.Pin('Y8', pyb.Pin.OUT_PP)
# I2C connected to Y9, Y10 (I2C bus 2)
display = SSD1306(pinout={'scl': 'Y9',
'sda': 'Y10'},
height=64,
external_vcc=False)
display.poweron()
display.init_display()
arr = ['我爱你祖国', '不忘初心', '牢记使命']
while True:
for s in arr:
display.clear()
display.draw_text(8,8,'Welcome to China',)
display.draw_chinese(s, 1, 3)
display.display()
pyb.delay(2000)
上传 + RST运行,看结果吧。
大功告成!缺点是每次新字都要去生成16进制编码 + 取模 + 修改font.py,再使用,确实很麻烦。
有没有一种完美解决中英文+符号的混合显示的解决方案呢?我想是有的,HKZ16 点阵字体,正在研究中。