from machine import Pin
import tm1637
import time
SER = Pin(2, Pin.OUT)
SRCLK = Pin(3, Pin.OUT)
RCLK = Pin(4, Pin.OUT)
SW_PINS = [5, 6, 7, 8, 9, 10, 11, 12]
switches = [Pin(p, Pin.IN, Pin.PULL_DOWN) for p in SW_PINS]
disp_dec = tm1637.TM1637(clk=Pin(20), dio=Pin(21))
disp_hex = tm1637.TM1637(clk=Pin(18), dio=Pin(19))
disp_dec._brightness = 7
disp_hex._brightness = 7
SEG_0 = 0b00111111
SEG_1 = 0b00000110
def shift_byte(val):
for bit in range(7, -1, -1):
SER.value((val >> bit) & 1)
SRCLK.value(1)
SRCLK.value(0)
def update_displays(bits):
RCLK.value(0)
for b in bits:
shift_byte(SEG_1 if b else SEG_0)
RCLK.value(1)
def update_dec(value):
disp_dec.number(value)
def update_hex(value):
hi = (value >> 4) & 0xF
lo = value & 0xF
disp_hex.write([0, 0,
disp_hex.encode_digit(hi),
disp_hex.encode_digit(lo)])
print("Binary Octet Converter ready")
prev_bits = None
while True:
bits = [sw.value() for sw in switches]
value = sum(b * (1 << (7 - i)) for i, b in enumerate(bits))
if bits != prev_bits:
update_displays(bits)
update_dec(value)
update_hex(value)
prev_bits = bits
print(f"BIN: {''.join(str(b) for b in bits)} DEC: {value:3d} HEX: 0x{value:02X}")
time.sleep_ms(50)