|
楼主 |
发表于 2019-8-15 17:16:24
|
显示全部楼层
本帖最后由 lyy-cy 于 2019-8-15 17:22 编辑
今天搞定了中英文混合显示,和字库。具体过程如下:
1、将可能用到的汉字用记事本随便记录进去;
- 穿衣炎热热舒适较舒适较冷冷寒冷旅游适宜较适宜一般较不宜不太适宜不适宜洗车适宜较适宜较不宜不宜紫外线最弱弱中等强很强
- 晴
- 多云 Cloudy
- 晴间多云 Partly Cloudy
- 晴间多云 Partly Cloudy
- 大部多云 Mostly Cloudy
- 大部多云 Mostly Cloudy
- 阴Overcast
- 阵雨 Shower
- 雷阵雨 Thundershower
- 雷阵雨伴有冰雹 Thundershower with Hail
- 1小雨 Light Rain
- 1中雨 Moderate Rain
- 1大雨 Heavy Rain
- 1暴雨 Storm
- 1大暴雨 Heavy Storm
- 1特大暴雨 Severe Storm
- 1冻雨 Ice Rain
- 2雨夹雪 Sleet
- 2阵雪 Snow Flurry
- 2小雪 Light Snow
- 2中雪 Moderate Snow
- 2大雪 Heavy Snow
- 2暴雪 Snowstorm
- 2浮尘 Dust
- 2扬沙 Sand
- 2沙尘暴 Duststorm
- 2强沙尘暴 Sandstorm
- 3雾 Foggy
- 3霾 Haze
- 3风 Windy
- 3大风 Blustery
- 3飓风 Hurricane
- 3热带风暴 Tropical Storm
- 3龙卷风 Tornado
- 3冷 Cold
- 3热 Hot
- 9未知 Unknown
- 说明
- 国外的晴天 Fair 表示没有大风或者大雾的晴天
- 国内的 Sunny/Clear 表示阳光充足,会有大风或大雾等天气
- 今天明天有升高降低温度带伞级出门,。?!★℃↑↓
复制代码
2、写个程序将多余的字符去掉,保存成字库汉字.txt;
- filepath_in = r'1汉字准备.txt'
- filepath_out = r'3字库汉字.txt'
- #for line in open(filepath,'r',encoding='utf-8'):
- # print(line, end='')
- han_list = []
- with open(filepath_in,'r',encoding='gbk') as f_in:
- for x in f_in:
- for i in x:
- if ord(i) > 127:
- print(i)
- if i not in han_list:
- han_list.append(i)
- else:
- pass
- han_list.sort() #排序
- print(han_list) #打印测试下
- with open(filepath_out,'w',encoding='gbk') as f_out:
- for i in han_list:
- f_out.write(i)
复制代码
3、再写个程序将汉字作key,汉字在字库中的偏移量做value;
- dic_han_40 = {'℃': 0, '↑': 200, '↓': 400, '★': 600, '。': 800, '一': 1000, '不': 1200, '中': 1400, '云': 1600, '今': 1800, '会': 2000, '伞': 2200, '伴': 2400, '低': 2600, '充': 2800, '光': 3000, '内': 3200, '冰': 3400, '冷': 3600, '冻': 3800, '出': 4000, '升': 4200, '卷': 4400, '国': 4600, '外': 4800, '多': 5000, '大': 5200, '天': 5400, '太': 5600, '夹': 5800, '宜': 6000, '寒': 6200, '小': 6400, '尘': 6600, '带': 6800, '度': 7000, '弱': 7200, '强': 7400, '很': 7600, '或': 7800, '扬': 8000, '旅': 8200, '明': 8400, '晴': 8600, '暴': 8800, '最': 9000, '有': 9200, '未': 9400, '气': 9600, '沙': 9800, '没': 10000, '洗': 10200, '浮': 10400, '温': 10600, '游': 10800, '炎': 11000, '热': 11200, '特': 11400, '的': 11600, '知': 11800, '示': 12000, '穿': 12200, '等': 12400, '紫': 12600, '级': 12800, '线': 13000, '者': 13200, '舒': 13400, '般': 13600, '衣': 13800, '表': 14000, '说': 14200, '足': 14400, '车': 14600, '较': 14800, '适': 15000, '部': 15200, '门': 15400, '间': 15600, '阳': 15800, '阴': 16000, '阵': 16200, '降': 16400, '雨': 16600, '雪': 16800, '雷': 17000, '雹': 17200, '雾': 17400, '霾': 17600, '风': 17800, '飓': 18000, '高': 18200, '龙': 18400, '!': 18600, ',': 18800, '?': 19000}
复制代码
4、用软件将字库汉字生成二进制字库文件;
5、最终代码- #我的oled的地址 60 0x3c 0b111100
- from machine import Pin, I2C
- i2c = I2C(scl=Pin(26), sda=Pin(27), freq=400000)
- oled = SSD1306_I2C(128, 64, i2c, addr=0x3c, external_vcc=False)
- #垂直水平清屏
- show_buffer = bytearray([0x0]*8*128)
- oled.show(0,7,0,127,show_buffer)
- #页地址清屏
- for x in range(8):
- show_buffer = bytearray([0x00]*128)
- oled.pag_show(0,x,show_buffer)
- dic_han_40 = {'℃': 0, '↑': 200, '↓': 400, '★': 600, '。': 800, '一': 1000, '不': 1200, '中': 1400, '云': 1600, '今': 1800, '会': 2000, '伞': 2200, '伴': 2400, '低': 2600, '充': 2800, '光': 3000, '内': 3200, '冰': 3400, '冷': 3600, '冻': 3800, '出': 4000, '升': 4200, '卷': 4400, '国': 4600, '外': 4800, '多': 5000, '大': 5200, '天': 5400, '太': 5600, '夹': 5800, '宜': 6000, '寒': 6200, '小': 6400, '尘': 6600, '带': 6800, '度': 7000, '弱': 7200, '强': 7400, '很': 7600, '或': 7800, '扬': 8000, '旅': 8200, '明': 8400, '晴': 8600, '暴': 8800, '最': 9000, '有': 9200, '未': 9400, '气': 9600, '沙': 9800, '没': 10000, '洗': 10200, '浮': 10400, '温': 10600, '游': 10800, '炎': 11000, '热': 11200, '特': 11400, '的': 11600, '知': 11800, '示': 12000, '穿': 12200, '等': 12400, '紫': 12600, '级': 12800, '线': 13000, '者': 13200, '舒': 13400, '般': 13600, '衣': 13800, '表': 14000, '说': 14200, '足': 14400, '车': 14600, '较': 14800, '适': 15000, '部': 15200, '门': 15400, '间': 15600, '阳': 15800, '阴': 16000, '阵': 16200, '降': 16400, '雨': 16600, '雪': 16800, '雷': 17000, '雹': 17200, '雾': 17400, '霾': 17600, '风': 17800, '飓': 18000, '高': 18200, '龙': 18400, '!': 18600, ',': 18800, '?': 19000}
- import time
- #汉字 40*40点阵,每次取一列 5个字节 5*8 = 40 逐列扫描
- #首先开辟一块显存,对应要显示的面积 x*y*字数/8 一个字节8个点
- buff = [0x00]*(40*40*3//8) #40pix x 40 pix 三个字 共600个bytes
- <span style="background-color: yellow;">han_font_file = open('han40x40_tianqi_songti.fon',"rb")
- en_font_file = open('en_20x40_kaiti.FON',"rb")</span>
- nubBytes = 5 #每次写入5个字节(5为步进) 5*8 = 40 一列40个点
- str = ' 明天晴天,温度2326℃↑↑。出门带伞!Ntp ok. '
- for one_char in str:
- if ord(one_char) <= 128:
- offset = (ord(one_char))*100
- en_font_file.seek(offset)
- for i in range(20): #每个英文100个bytes
- han_tem = en_font_file.read(nubBytes) #将一个汉字的5个字节取出
- buff += han_tem # 将这5个bytes加到尾部
- del buff[0:5] #删除前面的5个bytes
- show_buffer = (bytearray(buff)) #整个缓存转为字节串
- oled.show(2,6,0,127,show_buffer) #将整个缓存写入
- time.sleep_ms(1)
- else:
- offset = dic_han_40[one_char]
- han_font_file.seek(offset)
- for i in range(40): #每个汉字200个bytes 每次写入5个字节(5为步进) 5*8 = 40 一列40个点
- han_tem = han_font_file.read(nubBytes) #将一个汉字的5个字节取出
- buff += han_tem # 将这5个bytes加到尾部
- del buff[0:5] #删除前面的5个bytes
- show_buffer = (bytearray(buff)) #整个缓存转为字节串
- oled.show(2,6,0,127,show_buffer) #将整个缓存写入
- time.sleep_ms(1)
- for j in range(0,2): #写入10列作为两个字之间的空白
- buff += [0x00]*5
- del buff[0:5]
- show_buffer = (bytearray(buff))
- oled.show(2,6,0,127,show_buffer)
- time.sleep_ms(1)
-
- han_font_file.close()
- en_font_file.close()
复制代码
看了论坛几位朋友的帖子,并且百度后,算是搞明白了。准备买个编程器和 W25Q64芯片,将字库写入。现在用的是文件形式。
|
|