from machine import Pin
import time
class ShiftRegisterController_74HC595:
def __init__(self, serial_data_pin, shift_register_clock_pin, store_register_clock_pin):
self.SD = Pin(serial_data_pin, Pin.OUT)
self.SH_CP = Pin(shift_register_clock_pin, Pin.OUT)
self.ST_CP = Pin(store_register_clock_pin, Pin.OUT)
#END_DEF
def CheckOutputLeds(self):
for bit in range(8):
self.SD.value(1)
time.sleep_ms(5)
self.SH_CP.low()
time.sleep_ms(5)
self.SH_CP.high()
time.sleep_ms(5)
self.ST_CP.low()
time.sleep_ms(5)
self.ST_CP.high()
print("Bit latched...")
time.sleep_ms(500)
#END_FOR
for bit in range(8):
self.SD.value(0)
time.sleep_ms(5)
self.SH_CP.low()
time.sleep_ms(5)
self.SH_CP.high()
time.sleep_ms(5)
self.ST_CP.low()
time.sleep_ms(5)
self.ST_CP.high()
print("Bit latched...")
time.sleep_ms(500)
#END_FOR
#END_DEF
def ClearOutputLeds(self):
self.SD.value(0)
time.sleep_ms(5)
for bit in range(8):
self.SH_CP.low()
time.sleep_ms(5)
self.SH_CP.high()
time.sleep_ms(5)
#END_FOR
self.ST_CP.low()
time.sleep_ms(5)
self.ST_CP.high()
time.sleep_ms(5)
print("Bits latched low...")
#END_DEF
def Latch8BitValue(self, value):
for bit in range(8):
shifted_value = value >> (7 - bit)
bit_value = 1 & shifted_value
self.SD.value(bit_value)
time.sleep_ms(5)
self.SH_CP.low()
time.sleep_ms(5)
self.SH_CP.high()
time.sleep_ms(5)
self.ST_CP.low()
time.sleep_ms(5)
self.ST_CP.high()
print("Bit latched...")
time.sleep_ms(500)
#END_DEF
#END_CLASS
#BEGIN_PROGRAM
Controller = ShiftRegisterController_74HC595(0, 2, 1)
Controller.ClearOutputLeds()
Controller.CheckOutputLeds()
Controller.ClearOutputLeds()
Controller.Latch8BitValue(int('10000000', 2))
#END_PROGRAM