micropython oled中文_micropython中怎么将gb2312编码的字节流变成中文

展开全部

# -*- code: utf-8 -*-

# 在 micropython 中运行, 注意在运行目录下有 hzk12/16

# '啊' 是汉字区第1个汉字,62616964757a686964616fe59b9ee7ad9431333431353932对应数据为 ?不对?

# 0x00, 0x00, 0x0E, 0xFC, 0xEA, 0x08, 0xAA, 0x08,

# 0xAA, 0xE8, 0xAA, 0xA8, 0xAC, 0xA8, 0xAA, 0xA8,

# 0xAA, 0xA8, 0xAA, 0xA8, 0xEA, 0xE8, 0xAA, 0xA8,

# 0x0C, 0x08, 0x08, 0x08, 0x08, 0x28, 0x08, 0x10

# hzk16 试验: '一','我'正确, '啊' 不对?

# hzk12 字库的位长度是16*12

# seek位置 '一': 111168, '五': 103152, '我':102196

'''

int(x [,base ]) 将x转换为一个整数

long(x [,base ]) 将x转换为一个长整数

float(x ) 将x转换到一个浮点数

complex(real [,imag ]) 创建一个复数

str(x ) 将对象 x 转换为字符串

repr(x ) 将对象 x 转换为表达式字符串

eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象

tuple(s ) 将序列 s 转换为一个元组

list(s ) 将序列 s 转换为一个列表

chr(x ) 将一个整数转换为一个字符

unichr(x ) 将一个整数转换为Unicode字符

ord(x ) 将一个字符转换为它的整数值

hex(x ) 将一个整数转换为一个十六进制字符串

oct(x ) 将一个整数转换为一个八进制字符串

bytearray(x) 列表转为数组

'''

from machine import Pin, I2C

import framebuf

import ssd1306

i2c = I2C(sda=Pin(5), scl=Pin(4))

o = ssd1306.SSD1306_I2C(128,64,i2c)

def drawhz( hzs, xp, yp ):

for x in range( len(hzs)//2 ):

c = ((hzs[x*2] - 0xA1)* 94 + (hzs[x*2+1] - 0xA1)) * 24 #gb2312 转成 区位号

f = open( 'uc_hzk12', 'rb' )

f.seek( c )

hz = bytearray( f.read(24) )

f.close()

# 创建 hzk12:16x12 or hzk16:16x16 大小帧缓存区储存图片帧,水平扫描

fb1 = framebuf.FrameBuffer(hz, 16, 12, framebuf.MONO_HLSB)

o.blit( fb1, xp + x*12, yp ) # 将fb1帧缓存送至oled显示,起始位(38,16)

xp += 1

#在 repl 中, 粘贴的中文件变码了, 装载文件形式才正常

def drawhz2(hzs, xp, yp):

for x in range(len(hzs)):

f = open('uni2gb', 'rb')

f.seek( (ord(hzs[x])-0x4e00)*2 )

gb23 = bytearray(f.read(2))

f.close()

c = ((gb23[0] - 0xA1) * 94 + (gb23[1] - 0xA1)) * \

24 # gb2312 转成 区位号

f = open('uc_hzk12', 'rb')

f.seek(c)

hz = bytearray(f.read(24))

f.close()

# 创建 hzk12:16x12 or hzk16:16x16 大小帧缓存区储存图片帧,水平扫描

fb1 = framebuf.FrameBuffer(hz, 16, 12, framebuf.MONO_HLSB)

o.blit(fb1, xp + x*12, yp) # 将fb1帧缓存送至oled显示,起始位(38,16)

xp += 1

o.fill(0)

# uPY没法实现unicode 转 gb2312, 要借助cpython 转化成 gb2312

#现在可用 文件查表法 uni2gb (unicode-0x4e00)转gb2312码

hzs = ( 206,210, 185,253, 193,249, 210,187, 189,218 ) #每两字节表示一个汉字

drawhz2( '\u98de\u96ea\u8fde\u5929', 0, 0 )

drawhz2( '\u98de\u96ea\u8fde\u5929\u5c04\u767d\u9e7f', 0, 13 ) #飞雪连天

drawhz( hzs, 0, 26 )

drawhz( hzs, 16, 39)

drawhz( hzs, 16, 52 )

o.show()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值