############################
# E070_8led_74hc595.PY: Gestiona 8LED con shift-register
# ENTRADAS: GPIO, tiempos y byte a mostrar
# SALIDAS: 8LED según byte a mostrar
############################
from machine import Pin # Gestión del GPIO
import time # Control de tiempos
# Define los pines DS, ST_CP y SH_CP
ds_pin = Pin(25, Pin.OUT) # Datos
sh_cp_pin = Pin(32, Pin.OUT) # Desplazamiento
st_cp_pin = Pin(33, Pin.OUT) # Almacenamiento
# Tiempos de transición
tmp = .5
# Envía un byte al shift-register 74hc595
def shift_out(data):
for i in range(7, -1, -1): # Envía 8 bits: MSB a LSB
bit = (data >> i) & 0x01 # Bit i-ésimo del byte
ds_pin.value(bit) # DS=bit i-ésimo
sh_cp_pin.value(1) # Sube SH_CP (desplaza)
time.sleep_us(1) # Espera corta
sh_cp_pin.value(0) # Baja SH_CP
st_cp_pin.value(1) # Sube ST_CP (almacena)
time.sleep_us(1) # Espera corta
st_cp_pin.value(0) # Baja ST_CP
# Desplaza un LED encendido de D0 a D7 y viceversa
def desplaza_led():
for i in range(8): # 0 a 7
shift_out(1 << i) # LED on a la posición i
time.sleep(tmp) # Espera transición
for i in range(6, 0, -1): # 7 a 0
shift_out(1 << i) # LED on a la posición i
time.sleep(tmp) # Espera transición
# Bucle principal
if __name__ == "__main__":
print('GESTIÓN 8LED CON 74HC595')
print('Visualiza desplazamiento...')
try:
while True: # Bucle infinito
desplaza_led()
except KeyboardInterrupt:
print('Programa finalizado')
shift_out(0) # Apaga LED