Skip to content

Instantly share code, notes, and snippets.

@kcranley1
Last active November 22, 2015 10:29
Show Gist options
  • Save kcranley1/fea9a8942cf89b1dcd35 to your computer and use it in GitHub Desktop.
Save kcranley1/fea9a8942cf89b1dcd35 to your computer and use it in GitHub Desktop.
4-digit 7-segment COMMON CATHODE display driven by Raspberry Pi B+
# 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()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment