Come posso implementare il gioco Lights-Out usando porte logiche o infradito?


9

Innanzitutto, per chi non ha familiarità con il gioco, ecco come funziona il gioco,

gioco

L'obiettivo del gioco è quello di spegnere tutte le luci, quindi chiamate "Lights Out", e ogni pressione del pulsante / luce inverte il suo stato così come i suoi vicini adiacenti nord / sud / est / ovest, e questo è praticamente .

Ora, quello che potrei pensare è usando le infradito SR o le infradito JK. Ciò è dovuto alla sua capacità di agire come elemento di archiviazione (lo stato iniziale e lo stato successivo). Ma non riesco a pensare a modi per implementarli effettivamente.

Un'altra idea è che ogni serie di pulsanti e il relativo pulsante / luci adiacenti (NSEW) avranno una propria tabella di verità, in questo modo:

tabella logica

ma è possibile avere le variabili di input uguali alle variabili di output? Ci sono altri modi per farlo?

Risposte:


9

L'approccio ovvio sarebbe quello di utilizzare un processore e fare tutto questo nel firmware.

Tuttavia, se davvero avessi bisogno di farlo con i coltelli di pietra e le pelli d'orso per qualche motivo, dedicherei un infradito alternato a ciascun quadrato. Il Flip-flop di ogni quadrato verrebbe attivato premendo il suo pulsante o uno dei quattro pulsanti vicini. Ovviamente quelle pressioni di pulsanti devono essere rimosse. Ancora una volta, questo sarebbe più facile nel firmware.

Una soluzione hardware non sarebbe poi così complessa, ma tutto sarebbe replicato 25 volte, rendendola grande e noiosa da costruire.

Inserito il:

Apparentemente la descrizione sopra non è abbastanza chiara. Ecco un diagramma di ciò che è in ogni cella:

Gli altri 4 ingressi alla porta NAND sono guidati dai segnali rimbalzati dei 4 pulsanti circostanti che dovrebbero anche commutare lo stato di questo quadrato. Allo stesso modo, il segnale debounce da questo pulsante va anche a uno degli ingressi della porta NAND di ciascuna delle 4 celle circostanti.


1
Sembra la cosa più fattibile da fare. Userei i TFF e legherei tutti gli ingressi T a "1". Quindi avrei un interruttore momentaneo SPDT per ciascun pulsante. Collegare un tiro a "0", un tiro a "1", quindi il polo agli ingressi di clock TFF corrispondenti. Quindi, quando si preme un interruttore, commuta le infradito circostanti generando un singolo fronte pos / neg.
Shamtam,

1
@Shamtam: Sì, questo è un modo di rimbalzare se si hanno switch SPDT. La maggior parte dei pulsanti, tuttavia, sono normalmente SPST aperti.
Olin Lathrop,

Immagino che dovrei usare l'interruttore SPDT per rimandare, sia il pulsante che meno. Ora capisco come collegare gli ingressi di questo gioco, ma quello che non capisco è come collegare le uscite ai LED. Voglio dire, non può essere solo un semplice output (Q) al LED e ai suoi vicini il complemento (Q ') giusto? Inoltre, un'altra domanda, devo usare l'ingresso del segnale di clock del TFF? Se é cosi, come?
Julienn,

2
Il flipflop per ogni cella guida direttamente il suo LED. La logica che ha a che fare con le celle vicine entra nell'input del flipflip, ma l'output rimane locale nella cella. No, gli switch SPDT non sono necessari per il rimbalzo. Esistono varie tecniche per rimandare un singolo segnale come da un interruttore SPST.
Olin Lathrop,

1
No, non hai la logica. Normalmente, le uscite rimbalzate sono alte, quindi tutti gli ingressi alla porta NAND sono alti, il che porta l'uscita in basso. Quando si preme un pulsante qualsiasi, l'ingresso NAND viene disattivato, facendo aumentare l'uscita NAND. Questo limite da basso a alto fa sì che l'FF commuta il suo stato.
Olin Lathrop il

0

Direi che le infradito T sarebbero probabilmente le più facili in quanto puoi attivare il loro stato di output con un singolo input. È possibile utilizzare un singolo infradito per ciascun LED e con l'ingresso collegato al pulsante e l'uscita collegata al LED. Quindi potresti avere ciascun pulsante legato agli ingressi dei 4 infradito adiacenti per cambiare anche il loro stato.

Se si desidera utilizzare le infradito JK, è possibile creare infradito T da esse passando l'input a entrambi gli input (J e K)


2
Puoi espandere la tua risposta spiegando come connetti 5 switch a ciascun flip-flop senza che interferiscano l'uno con l'altro. Inoltre, per quanto riguarda l'interruttore rimbalzo?
Dave Tweed,

0

Se si volesse costruire un gioco del genere fino a dimensioni 7x7 con una logica discreta, il progetto più pratico sarebbe probabilmente quello di utilizzare un registro a scorrimento circolare per mantenere lo stato del tabellone e un contatore a sei bit per tenere traccia del turno posizione dei dati all'interno del registro. Spostare i dati attraverso il cambio in gruppi di 8 bit per pilotare un display multiplex e scansionare una tastiera multiplex. Dispone di un contatore "flip light" a sette bit che verrà eseguito ogni volta che i sei bit inferiori sono diversi da zero o quando lo stato del bit superiore corrisponde allo stato del pulsante attualmente decodificato. Capovolgi lo stato della luce corrente ogni volta che si applicano tutte le seguenti condizioni:

6-bit counter isn't  xxx111
6-bit counter isn't  111xxx
7-bit counter isn't xxxxx00
7-bit counter isn't xx00xxx
7-bit counter is    00xx0xx

Si noti che mentre sarebbe necessaria una notevole quantità di logica per decodificare tali stati del contatore, sarebbe banale rispetto al numero di chip necessari per implementare ciascuna luce separatamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.