# Simula el Jk tipo D biestable sincronizado. # Genera el fondo. frame .f \ -background green \ -borderwidth 3 # _______ __ ________ # MUESTRA EL CIRCUITO # ------- -- -------- canvas .f.cir -width 600 -height 300 # _____ # AND 1 .f.cir create arc 50 40 150 80 \ -start 270 -extent 180 -fill red # _____ # AND 2 .f.cir create arc 50 100 150 140 \ -start 270 -extent 180 -fill red # ______________________ # Conexiones iniciales 1 .f.cir create line 10 50 100 50 -fill red .f.cir create line 60 70 100 70 -fill red .f.cir create line 60 110 100 110 -fill red .f.cir create line 30 130 40 130 -fill red .f.cir create line 65 130 100 130 -fill red # ________ .f.cir create line 40 115 40 145 -fill red .f.cir create line 40 115 60 130 -fill red .f.cir create line 40 145 60 130 -fill red .f.cir create oval 58 127 65 134 -outline red # ______________________ # Conexiones iniciales 2 .f.cir create line 60 70 60 110 -fill red .f.cir create line 10 90 60 90 -fill red .f.cir create line 30 50 30 130 -fill red .f.cir create oval 58 87 65 94 -fill red # _____ # NOR 1 .f.cir create arc 275 50 300 90 -outline red -style arc \ -start 270 -extent 180 .f.cir create arc 240 50 340 90 -outline red -style arc \ -start 270 -extent 180 .f.cir create oval 340 67 347 74 -outline red # _____ # NOR 2 .f.cir create arc 275 110 300 150 -outline red -style arc \ -start 270 -extent 180 .f.cir create arc 240 110 340 150 -outline red -style arc \ -start 270 -extent 180 .f.cir create oval 340 127 347 134 -outline red # ______________________ # Conexiones intermedias .f.cir create line 150 60 300 60 -fill red .f.cir create line 150 120 300 120 -fill red # Conexiones intermedias 1 .f.cir create line 250 80 300 80 -fill red .f.cir create line 250 80 250 95 -fill red .f.cir create line 250 95 355 95 -fill red .f.cir create line 355 95 355 130 -fill red .f.cir create oval 352 126 359 133 -fill red # Conexiones intermedias 2 .f.cir create line 250 140 300 140 -fill red .f.cir create line 250 140 250 155 -fill red .f.cir create line 250 155 370 155 -fill red .f.cir create line 370 155 370 70 -fill red .f.cir create oval 367 66 374 73 -fill red # ____________________ # Conexiones de salida .f.cir create line 348 70 400 70 -fill red .f.cir create line 348 130 400 130 -fill red .f.cir create text 450 55 -text "_" .f.cir create text 450 70 -text "Q" .f.cir create text 450 130 -text "Q" .f.cir create text 280 270 -text "Biestable D sincronizado" # __________________ # variables globales # sal1 Salida negada # sal2 Salida normal set ent1 0 set ent2 0 set sal1 1 set sal2 0 set and1 0 set and2 0 set not1 1 button .f.in1 \ -width 0 \ -height 0 \ -textvariable ent1 \ -borderwidth 0 \ -relief sunken \ -bg green \ -command { in .f.in1 } button .f.in2 \ -width 0 \ -height 0 \ -textvariable ent2 \ -borderwidth 0 \ -relief sunken \ -bg green \ -command { in .f.in2 } button .f.sal1 \ -width 0 \ -height 0 \ -textvariable sal1 \ -borderwidth 0 \ -relief sunken \ -bg green button .f.sal2 \ -width 0 \ -height 0 \ -textvariable sal2 \ -borderwidth 0 \ -relief sunken \ -bg green button .f.and1 \ -width 0 \ -height 0 \ -textvariable and1 \ -borderwidth 0 \ -relief sunken \ -bg yellow button .f.and2 \ -width 0 \ -height 0 \ -textvariable and2 \ -borderwidth 0 \ -relief sunken \ -bg yellow button .f.not1 \ -width 0 \ -height 0 \ -textvariable not1 \ -borderwidth 0 \ -relief sunken \ -bg yellow # _______ # Patitas set x(1) 30 set y(1) 127 set x(2) 90 set y(2) 47 set x(3) 90 set y(3) 67 set x(4) 90 set y(4) 107 set x(5) 90 set y(5) 127 set x(6) 286 set y(6) 57 set x(7) 286 set y(7) 77 set x(8) 286 set y(8) 117 set x(9) 286 set y(9) 137 for { set k 1 } { $k < 10 } { incr k } { button .f.p$k \ -width 0 \ -height 0 \ -borderwidth 0 \ -relief sunken \ -bg red place configure .f.p$k -x $x($k) -y $y($k) place configure .f.p$k -width 10 -height 7 } # Sale del programa. button .f.fin \ -width 0 \ -height 0 \ -text "Salir" \ -borderwidth 2 \ -relief sunken \ -bg yellow \ -command { exit } # Coloca los widget. place configure .f.in1 -x 0 -y 40 place configure .f.in2 -x 0 -y 80 place configure .f.fin -x 560 -y 270 place configure .f.sal1 -x 398 -y 60 place configure .f.sal2 -x 398 -y 120 place configure .f.and1 -x 150 -y 50 place configure .f.and2 -x 150 -y 110 place configure .f.not1 -x 65 -y 120 place configure .f.in1 -width 20 -height 20 place configure .f.in2 -width 20 -height 20 place configure .f.fin -width 35 -height 25 place configure .f.and1 -width 20 -height 20 place configure .f.and2 -width 20 -height 20 place configure .f.sal1 -width 20 -height 20 place configure .f.sal2 -width 20 -height 20 place configure .f.not1 -width 20 -height 20 pack .f .f.cir proc in { nombre } { global ent1 ent2 sal1 sal2 and1 and2 not1 switch $nombre { .f.in1 { if { $ent1 == 0 } then { set ent1 1 } else { set ent1 0 } } .f.in2 { if { $ent2 == 0 } then { set ent2 1 } else { set ent2 0 } } } if { $ent1 == 0 && $ent2 == 0 } then { set sal1 $sal1 set sal2 $sal2 set and1 0 set and2 0 set not1 1 } if { $ent1 == 0 && $ent2 == 1 } then { set sal1 1 set sal2 0 set and1 0 set and2 1 set not1 1 } if { $ent1 == 1 && $ent2 == 0 } then { set sal1 $sal1 set sal2 $sal2 set and1 0 set and2 0 set not1 0 } if { $ent1 == 1 && $ent2 == 1 } then { set sal1 0 set sal2 1 set and1 1 set and2 0 set not1 0 } }