# 4-digit 7-segment COMMON CATHODE display driven by Raspberry Pi B+ # code modified, tweaked and tailored from code by bertwert # on RPi forum thread topic 91796 # and fiddled with a bit more by S&S import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) # GPIO ports for the 7seg pins segments = (11,4,23,8,7,10,18,25) # 7seg_segment_pins (11,7,4,2,1,10,5,3) + 100R inline for segment in segments: GPIO.setup(segment, GPIO.OUT) GPIO.output(segment, 0) # GPIO ports for the digit 0-3 pins digits = (22,27,17,24) # 7seg_digit_pins (12,9,8,6) digits 0-3 respectively for digit in digits: GPIO.setup(digit, GPIO.OUT) GPIO.output(digit, 1) num = {' ':(0,0,0,0,0,0,0), '0':(1,1,1,1,1,1,0), '1':(0,1,1,0,0,0,0), '2':(1,1,0,1,1,0,1), '3':(1,1,1,1,0,0,1), '4':(0,1,1,0,0,1,1), '5':(1,0,1,1,0,1,1), '6':(1,0,1,1,1,1,1), '7':(1,1,1,0,0,0,0), '8':(1,1,1,1,1,1,1), '9':(1,1,1,1,0,1,1)} try: while True: n = time.ctime()[11:13]+time.ctime()[14:16] s = n.rjust(4) for digit in range(4): if (int(time.ctime()[18:19])%2 == 0) and (digit == 1): GPIO.output(25, 1) else: GPIO.output(25, 0) for loop in range(0,7): GPIO.output(segments[loop], num[s[digit]][loop]) GPIO.output(digits[digit], 0) time.sleep(0.005) # The best sleep time for me to minimise flicker is 5 milliseconds GPIO.output(digits[digit], 1) finally: GPIO.cleanup()