diff --git a/README.md b/README.md index 72c07cf5fd500f087e2828bd9d2bd5e07f575ae1..1dfcf76cfcd2d19068a090b00640a642608d9eed 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ $ client/youyuan_16.cmd | 高度 | 16 | 像素 | | 水平偏移 | 0 | 像素 | | 垂直偏移 | 0 | 像素 | -| 扫描方式 | 水平扫描 | 不支持`垂直扫描` | +| 扫描方式 | 垂直扫描 | | | 字节顺序 | 低位在前 | | #### 使用电脑测试 diff --git a/client b/client index dd2ab11b92ad8b0a2bc1e068a8ca20ed6419970f..b7f3bddef00be9b107202ff0fcfa943cde05060c 160000 --- a/client +++ b/client @@ -1 +1 @@ -Subproject commit dd2ab11b92ad8b0a2bc1e068a8ca20ed6419970f +Subproject commit b7f3bddef00be9b107202ff0fcfa943cde05060c diff --git a/fontlib.py b/fontlib.py index 838543394aedd9a6497accf46aaae703fdbd74a7..b7df014831b8d4632092d4b742c2eaccbaf6e78c 100644 --- a/fontlib.py +++ b/fontlib.py @@ -6,6 +6,7 @@ Gitee: https://gitee.com/walkline/micropython-new-fontlib import os import gc import struct +import math try: @@ -287,20 +288,34 @@ def run_test(): data_size = fontlib.data_size font_height = fontlib.font_height bytes_per_row = int(data_size / font_height) - chars_per_row = 6 - - for char in range(len(buffer_list) // chars_per_row + 1): - for row in range(font_height): - for buffer in buffer_list[char * chars_per_row:char * chars_per_row + chars_per_row]: - for index in range(bytes_per_row): - data = buffer[1][row * bytes_per_row + index] - if fontlib.byte_order == FontLib.BYTE_ORDER_MSB: - data = reverseBits(buffer[1][row * bytes_per_row + index]) - - print('{:08b}'.format(data).replace('0', '.').replace('1', '@'), end='') - print(' ', end='') + chars_per_row = 150 // font_height + + if fontlib.scan_mode == FontLib.SCAN_MODE_VERTICAL: + for char in range(math.ceil(len(buffer_list) / chars_per_row)): + for count in range(bytes_per_row): + for col in range(8): + if count * 8 + col >= font_height: continue + for buffer in buffer_list[char * chars_per_row:char * chars_per_row + chars_per_row]: + for index in range(count * font_height, count * font_height + font_height): + data = ''.join(reversed('{:08b}'.format(buffer[1][index]))) + print('{}'.format(data[col].replace('0', '.').replace('1', '@')), end='') + print(' ', end='') + print('') + print('') + else: + for char in range(math.ceil(len(buffer_list) / chars_per_row)): + for row in range(font_height): + for buffer in buffer_list[char * chars_per_row:char * chars_per_row + chars_per_row]: + for index in range(bytes_per_row): + data = buffer[1][row * bytes_per_row + index] + if fontlib.byte_order == FontLib.BYTE_ORDER_MSB: + data = reverseBits(buffer[1][row * bytes_per_row + index]) + + offset = 8 if (index + 1) * 8 < font_height else 8 - ((index + 1) * 8 - font_height) + print('{:08b}'.format(data)[:offset].replace('0', '.').replace('1', '@'), end='') + print(' ', end='') + print('') print('') - print('') if __name__ == '__main__': diff --git a/main.py b/main.py index bbe664aeb959192cead15f06ac765cbb3474f274..eb7ec6302ecfb8880c66e77ca22f302df7c488c0 100644 --- a/main.py +++ b/main.py @@ -151,6 +151,10 @@ class FontLibTest(object): chars =\ +'''  清晨4:50,老刀穿过熙熙攘攘的步行街,去找彭蠡。 +  从垃圾站下班之后,老刀回家洗了个澡,换了衣服。白色衬衫和褐色裤子,这是他唯一一套体面衣服,衬衫袖口磨了边,他把袖子卷到胳膊肘。老刀四十八岁,没结婚,已经过了注意外表的年龄,又没人照顾起居,这一套衣服留着穿了很多年,每次穿一天,回家就脱了叠上。他在垃圾站上班,没必要穿得体面,偶尔参加谁家小孩的婚礼,才拿出来穿在身上。这一次他不想脏兮兮地见陌生人。他在垃圾站连续工作了五小时,很担心身上会有味道。''' + +chars2 =\ '''  问题,到底应该如何实现。   既然如此,我们都知道,只要有意义,那么就必须慎重考虑。   现在,解决问题的问题,是非常非常重要的。 @@ -159,9 +163,7 @@ chars =\   一般来说,生活中,若问题出现了,我们就不得不考虑它出现了的事实。   维龙曾经说过,要成功不需要什么特别的才能,只要把你能做的小事做得好就行了。   这似乎解答了我的疑惑。 -  这种事实对本人来说意义重大,相信对这个世界也是有一定意义的。 -''' -chars2 = '几凡也习丰井无勿正轧占田它地因网乔乒仿次军她巡寿找批走抗扭估体伯饮即妙到贤忠咏使周兔泡陕' +  这种事实对本人来说意义重大,相信对这个世界也是有一定意义的。''' if __name__ == '__main__': @@ -172,8 +174,12 @@ if __name__ == '__main__': oled = SSD1306_I2C(128, 64, i2c) runner = FontLibTest(oled) - runner.load_font('client/combined.bin') - - runner.run_test1(chars) # 一次性读取所有字符数据然后逐个显示 - # runner.run_test2(chars) # 一次读取并显示一个字符数据 + # runner.load_font('client/combined.bin') + # runner.load_font('client/customize.bin') + # runner.load_font('client/combined_hmsb.bin') + # runner.load_font('client/customize_hmsb.bin') + runner.load_font('client/combined_vlsb.bin') + + # runner.run_test1(chars) # 一次性读取所有字符数据然后逐个显示 + runner.run_test2(chars) # 一次读取并显示一个字符数据 # runner.run_test3(chars) # 一次读取一屏并显示 diff --git a/test.py b/test.py index cb9385dcb07e905fe784ccf8008319197d109882..46edf6ea4cb9bb0f9e4b82b23112e89256679121 100644 --- a/test.py +++ b/test.py @@ -7,6 +7,7 @@ \x10\x00 ...#............ \x10\x00 ...#............ \x10\x00 ...#............ + \x10\x00 ...#............ \x10\x00 ...#............ \x00\x00 ................ @@ -18,39 +19,74 @@ ''' ''' -\x00\x00 -\x00\x00 -\x00\x00 -\x00\x00 -\x1f\xf6 -\x08\x00 -\x00\x00 -\x00\x00 -\x00\x00 -\x00\x00 -\x00\x00 -\x00\x00 -\x00\x00 -\x00\x00 -\x00\x00 -\x00\x00 +\x00 +\x00 +\x00 +\xf8 +\x00 +\x00 +\x00 +\x00 +\x00 +\x00 +\x00 +\x00 +\x00 +\x00 +\x00 +\x00 + +\x00\x00\x0030\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 +''' + ''' +vlsb +0x00,0x00, 00000000 00000000 +0x00,0x00, 00000000 00000000 +0x00,0x00, 00000000 00000000 +0xF8,0x33, 00110011 11111000 +0x00,0x30, 00110000 00000000 +0x00,0x00, 00000000 00000000 +0x00,0x00, 00000000 00000000 +0x00,0x00, 00000000 00000000 +0x00,0x00, 00000000 00000000 +0x00,0x00, 00000000 00000000 +0x00,0x00, 00000000 00000000 +0x00,0x00, 00000000 00000000 +0x00,0x00, 00000000 00000000 +0x00,0x00, 00000000 00000000 +0x00,0x00, 00000000 00000000 +0x00,0x00, 00000000 00000000 +''' + from struct import unpack # buffer_list = [[33, b'\x32\x44\x13\xFc\x10\x48\x13\xB8\x19\x10\x10\xA0\x10\xE0\x03\x1E\x0C\x00\x00\x00\x00\x00\x0c\x40\x7B\xFC\x4A\x48\x52\x48\x55\xF0']] -buffer_list = [33, b'\x00\x00\x00\x00\x00\x00\xF8\x33\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00']] +# buffer_list = [[33, b'\x00\x00\x00\x00\x00\x00\xF8\x33\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00']] +buffer_list = [[33, b'\x00\x00\x00\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0030\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00']] data_size = 32 font_height = 16 bytes_per_row = int(data_size / font_height) +chars_per_row = 6 -for row in range(font_height): - for buffer in buffer_list: - for index in range(bytes_per_row): - data = buffer[1][row * bytes_per_row + index] - print('{:08b}'.format(data).replace('0', '.').replace('1', '@'), end='') - print(' ', end='') +for char in range(len(buffer_list) // chars_per_row + 1): + for row in range(font_height): + for buffer in buffer_list[char * chars_per_row:char * chars_per_row + chars_per_row]: + for index in range(bytes_per_row): + data = buffer[1][row * bytes_per_row + index] + print('{:08b}'.format(data).replace('0', '.').replace('1', '@'), end='') + print(' ', end='') + print('') print('') +# for row in range(font_height): +# for buffer in buffer_list: +# for index in range(bytes_per_row): +# data = buffer[1][row * bytes_per_row + index] +# print('{:08b}'.format(data).replace('0', '.').replace('1', '@'), end='') +# print(' ', end='') +# print('') + @@ -76,4 +112,5 @@ def main(): oled.show() if __name__ == "__main__": - main() + pass + # main() diff --git a/test.txt b/test.txt new file mode 100644 index 0000000000000000000000000000000000000000..0811fd808d3099789d97d9e87a77b22716f1cc9f --- /dev/null +++ b/test.txt @@ -0,0 +1,42 @@ +### load font file: 24.531 ms +HZK Info: client/combined.bin + file size : 303520 + font height : 16 + data size : 32 + scan mode : Horizontal + byte order : LSB + characters : 8932 +### get 227 chars: 3347.001 ms, avg: 14.7445 ms + + +### load font file: 23.944 ms +HZK Info: client/combined_hlsb.bin + file size : 303520 + font height : 16 + data size : 32 + scan mode : Horizontal + byte order : MSB + characters : 8932 +### get 227 chars: 3332.982 ms, avg: 14.68274 ms + + +### load font file: 26.361 ms +HZK Info: client/customize.bin + file size : 63344 + font height : 16 + data size : 32 + scan mode : Horizontal + byte order : LSB + characters : 1868 +### get 227 chars: 1242.115 ms, avg: 5.471872 ms + + +### load font file: 24.269 ms +HZK Info: client/customize_hmsb.bin + file size : 63344 + font height : 16 + data size : 32 + scan mode : Horizontal + byte order : MSB + characters : 1868 +### get 227 chars: 1239.848 ms, avg: 5.461885 ms