from machine import Pin
import time

# Pin definitions
SHCP_PIN = Pin(2, Pin.OUT)  # Clock pin
STCP_PIN = Pin(1, Pin.OUT)  # Latch pin
DS_PIN = Pin(0, Pin.OUT)    # Data pin
LED1_PIN = Pin(3, Pin.OUT)  # LED 1
LED2_PIN = Pin(4, Pin.OUT)  # LED 2

# 7-segment display codes (common anode)
segment_codes = [
    0b11000000,  # 0
    0b11111001,  # 1
    0b10100100,  # 2
    0b10110000,  # 3
    0b10011001,  # 4
    0b10010010,  # 5
    0b10000010,  # 6
    0b11111000,  # 7
    0b10000000,  # 8
    0b10010000,  # 9
]

current_number = 9
led1_state = True
led2_state = False

def shift_out(data_pin, clock_pin, bit_order, value):
    """Implement shift register data transfer"""
    for i in range(8):
        if bit_order == 1:  # MSBFIRST
            bit = (value >> (7 - i)) & 1
        else:  # LSBFIRST
            bit = (value >> i) & 1
        
        data_pin.value(bit)
        clock_pin.value(1)
        clock_pin.value(0)

def display_number(number):
    """Display a number on the 7-segment display"""
    code = segment_codes[number]
    shift_out(DS_PIN, SHCP_PIN, 1, code)  # 1 represents MSBFIRST
    STCP_PIN.value(1)
    STCP_PIN.value(0)

# Initial setup
display_number(current_number)
LED1_PIN.value(led1_state)
LED2_PIN.value(led2_state)

# Main loop
previous_millis = time.ticks_ms()
interval = 2000  # 2 seconds

while True:
    current_millis = time.ticks_ms()
    
    if time.ticks_diff(current_millis, previous_millis) >= interval:
        previous_millis = current_millis
        
        # Toggle LED states
        led1_state = not led1_state
        led2_state = not led2_state
        
        LED1_PIN.value(led1_state)
        LED2_PIN.value(led2_state)
        
        # Decrement the number when LED1 turns on
        if led1_state:
            current_number -= 1
            if current_number < 0:
                current_number = 9
            display_number(current_number)
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT
74HC595