复用地址和数据以通过并行端口显示字符串
Posted
技术标签:
【中文标题】复用地址和数据以通过并行端口显示字符串【英文标题】:Multiplex address and data to show string of letters over parallel port 【发布时间】:2012-05-09 06:37:41 【问题描述】:一个月前,我向this 询问了如何将一串数字与 4 个 7 段显示器进行复用。但是现在,我正在尝试更新代码以在 python 中使用 7 个 7 段显示器来复用一串字母。
This is the new circuit. 当我使用并行端口发送数据时,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)
【问题讨论】:
你看过 PySerial 的 PyParallel 吗?看起来很简单。 【参考方案1】:算法大纲:
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)
【讨论】:
以上是关于复用地址和数据以通过并行端口显示字符串的主要内容,如果未能解决你的问题,请参考以下文章