3

一个月前,我问这个关于将一串数字与 4 个 7 段显示器复用的问题。但是现在,我正在尝试更新代码以在 python 中使用 7 个 7 段显示器来复用一串字母。

这是新电路。当我使用并行端口发送数据时,Latch Enable 接收最高有效位(引脚 9)。在第二个锁存器中,Latch Enable 也接收它但被否定,这就是 7404 的原因。

即设置地址 (/LE==False) 或设置数据 (/LE=True)。

这就是我想要做的。“X”表示 7 段显示已关闭。但是不能存档。

XXXXXXX
XXXXXXS
XXXXXST
XXXXSTA
XXXSTAC
XXSTACK
XSTACKX
STACKX0
TACKX0V
ACKX0V3
CKX0V3R
KX0V3RF
X0VERFL
0VERFL0
VERFL0W
ERFL0WX
RFL0WXX
FL0WXXX
L0WXXXX
0WXXXXX
WXXXXXX
XXXXXXX

这将是字符串“STACK 0V3RFL0W”的输出。

还有过去的代码:

import sys
import parallel

class Display(object):

def __init__(self):
    '''Init and blank the "display".'''
    self.display = [' '] * 4
    self._update()

def setData(self,data):
    '''Bits 0-3 are the "value".
       Bits 4-7 are positions 0-3 (first-to-last).
    '''
    self.display = [' '] * 4
    value = data & 0xF
    if data & 0x10:
        self.display[0] = str(value)
    if data & 0x20:
        self.display[1] = str(value)
    if data & 0x40:
        self.display[2] = str(value)
    if data & 0x80:
        self.display[3] = str(value)
    self._update()

def _update(self):
    '''Write over the same four terminal positions each time.'''
    sys.stdout.write(''.join(self.display) + '\r')

if __name__ == '__main__':
p = Display()
pp=parallel.Parallel()
nums = raw_input("Enter a string of numbers: ")

# Shift over the steam four-at-a-time.
stream = 'XXXX' + nums + 'XXXX'
data = [0] * 4
for i in range(len(stream)-3):
    # Precompute data
    for pos in range(4):
        value = stream[i+pos]
        data[pos] = 0 if value == 'X' else (1<<(pos+4)) + int(value)
    # "Flicker" the display...
    for delay in xrange(1000):
        # Display each position briefly.
        for d in data:
            pp.setData(d)
    # Clear the display when done
    p.setData(0)
4

1 回答 1

0

算法大纲:

string = "07831505"

while True:
    for i in range(7):
        # switch display `i` on
        notlatch.set(True)
        data.set(1 << i)
        notlatch.set(False)
        time.sleep(<very little>)
        notlatch.set(True)
        # display character on display `i`
        data.set(char_to_7segment(string[i]))
        time.sleep(0.01)
于 2012-06-12T15:17:58.813 回答