1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
#!/usr/bin/env python
# File rpi_7219b.py
# http://www.bristolwatch.com/index.htm
# By Lewis Loflin - lewis@bvu.net
# Output time from system clock.
# Two bytes are shifted in first being address, second being data.
# Works the same as two 74165 SSRs in series or 16-bits.
# LD "pulseCS()" clocks 16-bit address/data into working registers.
# access to GPIO must be through root
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
LATCH = 24 # CS
CLK = 23
dataBit = 19 # DIN
GPIO.setup(LATCH, GPIO.OUT) # P0
GPIO.setup(CLK, GPIO.OUT) # P1
GPIO.setup(dataBit, GPIO.OUT) # P7
# Setup IO
GPIO.output(LATCH, 0)
GPIO.output(CLK, 0)
def pulseCLK():
GPIO.output(CLK, 1)
# time.sleep(.001)
GPIO.output(CLK, 0)
return
def pulseCS():
GPIO.output(LATCH, 1)
# time.sleep(.001)
GPIO.output(LATCH, 0)
return
# shift byte into MAX7219
# MSB out first!
def ssrOut(value):
for x in range(0,8):
temp = value & 0x80
if temp == 0x80:
GPIO.output(dataBit, 1) # data bit HIGH
else:
GPIO.output(dataBit, 0) # data bit LOW
pulseCLK()
value = value << 0x01 # shift left
return
# initialize MAX7219 4 digits BCD
def initMAX7219():
# set decode mode
ssrOut(0x09) # address
# ssrOut(0x00); // no decode
ssrOut(0xFF) # 4-bit BCD decode eight digits
pulseCS();
# set intensity
ssrOut(0x0A) # address
ssrOut(0x04) # 9/32
pulseCS()
# set scan limit 0-7
ssrOut(0x0B); # address
ssrOut(0x07) # 8 digits
# ssrOut(0x03) # 4 digits
pulseCS()
# set for normal operation
ssrOut(0x0C) # address
# ssrOut(0x00); // Off
ssrOut(0x01) # On
pulseCS()
# clear to all 0s.
for x in range(0,9):
ssrOut(x)
ssrOut(0)
pulseCS()
return
def writeMAX7219(data, location):
ssrOut(location)
ssrOut(data)
pulseCS()
return
def displayOff():
# set for normal operation
ssrOut(0x0C) # address
ssrOut(0x00); # Off
# ssrOut(0x01) # On
pulseCS()
def displayOn():
# set for normal operation
ssrOut(0x0C) # address
# ssrOut(0x00); # Off
ssrOut(0x01) # On
pulseCS()
initMAX7219()
# time returned as string
# But order is reversed relative to MAX7219.
str1 = time.strftime("%H:%M:%S")
# str2 = time.strftime("%d:%m:%Y")
print (str1)
# print len(str1) # 8
# x is digit position must be 1 to 8
# y is used for string pointer
while 1:
y = 7
for x in range(1, 9):
if str1[y] == ":":
# output "-"
writeMAX7219(10, x)
y = y - 1
continue # back to if
# convert y char to integer
writeMAX7219(int(str1[y]), x)
y = y - 1
str1 = time.strftime("%H:%M:%S")
print (str1)
print ("Stop")
time.sleep(20)
displayOff() |
Partager