Multiplexing a string of numbers in python for parallel port

I am trying to do something like this . The problem is that I cannot build a loop that does this. Circuit:

Here is my code:

import parallel 
import time
p=parallel.Parallel() #object to use the parallel port
print ("Enter a string of numbers: ")
numStr = raw_input() #read line
numList=list(numSTr) #converts string to list
numlen=len(numList) #the length of the list
numBin=[['1','0001'], ['2','0010'],
 ['4','0100'], ['5','0101'],
 ['6','0110'], ['7','0111'],
 ['8','1000'], ['9','1001'],
 ['3','0011'], ['0','0000']] #Less significant bits of the numbers from 0 to 9 in a bidimesional array
p.setData(0) #clear the displays
pos=['0001','0010','0100','1000'] #Unique possible positions for the number from 0 to 9. 
c=(str(pos[])+str((numBin[][1]))) #here if the number in the list numList exist and also is in numBin. It joins the position and the number in binary, creating an number that will be send in decimal to the parallel port.
p.setData(int(c,2)) #send the binary number in decimal

If someone can help me, it will be nice

The most significant bits that are in numBin determine which display to turn on. And the less significant is the number. For instance:

: {'7', '1', '5', '4', '8'}. , , , "7". , 7, "0111", , "0001". , : '00010111'. . las 7. "7" "1" .

X X X X
X X X 7
X X 7 1
X 7 1 5
7 1 5 4
1 5 4 8
5 4 8 X
4 8 X X
8 X X X
X X X X

"X" , , , .

+1
2

, . - FPGA, , , .

, Mock . , .

, , , :

import sys

class ParallelMock(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 = ParallelMock()

    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:
                p.setData(d)
        # Clear the display when done
        p.setData(0)
+1
import parallel 
import time
p=parallel.Parallel()                        # object to use the parallel port
print ("Enter a string of numbers: ")
numStr = bytearray(raw_input())
p.setData(0)                                 # clear the displays
while True:                                  # refresh as fast as you need to
    for i,n in enumerate(numStr,4):
        p.setData(1<<i | n&0xf)

for, i 4,5,6,7, 1<<i :

4 => 0b00010000
5 => 0b00100000
6 => 0b01000000
7 => 0b10000000

'd 4 ascii , ,

+1

All Articles