2012-04-29 2 views
3

한 달 전에 this에 4 개의 7 세그먼트 디스플레이가있는 숫자 문자열 다중화에 대해 질문했습니다. 하지만 지금은 파이썬에서 7 개의 7 세그먼트 디스플레이를 사용하여 문자열을 멀티 플렉스하도록 코드를 업데이트하려고합니다.병렬 포트를 통한 문자열 표시를위한 다중 주소 및 데이터

This is the new circuit. 병렬 포트를 사용하여 데이터를 보내면 래치 사용은 최상위 비트 (핀 9)를 수신합니다. 두 번째 래치에서 래치 인 에이블 또한 수신되지만 무효화됩니다. 즉, 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) 
관련 문제