import time
import RPi.GPIO as GPIO
# Define GPIO pins
SER = 17 # Serial data input
SRCLK = 27 # Shift register clock
RCLK = 22 # Storage register clock
# Segment data for digits 0-9
SEGMENTS = [
0b00111111, # 0
0b00000110, # 1
0b01011011, # 2
0b01001111, # 3
0b01100110, # 4
0b01101101, # 5
0b01111101, # 6
0b00000111, # 7
0b01111111, # 8
0b01101111, # 9
]
def shift_out(data):
for i in range(8):
GPIO.output(SER, (data >> i) & 1)
GPIO.output(SRCLK, GPIO.HIGH)
GPIO.output(SRCLK, GPIO.LOW)
def main():
GPIO.setmode(GPIO.BCM)
GPIO.setup(SER, GPIO.OUT)
GPIO.setup(SRCLK, GPIO.OUT)
GPIO.setup(RCLK, GPIO.OUT)
try:
while True:
# Display numbers from 0 to 9
for num in range(10):
shift_out(SEGMENTS[num])
GPIO.output(RCLK, GPIO.HIGH)
GPIO.output(RCLK, GPIO.LOW)
time.sleep(1) # Wait for 1 second
# Display numbers from 9 to 0
for num in range(9, -1, -1):
shift_out(SEGMENTS[num])
GPIO.output(RCLK, GPIO.HIGH)
GPIO.output(RCLK, GPIO.LOW)
time.sleep(1) # Wait for 1 second
finally:
GPIO.cleanup()
if __name__ == "__main__":
main()