from machine import I2C, Pin
import ssd1306
# 設定OLED螢幕
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# 定義 "姓"、"名" 與 "羅" 的位圖數據,16x16像素
xing_bitmap = [
0x10, 0x20, 0x10, 0x20, 0x11, 0x20, 0x11, 0x20,
0xfd, 0xfc, 0x25, 0x20, 0x26, 0x20, 0x24, 0x20,
0x24, 0x20, 0x49, 0xfc, 0x28, 0x20, 0x10, 0x20,
0x28, 0x20, 0x44, 0x20, 0x83, 0xfe, 0x00, 0x00
]
ming_bitmap = [
0x02, 0x00, 0x02, 0x00, 0x07, 0xf0, 0x08, 0x10,
0x14, 0x20, 0x62, 0x40, 0x02, 0x80, 0x01, 0x00,
0x06, 0x00, 0x1f, 0xf8, 0xe8, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x0f, 0xf8, 0x08, 0x08
]
luo_bitmap = [
0x00, 0x00, 0x7f, 0xfc, 0x44, 0x44, 0x44, 0x44,
0x7f, 0xfc, 0x10, 0x50, 0x14, 0x88, 0x25, 0xfe,
0x7a, 0x90, 0x10, 0xfc, 0x24, 0x90, 0x7e, 0xfc,
0x00, 0x90, 0x54, 0x90, 0x4a, 0xfe, 0x8a, 0x80
]
fu_bitmap = [
0x02, 0x00, 0x01, 0x00, 0x7f, 0xfe, 0x40, 0x02,
0xbf, 0xfc, 0x00, 0x00, 0x1f, 0xf0, 0x10, 0x10,
0x1f, 0xf0, 0x00, 0x00, 0x3f, 0xf8, 0x21, 0x08,
0x3f, 0xf8, 0x21, 0x08, 0x3f, 0xf8, 0x20, 0x08
]
cheng_bitmap = [
0x20, 0x28, 0x10, 0x24, 0x00, 0x24, 0xfc, 0x20,
0x03, 0xfe, 0x7a, 0x20, 0x02, 0x24, 0x7a, 0x24,
0x03, 0xa4, 0x7a, 0xa8, 0x4a, 0xa8, 0x4a, 0x90,
0x4a, 0x92, 0x7d, 0xaa, 0x44, 0x46, 0x08, 0x82
]
si_bitmap = [
0x00, 0xf8, 0x3f, 0x00, 0x04, 0x00, 0x08, 0x20,
0x10, 0x40, 0x3f, 0x80, 0x01, 0x00, 0x06, 0x10,
0x18, 0x08, 0x7f, 0xfc, 0x01, 0x04, 0x09, 0x20,
0x11, 0x10, 0x21, 0x08, 0x45, 0x04, 0x02, 0x00
]
chi_bitmap = [
0x10, 0x00, 0x13, 0xfc, 0x20, 0x84, 0x24, 0x88,
0x44, 0x88, 0xf8, 0x90, 0x10, 0x9c, 0x20, 0x84,
0x49, 0x44, 0xfd, 0x44, 0x05, 0x28, 0x01, 0x28,
0xaa, 0x10, 0xaa, 0x28, 0x84, 0x44, 0x01, 0x82
]
wu_bitmap = [
0x10, 0x80, 0x10, 0x80, 0x50, 0x80, 0x50, 0xfc,
0x7d, 0x54, 0x52, 0x54, 0x90, 0x54, 0x10, 0x94,
0x1c, 0x94, 0xf1, 0x24, 0x52, 0x24, 0x10, 0x44,
0x10, 0x44, 0x10, 0x84, 0x11, 0x28, 0x10, 0x10
]
li_bitmap = [
0x00, 0x00, 0x01, 0xfc, 0xfd, 0x24, 0x11, 0x24,
0x11, 0xfc, 0x11, 0x24, 0x11, 0x24, 0x7d, 0xfc,
0x10, 0x20, 0x10, 0x20, 0x11, 0xfc, 0x10, 0x20,
0x1c, 0x20, 0xe0, 0x20, 0x43, 0xfe, 0x00, 0x00
]
da_bitmap = [
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
0x01, 0x00, 0xff, 0xfe, 0x01, 0x00, 0x01, 0x00,
0x02, 0x80, 0x02, 0x80, 0x04, 0x40, 0x04, 0x40,
0x08, 0x20, 0x10, 0x10, 0x20, 0x08, 0xc0, 0x06
]
san_bitmap = [
0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00
]
shit_bitmap = [
0x0a, 0x80, 0x31, 0x38, 0x22, 0x88, 0x38, 0x38,
0x22, 0x88, 0x39, 0x38, 0x22, 0x88, 0x7f, 0xfe,
0x40, 0x02, 0xbf, 0xe4, 0x00, 0x80, 0x01, 0x00,
0xff, 0xfe, 0x01, 0x00, 0x05, 0x00, 0x02, 0x00
]
how_bitmap = [
0x00, 0x20, 0x78, 0x3e, 0x48, 0x20, 0x49, 0xfe,
0x49, 0x22, 0x79, 0x38, 0x01, 0xe0, 0xfd, 0x22,
0x21, 0x1e, 0x41, 0x00, 0x79, 0x78, 0x09, 0x48,
0x09, 0x48, 0x0a, 0x4a, 0x52, 0x4a, 0x24, 0x86
]
# 顯示位圖函數
def draw_chinese_char(bitmap, x, y):
for row in range(16): # 16行
byte = bitmap[row * 2: row * 2 + 2] # 每行兩個字節
bits = byte[0] << 8 | byte[1] # 合併兩字節
for col in range(16): # 16列
if bits & (0x8000 >> col): # 判斷每一位是否為1
oled.pixel(x + col, y + row, 1) # 點亮像素
# 顯示中文字符
oled.fill(0) # 清空螢幕
draw_chinese_char(xing_bitmap, 0, 0) # 在(0,0)位置顯示"姓"
draw_chinese_char(ming_bitmap, 18, 0) # 在(18,0)位置顯示"名"
draw_chinese_char(luo_bitmap, 54, 0) # 在(36,0)位置顯示"羅"
draw_chinese_char(fu_bitmap, 72, 0)
draw_chinese_char(cheng_bitmap, 90, 0)
draw_chinese_char(si_bitmap, 0, 18)
draw_chinese_char(chi_bitmap, 18, 18)
draw_chinese_char(wu_bitmap, 41, 18)
draw_chinese_char(li_bitmap, 59, 18)
draw_chinese_char(si_bitmap, 77, 18)
draw_chinese_char(da_bitmap, 95, 18)
draw_chinese_char(san_bitmap, 113, 18)
draw_chinese_char(shit_bitmap, 0, 36)
draw_chinese_char(how_bitmap, 18, 36)
oled.text('411114228', 45,40)
oled.show() # 更新顯示