import machine
import time
# Коды для отображения цифр 0-9 на 7-сегментном индикаторе (в шестнадцатеричном формате)
SEGCODE = [0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F]
# Инициализация пинов Raspberry Pi Pico для работы с 74HC595 (первый регистр)
sdi1 = machine.Pin(1, machine.Pin.OUT) # DS (Data) — пин GP1 Pico (подключён к пину 14 74HC595)
rclk1 = machine.Pin(5, machine.Pin.OUT) # ST_CP (Latch) — пин GP5 Pico (подключён к пину 12 74HC595)
srclk1 = machine.Pin(9, machine.Pin.OUT) # SH_CP (Clock) — пин GP9 Pico (подключён к пину 11 74HC595)
# Инициализация пинов Raspberry Pi Pico для работы с 74HC595 (второй регистр)
sdi2 = machine.Pin(11, machine.Pin.OUT) # DS (Data) — пин GP11 Pico
rclk2 = machine.Pin(13, machine.Pin.OUT) # ST_CP (Latch) — пин GP13 Pico
srclk2 = machine.Pin(15, machine.Pin.OUT) # SH_CP (Clock) — пин GP15 Pico
def hc595_shift(sdi, srclk, rclk, dat):
"""Функция для передачи данных в сдвиговый регистр 74HC595"""
rclk.low() # Опускаем Latch для подготовки к передаче данных
time.sleep_us(10) # Пауза для стабилизации сигнала (в микросекундах)
# Передаём биты данных (от старшего к младшему)
for bit in range(7, -1, -1):
srclk.low() # Опускаем Clock для подготовки бита
time.sleep_us(10)
value = 1 & (dat >> bit) # Извлекаем бит из данных
sdi.value(value) # Устанавливаем значение бита на Data
time.sleep_us(10)
srclk.high() # Поднимаем Clock для передачи бита
time.sleep_us(10)
rclk.high() # Поднимаем Latch для вывода данных на выходы Q0-Q7
time.sleep_us(10)
# Основной цикл — отображение цифр на двух индикаторах
while True:
for num1 in range(10): # Первая цифра (левый индикатор)
for num2 in range(10): # Вторая цифра (правый индикатор)
hc595_shift(sdi1, srclk1, rclk1, SEGCODE[num1]) # Передаём код для левого индикатора
hc595_shift(sdi2, srclk2, rclk2, SEGCODE[num2]) # Передаём код для правого индикатора
time.sleep_ms(500) # Задержка между комбинациями (500 мс)