2012-04-29 10 views
3

1月前に、私はthisに4つの7セグメントディスプレイで数字の文字列を多重化することを尋ねました。しかし今、私はPythonで7個の7セグメントディスプレイを使って文字列を多重化するようにコードを更新しようとしています。パラレルポートで文字列を表示するためのマルチプレクスアドレスとデータ

This is the new circuit.パラレルポートを使用してデータを送信すると、ラッチイネーブルは最上位ビット(ピン9)を受信します。 2番目のラッチでは、ラッチイネーブルもそれを受け取りますが、無効になります。つまり、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) 
+1

あなたはPySerialの[PyParallel](http://pyserial.sourceforge.net/pyparallel.html)で見たことがありますか?かなり簡単です。 – jedwards

+0

私はそれを使用しています! :) – aerojun

+4

私はここで質問を見ることができません。 – Johnsyweb

答えて

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) 
関連する問題