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)