From a4d2148012df68273a8340f8d54f67afb3fe2815 Mon Sep 17 00:00:00 2001 From: Walkline Wang Date: Tue, 17 Aug 2021 00:41:09 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=AD=90=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- research | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/research b/research index df4f9ce..02aa828 160000 --- a/research +++ b/research @@ -1 +1 @@ -Subproject commit df4f9ce7e38ac25c5e41321b823bd0f9f1d6a375 +Subproject commit 02aa828ae710063e0c9faf4741d51d19e588f81d -- Gitee From be7937ae1233a72b3f3fed899d5ab6d759789e21 Mon Sep 17 00:00:00 2001 From: Walkline Wang Date: Tue, 17 Aug 2021 11:45:09 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=AD=90=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client b/client index cc516ad..efcd9b6 160000 --- a/client +++ b/client @@ -1 +1 @@ -Subproject commit cc516ad64bbd2810db4422b0e431c2014fbda1e9 +Subproject commit efcd9b6820fb7d17cf6ac2b778fc4250bf09bfbb -- Gitee From 55f0f83e90123e6ee3d591a554de9fbd7b176c52 Mon Sep 17 00:00:00 2001 From: Walkline Wang Date: Tue, 17 Aug 2021 14:18:51 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=AD=90=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client b/client index efcd9b6..183f23b 160000 --- a/client +++ b/client @@ -1 +1 @@ -Subproject commit efcd9b6820fb7d17cf6ac2b778fc4250bf09bfbb +Subproject commit 183f23b081b078a7304dcf92d705402d979606b6 -- Gitee From 6575f5a737b5ed56d2c21b53edc4c3a7ff33c595 Mon Sep 17 00:00:00 2001 From: Walkline Wang Date: Tue, 17 Aug 2021 14:19:59 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=9E=82=E7=9B=B4?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E6=96=B9=E5=BC=8F=E6=95=B0=E6=8D=AE=EF=BC=8C?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/test.py b/test.py index aa398c3..b23282a 100644 --- a/test.py +++ b/test.py @@ -17,9 +17,28 @@ \x00\x00 ................ ''' +''' +\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 +''' 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'\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']] data_size = 32 font_height = 16 bytes_per_row = int(data_size / font_height) -- Gitee From 06a91074920ea65ef6f0ff931d25b8249bda8428 Mon Sep 17 00:00:00 2001 From: Walkline Wang Date: Tue, 17 Aug 2021 14:40:23 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/test.py b/test.py index b23282a..cb9385d 100644 --- a/test.py +++ b/test.py @@ -49,4 +49,31 @@ for row in range(font_height): data = buffer[1][row * bytes_per_row + index] print('{:08b}'.format(data).replace('0', '.').replace('1', '@'), end='') print(' ', end='') - print('') \ No newline at end of file + print('') + + + + + +def main(): + from machine import I2C, Pin + from drivers.ssd1306 import SSD1306_I2C + import framebuf + + global oled + + i2c = I2C(0, scl=Pin(18), sda=Pin(19)) + slave_list = i2c.scan() + + if slave_list: + print('slave id: {}'.format(slave_list[0])) + oled = SSD1306_I2C(128, 64, i2c) + + char = bytearray( b'\x00\x00\x00\x00?\xf8\x11\x10\t\x10?\xfcD\x02B\x02\x1f\xf8\x04\x00\x07\xf8\x0e\x08\x13\x10 \xe0\x01\xe0\x1e\x1e') + buffer = framebuf.FrameBuffer(char, 16, 16, framebuf.MONO_HLSB) + oled.fill(0) + oled.blit(buffer, 20, 20) + oled.show() + +if __name__ == "__main__": + main() -- Gitee From 01040f97ff7f3d060fbe355bdc937ea7539673d1 Mon Sep 17 00:00:00 2001 From: Walkline Wang Date: Tue, 17 Aug 2021 14:44:15 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20scan=5Fmode=20?= =?UTF-8?q?=E5=92=8C=20byte=5Forder=20=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fontlib.py | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/fontlib.py b/fontlib.py index 5ecae72..68c6518 100644 --- a/fontlib.py +++ b/fontlib.py @@ -35,9 +35,11 @@ Header Data Sample: [1] b'\x10' - font height [2] b'\xe4"' - character counts [1] b'\x01' - has index table + [1] b'\x00' - scan mode + [1] b'\x00' - byte order [4] b'$E\x00\x00' - ascii start address [4] b'$Q\x00\x00' - gb2312 start address - [4] b'\\\x00A\x00' - reserved + [2] b'\x00\x00' - reserved ''' class FontLibHeader(object): LENGTH = 24 @@ -51,9 +53,11 @@ class FontLibHeader(object): self.font_height,\ self.characters,\ self.has_index_table,\ + self.scan_mode,\ + self.byte_order,\ self.ascii_start,\ self.gb2312_start,\ - _ = struct.unpack('<4sIBHBII4s', header_data) + _ = struct.unpack('<4sIBHBBBII2s', header_data) if self.identify not in (b'FMUX',): raise FontLibHeaderException('Invalid font file') @@ -67,6 +71,11 @@ class FontLibHeader(object): class FontLib(object): + SCAN_MODE_HORIZONTAL = BYTE_ORDER_LSB = 0 + SCAN_MODE_VERTICAL = BYTE_ORDER_MSB = 1 + SCAN_MODE = {SCAN_MODE_HORIZONTAL: 'Horizontal', SCAN_MODE_VERTICAL: 'Vertical'} + BYTE_ORDER = {BYTE_ORDER_LSB: 'LSB', BYTE_ORDER_MSB: 'MSB'} + def __init__(self, font_filename): self.__font_filename = font_filename self.__header = None @@ -119,6 +128,7 @@ class FontLib(object): buffer_list.append([unicode, info_data]) + gc.collect() return buffer_list def get_characters(self, characters: str): @@ -129,6 +139,14 @@ class FontLib(object): return self.__get_character_unicode_buffer(font_file, unicode_set) + @property + def scan_mode(self): + return self.__header.scan_mode + + @property + def byte_order(self): + return self.__header.byte_order + @property def data_size(self): return self.__header.data_size @@ -151,11 +169,15 @@ HZK Info: {}\n\ file size : {}\n\ font height : {}\n\ data size : {}\n\ + scan mode : {}\n\ + byte order : {}\n\ characters : {}\n'.format( self.__font_filename, self.file_size, self.font_height, self.data_size, + self.SCAN_MODE[self.scan_mode], + self.BYTE_ORDER[self.byte_order], self.characters )) @@ -167,6 +189,10 @@ def is_font_file_exist(font_file): except: return False +def reverseBits(n): + bits = "{:0>8b}".format(n) + return int(bits[::-1], 2) + def run_test(): font_file = CURRENT_DIR + FONT_DIR + HZK_FILE @@ -187,7 +213,12 @@ def run_test(): print('slave id: {}'.format(slave_list[0])) oled = SSD1306_I2C(128, 64, i2c) - buffer = framebuf.FrameBuffer(bytearray(buffer_list[-1][1]), fontlib.font_height, fontlib.font_height, framebuf.MONO_HLSB) + format = framebuf.MONO_VLSB + + if fontlib.scan_mode == FontLib.SCAN_MODE_HORIZONTAL: + format = framebuf.MONO_HMSB if fontlib.byte_order == FontLib.BYTE_ORDER_MSB else framebuf.MONO_HLSB + + buffer = framebuf.FrameBuffer(bytearray(buffer_list[0][1]), fontlib.font_height, fontlib.font_height, format) oled.fill(0) oled.blit(buffer, 20, 20) oled.show() @@ -206,6 +237,9 @@ def run_test(): 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='') print('') -- Gitee From eeeda2454f0cbad4b59952d40f4dd7cf1ff36501 Mon Sep 17 00:00:00 2001 From: Walkline Wang Date: Tue, 17 Aug 2021 14:48:37 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8df5234..5dc2a9e 100644 --- a/README.md +++ b/README.md @@ -49,8 +49,8 @@ $ client/youyuan_16.cmd | 高度 | 16 | 像素 | | 水平偏移 | 0 | 像素 | | 垂直偏移 | 0 | 像素 | -| 扫描方式 | 行扫描 | | -| 字节顺序 | 高位在前 | | +| 扫描方式 | 水平扫描 | 不支持`垂直扫描` | +| 字节顺序 | 低位在前 | | #### 使用电脑测试 @@ -73,6 +73,8 @@ HZK Info: .//client/combined.bin file size : 303520 font height : 16 data size : 32 + scan mode : Horizontal + byte order : LSB characters : 8932 '!' [65281, b'\x00\x00\x00\x00\x00\x00\x08\x00\x0c\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x00\x00\x08\x00\x08\x00\x00\x00'] -- Gitee