已解决
micropython不用取模软件,直接输入中文并用OLED显示中文的方法
来自网友在路上 172872提问 提问时间:2023-10-30 05:07:16阅读次数: 72
最佳答案 问答题库728位专家为你答疑解惑
我之前写过一个不用取模显示中文的方法,但是那个方法没有解决编码问题,所以必须预先处理下编码才能显示。这次提供一个自带编码解决方案的显示方式。思路其实就是一个:查表,输入中文先查表查出GB2312编码然后用编码继续查表找到字磨点阵然后逐个点显示。
关于2312查表可以看这篇内容,它进行了编码工作为了解决他的模块GB2312问题,首先贴出GB2312编码查表的引用地址
然后我贴出本篇博客的主要内容,直接显示中文的方式。需要两个查表文件。下面是代码。
# update=1
# 上面1表示更新,0表示不更新
ver=1.5
#####
import machine,ssd1306,time
from machine import Pin
oled_vcc=Pin(27,Pin.OUT,value=1)
oled_gnd=Pin(26,Pin.OUT,value=0)
try:time.sleep(0.7)i2c=machine.SoftI2C(scl=machine.Pin(14),sda=machine.Pin(12)) #这里是引脚改成自己的,不能偷懒oled=ssd1306.SSD1306_I2C(128,64,i2c)oled.fill(0)oled.show()
except:print('OLED 屏幕故障')
class gb2312(object):def __init__(self):self.f = open('utf2gb2312.bin', 'r', encoding='utf-8')def b2i(self, byte): # bytes转intr = 0for i in range(len(byte)):r = (r << 8) + byte[i]return rdef i2b(self, num): # int转bytesnum = int(num, 16)return num.to_bytes(2, 'big')def one_char(self, char): # 将一个字符转化成gb2312utf_byte = char.encode('utf-8')r = self.B_S(0, 7296, self.b2i(utf_byte))gb2312_byte = self.i2b(r)# print(gb2312_byte)return gb2312_bytedef strs(self, st): # 将字符串转化成gb2312r = b''for s in st:# print(s.encode('utf-8'))if len(s.encode('utf-8')) <= 1:r += s.encode('utf-8')else:r += self.one_char(s)return rdef B_S(self, low, high, m): # 二分查找if 0 <= low <= high <= 7296:mid = (low + high) // 2self.f.seek(mid * 12)data = self.f.read(12)utf = data[0:6]if int(utf, 16) < m:return self.B_S(mid + 1, high, m)elif int(utf, 16) > m:return self.B_S(low, mid - 1, m)else:return data[7:-1]def get_gb2312(self,a):f = open('HZK16S','rb')a=self.strs(a)#a = a.encode('gb2312')area = a[0]-160index = a[1]-160offset = (94*(area-1)+(index-1))*32try:f.seek(offset)btxt=f.read(32)except:print("out range chinese")btxt=Nonef.close()return btxtdef __del__(self):self.f.close()
def chchar(oled,x,y,btxt,origin=1,color = 1):# if ((x+16)>= self.width) or ((y+16)>= self.height):# returnfor i in range(16):t1 = btxt[i<<1]t1 = int(bin(t1)[2:])t1 = "%08d" % t1t2 = btxt[(i<<1)+1]t2 = int(bin(t2)[2:])t2 = "%08d" % t2t = t1+t2for j in range(16):if t[j]=='1':oled.pixel((x+j),(y+i),color)oled.show()gb=gb2312()
chchar(oled,0,0,gb.get_gb2312('行') )
库表1
库表2
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"micropython不用取模软件,直接输入中文并用OLED显示中文的方法":http://eshow365.cn/6-27656-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: Harbor私有镜像仓库搭建
- 下一篇: YouTube博主数据信息资源