import time
import board
import digitalio
# 1. SETUP SHARED BCD PINS (GP2, GP3, GP4, GP5)
# A=GP2, B=GP3, C=GP4, D=GP5
bcd_pins = []
for p_num in [board.GP2, board.GP3, board.GP4, board.GP5]:
pin = digitalio.DigitalInOut(p_num)
pin.direction = digitalio.Direction.OUTPUT
bcd_pins.append(pin)
# 2. SETUP LATCH PINS (GP1=Tens, GP0=Ones)
latch_tens = digitalio.DigitalInOut(board.GP1)
latch_tens.direction = digitalio.Direction.OUTPUT
latch_tens.value = True
latch_ones = digitalio.DigitalInOut(board.GP0)
latch_ones.direction = digitalio.Direction.OUTPUT
latch_ones.value = True
# 3. SETUP BUTTONS (GP15=Start, GP16=Reset)
sw1 = digitalio.DigitalInOut(board.GP15)
sw1.direction = digitalio.Direction.INPUT
sw1.pull = digitalio.Pull.UP
sw2 = digitalio.DigitalInOut(board.GP16)
sw2.direction = digitalio.Direction.INPUT
sw2.pull = digitalio.Pull.UP
# FUNCTION TO SEND DATA
def write_digit(target_latch, value):
# Prepare BCD data on shared bus
for i in range(4):
bcd_pins[i].value = (value >> i) & 1
# Pulse the specific latch (Low then High)
target_latch.value = False # Enable
time.sleep(0.01) # Wait for hardware
target_latch.value = True # Hold/Latch
def update_display(current_time):
tens = current_time // 10
ones = current_time % 10
write_digit(latch_tens, tens)
write_digit(latch_ones, ones)
# MAIN VARIABLES
count = 0
running = False
y = 60
# Initial Display 00
update_display(count)
while True:
# START BUTTON
if not sw1.value:
if not running:
running = True
print(">>> START")
time.sleep(0.2)
# RESET BUTTON
if not sw2.value:
running = False
count = 0
update_display(count)
print(">>> RESET")
time.sleep(0.2)
# COUNTING LOGIC
if running:
time.sleep(1.0)
count += 1
if count > y:
count = 0
update_display(count)
print("Time: {:02d}".format(count))