--- nand.py- +++ nand.py @@ -471,8 +471,9 @@ self.jt_out.new_pin().conn = Lamp(self, lamp_name).inp class Lamp(Obj): - def __init__(self, parent, name='lamp', latency=None, pos=(0,0)): + def __init__(self, parent, name='lamp', latency=None, pos=(0,0), show_inf={}): Obj.__init__(self, parent, name, latency, pos) + self.show_inf = show_inf Pin(self, 'inp') def update(self): @@ -483,11 +484,19 @@ def show(self, v): (x, y) = self.get_pos() + label = self.show_inf.get('label', self.name) + rev = self.show_inf.get('rev', True) + + if not rev and not v: + label = ' ' * len(label) + if rev and not v: + rev = False + lst = [ 'ESC[{};{}H'.format(y+1, x+1), # move - 'ESC[{}m'.format(7) if v else '', # reverse on if v - self.name, - 'ESC[{}m'.format(27) if v else '', # reverse off if v + 'ESC[{}m'.format(7) if rev else '', # reverse on if v + label, + 'ESC[{}m'.format(27) if rev else '', # reverse off if v ] print ''.join(lst) sys.stdout.flush() @@ -505,6 +514,45 @@ def conn_targ(self, targ, targ_pin_name, n=-1): n = self.n if n < 0 else n conn_n( n, targ, 0, targ_pin_name, self, 0, 'inp' ) + +class Lamp_7seg(Obj): + def __init__(self, parent, name='lamp_7seg', latency=None, pos=(0,0)): + Obj.__init__(self, parent, name, None, pos) + lst = [ + (1,0, '---'), + (0,1, '|'), + (4,1, '|'), + (1,2, '---'), + (0,3, '|'), + (4,3, '|'), + (1,4, '---'), + ] + for (i, (x, y, label)) in enumerate(lst): + show_info = {'label': label, 'rev':False} + lamp = Lamp( self, name_i('lamp', i), latency, (x,y), show_info ) + Pin( self, name_i('inp', i), 'L' ).conn = lamp.inp + + def conn_targ(self, targ, targ_pin_name): + conn_n( 7, targ, 0, targ_pin_name, self, 0, 'inp' ) + +class DECODER_7seg(Obj): + def __init__(self, parent, name='dec_7seg', latency=10): + Obj.__init__(self, parent, name) + dlst = [ + 0x77, 0x24, 0x5d, 0x6d, 0x2e, 0x6b, 0x7b, 0x25, + 0x7f, 0x6f, 0x3f, 0x7a, 0x53, 0x7c, 0x5b, 0x1b, + ] + ROM(self, 7, 4, dlst, 'rom', latency) + Pin(self, 'en', 'L').conn = self.rom.en + for i in range(4): + Pin( self, name_i('inp', i), 'L' ) + conn_n(4, self, 0, 'inp', self.rom, 0, 'A') + for i in range(7): + Pin( self, name_i('out', i), 'L' ) + conn_n(7, self.rom, 0, 'D', self, 0, 'out') + + def conn_targ(self, targ, targ_pin_name): + conn_n( 7, self, 0, 'out', targ, 0, targ_pin_name ) class Sched: def __init__(self):