2012-04-29 2 views
3

Месяц назад я спросил this о мультиплексировании строки чисел с 4 7-сегментными дисплеями. Но теперь я пытаюсь обновить код, чтобы мультиплексировать строку букв, используя 7 7-сегментных дисплеев в python.Мультиплексный адрес и данные для отображения строки букв над параллельным портом

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) 
+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)