import time
import board
import digitalio
# ---------------------------------------------------------
# 1. CLASS DEFINITION (Must be defined before use)
# ---------------------------------------------------------
class CD4511:
def __init__(self, bcd_pins, le_pin):
# Setup BCD pins (A, B, C, D)
self.bcd = []
for pin in bcd_pins:
p = digitalio.DigitalInOut(pin)
p.direction = digitalio.Direction.OUTPUT
self.bcd.append(p)
# Setup latch enable (active LOW)
self.le = digitalio.DigitalInOut(le_pin)
self.le.direction = digitalio.Direction.OUTPUT
self.le.value = True
def display(self, value):
value = value % 10
self.le.value = False
for i in range(4):
self.bcd[i].value = (value >> i) & 1
self.le.value = True
# ---------------------------------------------------------
# 2. PIN SETUP & INITIALIZATION
# ---------------------------------------------------------
# Define BCD pins for Tens (A, B, C, D)
bcd_tens_pins = [board.GP2, board.GP3, board.GP4, board.GP5]
# Define BCD pins for Ones (A, B, C, D)
bcd_ones_pins = [board.GP6, board.GP7, board.GP8, board.GP9]
tens_display = CD4511(bcd_tens_pins, board.GP0)
ones_display = CD4511(bcd_ones_pins, board.GP1)
sw1 = digitalio.DigitalInOut(board.GP14) # UP
sw1.direction = digitalio.Direction.INPUT
sw1.pull = digitalio.Pull.DOWN
sw2 = digitalio.DigitalInOut(board.GP15) # DOWN
sw2.direction = digitalio.Direction.INPUT
sw2.pull = digitalio.Pull.DOWN
# ---------------------------------------------------------
# 3. MAIN LOOP
# ---------------------------------------------------------
count = 0
last_count = -1
while True:
if count != last_count:
tens = count // 10
ones = count % 10
tens_display.display(tens)
ones_display.display(ones)
last_count = count
print(f"Current Count: {count:02d}")
if sw1.value:
count = (count + 1) % 100
time.sleep(0.2)
elif sw2.value:
count = (count - 1) % 100
time.sleep(0.2)
time.sleep(0.01)