import machine
import uasyncio as asyncio
# Піни для 74HC595
DATA_PIN = 0 # DS (GPIO0)
LATCH_PIN = 5 # ST_CP (GPIO5)
CLOCK_PIN = 18 # SH_CP (GPIO18)
OE_PIN = 14 # ~OE (GPIO14)
# Піни для 7-сегментного індикатора
DISPLAY_PINS = [22, 21, 19, 4]
# Сегменти для відображення числа "1234" на 7-сегментному індикаторі
NUMBERS = {
0: 0b11000000,
1: 0b11111001,
2: 0b10100100,
3: 0b10110000,
4: 0b10011001,
5: 0b10010010,
6: 0b10000010,
7: 0b11111000,
8: 0b10000000,
9: 0b10010000,
}
# Ініціалізація пінів
data_pin = machine.Pin(DATA_PIN, machine.Pin.OUT)
latch_pin = machine.Pin(LATCH_PIN, machine.Pin.OUT)
clock_pin = machine.Pin(CLOCK_PIN, machine.Pin.OUT)
oe_pin = machine.Pin(OE_PIN, machine.Pin.OUT)
display_pins = [machine.Pin(pin, machine.Pin.OUT) for pin in DISPLAY_PINS]
async def display_digit(digit, value):
digit_values = [value // 1000, (value // 100) % 10, (value // 10) % 10, value % 10]
segment_value = NUMBERS.get(digit_values[digit], 0)
shift_out(segment_value)
latch_pin.on()
latch_pin.off()
display_pins[digit].on()
await asyncio.sleep_ms(5) # Час відображення розряду
display_pins[digit].off()
def shift_out(value):
for _ in range(8):
data_bit = (value >> 7) & 1
data_pin.value(data_bit)
value <<= 1
clock_pin.on()
clock_pin.off()
async def main():
setup()
value_to_display = 9988
while True:
for digit in range(4):
await display_digit(digit, value_to_display)
await asyncio.sleep_ms(5) # Час відображення числа
def setup():
for pin in display_pins:
pin.off()
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.create_task(main())
loop.run_forever()