import machine
import ssd1306
import time
# 設置I2C引腳
i2c = machine.I2C(0, scl=machine.Pin(22), sda=machine.Pin(21)) # 根據你的接線調整引腳
# 創建顯示對象
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# 清屏
oled.fill(0)
oled.show()
# 字模數據
bitmap_bytes = [
0x10, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x10, 0x40,
0x10, 0x20, 0x02, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x01, 0x00, 0x10, 0x40,
0x11, 0x20, 0x07, 0xf0, 0x00, 0x00, 0x20, 0x00, 0xff, 0xfe, 0x28, 0xfc,
0x11, 0x20, 0x08, 0x10, 0x00, 0x00, 0x2f, 0x7c, 0x08, 0x00, 0x25, 0x04,
0xfd, 0xfc, 0x14, 0x20, 0x00, 0x00, 0x29, 0x24, 0x10, 0x10, 0x42, 0x88,
0x25, 0x20, 0x62, 0x40, 0x00, 0x00, 0x25, 0x14, 0x3f, 0xf8, 0xb8, 0x50,
0x26, 0x20, 0x02, 0x80, 0x00, 0x00, 0x29, 0xa4, 0x00, 0x08, 0x10, 0x20,
0x24, 0x20, 0x01, 0x00, 0x00, 0x00, 0x21, 0x60, 0x1f, 0xf0, 0x10, 0x40,
0x24, 0x20, 0x06, 0x00, 0x00, 0x00, 0x26, 0x18, 0x10, 0x10, 0xfc, 0x80,
0x49, 0xfc, 0x1f, 0xf8, 0x00, 0x00, 0x38, 0x86, 0x1f, 0xf0, 0x11, 0xfc,
0x28, 0x20, 0xe8, 0x08, 0x00, 0x00, 0x23, 0x20, 0x10, 0x10, 0x96, 0x84,
0x10, 0x20, 0x08, 0x08, 0x00, 0x00, 0x2c, 0x40, 0x1f, 0xf0, 0x58, 0x84,
0x28, 0x20, 0x08, 0x08, 0x00, 0x00, 0x41, 0x88, 0x10, 0x10, 0x50, 0x84,
0x44, 0x20, 0x08, 0x08, 0x00, 0x00, 0x4e, 0x30, 0x10, 0x10, 0x1c, 0x84,
0x83, 0xfe, 0x0f, 0xf8, 0x00, 0x00, 0x81, 0xc0, 0x10, 0x50, 0xe0, 0xfc,
0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x0e, 0x00, 0x10, 0x20, 0x40, 0x84
]
dep = [
0x00, 0xf8, 0x10, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00,
0x3f, 0x00, 0x13, 0xfc, 0x00, 0x00, 0x10, 0x80, 0x01, 0xfc, 0x3f, 0x00, 0x01, 0x00, 0x00, 0x00,
0x04, 0x00, 0x20, 0x84, 0x00, 0x00, 0x50, 0x80, 0xfd, 0x24, 0x04, 0x00, 0x01, 0x00, 0x7f, 0xfc,
0x08, 0x20, 0x24, 0x88, 0x00, 0x00, 0x50, 0xfc, 0x11, 0x24, 0x08, 0x20, 0x01, 0x00, 0x00, 0x00,
0x10, 0x40, 0x44, 0x88, 0x00, 0x00, 0x7d, 0x54, 0x11, 0xfc, 0x10, 0x40, 0x01, 0x00, 0x00, 0x00,
0x3f, 0x80, 0xf8, 0x90, 0x00, 0x00, 0x52, 0x54, 0x11, 0x24, 0x3f, 0x80, 0xff, 0xfe, 0x00, 0x00,
0x01, 0x00, 0x10, 0x9c, 0x00, 0x00, 0x90, 0x54, 0x11, 0x24, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
0x06, 0x10, 0x20, 0x84, 0x00, 0x00, 0x10, 0x94, 0x7d, 0xfc, 0x06, 0x10, 0x01, 0x00, 0x3f, 0xf8,
0x18, 0x08, 0x49, 0x44, 0x00, 0x00, 0x1c, 0x94, 0x10, 0x20, 0x18, 0x08, 0x02, 0x80, 0x00, 0x00,
0x7f, 0xfc, 0xfd, 0x44, 0x00, 0x00, 0xf1, 0x24, 0x10, 0x20, 0x7f, 0xfc, 0x02, 0x80, 0x00, 0x00,
0x01, 0x04, 0x05, 0x28, 0x00, 0x00, 0x52, 0x24, 0x11, 0xfc, 0x01, 0x04, 0x04, 0x40, 0x00, 0x00,
0x09, 0x20, 0x01, 0x28, 0x00, 0x00, 0x10, 0x44, 0x10, 0x20, 0x09, 0x20, 0x04, 0x40, 0x00, 0x00,
0x11, 0x10, 0xaa, 0x10, 0x00, 0x00, 0x10, 0x44, 0x1c, 0x20, 0x11, 0x10, 0x08, 0x20, 0x00, 0x00,
0x21, 0x08, 0xaa, 0x28, 0x00, 0x00, 0x10, 0x84, 0xe0, 0x20, 0x21, 0x08, 0x10, 0x10, 0xff, 0xfe,
0x45, 0x04, 0x84, 0x44, 0x00, 0x00, 0x11, 0x28, 0x43, 0xfe, 0x45, 0x04, 0x20, 0x08, 0x00, 0x00,
0x02, 0x00, 0x01, 0x82, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x02, 0x00, 0xc0, 0x06, 0x00, 0x00
]
numb = [
0x0a, 0x80, 0x00, 0x20,
0x31, 0x38, 0x78, 0x3e,
0x22, 0x88, 0x48, 0x20,
0x38, 0x38, 0x49, 0xfe,
0x22, 0x88, 0x49, 0x22,
0x39, 0x38, 0x79, 0x38,
0x22, 0x88, 0x01, 0xe0,
0x7f, 0xfe, 0xfd, 0x22,
0x40, 0x02, 0x21, 0x1e,
0xbf, 0xe4, 0x41, 0x00,
0x00, 0x80, 0x79, 0x78,
0x01, 0x00, 0x09, 0x48,
0xff, 0xfe, 0x09, 0x48,
0x01, 0x00, 0x0a, 0x4a,
0x05, 0x00, 0x52, 0x4a,
0x02, 0x00, 0x24, 0x86
]
# 繪製位圖到OLED顯示器
def draw_bitmap(oled, bitmap, width, height, x, y):
for row in range(height): # 行數
for col in range(width): # 列數
byte_index = row * (width // 8) + (col // 8) # 計算位於bitmap中的字節索引
bit_index = 7 - (col % 8) # 計算位元索引
if bitmap[byte_index] & (1 << bit_index): # 檢查每個像素
oled.pixel(x + col, y + row, 1) # 設置為白色
else:
oled.pixel(x + col, y + row, 0) # 設置為黑色
# 繪製字模
draw_bitmap(oled, bitmap_bytes, 96, 16, 0, 0) # 在(0, 0)的位置繪製128x16的字模
draw_bitmap(oled, dep, 128, 16, 0, 20)
draw_bitmap(oled, numb, 32, 16, 0, 40)
# 顯示數字
oled.text("411114313", 46, 44) # 在第三行顯示數字
# 更新顯示
oled.show()
while True:
time.sleep(1)