Jak wdrożyć grę Lights-Out za pomocą bramek logicznych lub klapek?

9

Po pierwsze, dla tych, którzy nie znają gry, tak działa ta gra,

gra

Celem gry jest wyłączenie wszystkich świateł, stąd też zwanych „Lights Out”, a każde naciśnięcie przycisku / światła odwraca jego stan, a także sąsiadujących sąsiadów północ / południe / wschód / zachód, i to właściwie wszystko .

Teraz mogę pomyśleć o użyciu klapek SR lub klapek JK. Wynika to z jego zdolności do działania jako element pamięci (stan początkowy i następny). Ale nie potrafię wymyślić sposobów ich wdrożenia.

Innym pomysłem jest to, że każdy zestaw przycisku i sąsiedni przycisk / lampki (NSEW) będą miały własną tabelę prawdy, jak poniżej:

tabela logiczna

ale czy możliwe jest, aby zmienne wejściowe były takie same jak zmienne wyjściowe? Czy są na to inne sposoby?

Julienn
źródło

Odpowiedzi:

9

Oczywistym podejściem byłoby użycie procesora i zrobienie tego wszystkiego w oprogramowaniu układowym.

Jeśli jednak z jakiegoś powodu naprawdę musiałbym to zrobić za pomocą kamiennych noży i skór niedźwiedzi, poświęciłbym przerzucanie flip-flop na każdym polu. Klapki każdego kwadratu byłyby przełączane przez naciśnięcie jego przycisku lub jednego z czterech sąsiednich przycisków. Oczywiście te naciśnięcia przycisków muszą zostać wycofane. Ponownie byłoby to łatwiejsze w oprogramowaniu układowym.

Rozwiązanie sprzętowe nie byłoby aż tak skomplikowane, ale wszystko byłoby replikowane 25 razy, co czyni go dużym i łatwym do zbudowania.

Dodany:

Najwyraźniej powyższy opis nie jest wystarczająco jasny. Oto schemat zawartości każdej komórki:

Pozostałe 4 wejścia do bramki NAND są sterowane z sygnałów zadeklarowanych 4 otaczających przycisków, które również mają przełączać stan tego kwadratu. Podobnie, sygnał z tego przycisku, który został odrzucony, trafia także do jednego z wejść bramki NAND każdej z 4 otaczających komórek.

Olin Lathrop
źródło
1
To brzmi jak najbardziej wykonalne. Użyłbym TFF i powiązałbym wszystkie wejścia T z „1”. Potem miałbym chwilowy przełącznik SPDT dla każdego przycisku. Przywiąż jeden rzut do „0”, jeden rzut do „1”, a następnie biegun do odpowiednich wejść zegara TFF. Następnie, po naciśnięciu przełącznika, przełącza on otaczające przerzutniki, generując pojedynczą krawędź poz / ujemną.
Shamtam,
1
@Shamtam: Tak, to jeden ze sposobów ogłaszania, jeśli masz przełączniki SPDT. Większość przycisków to jednak tylko normalnie otwarte SPST.
Olin Lathrop,
Chyba musiałbym użyć przełącznika SPDT do ogłaszania, czy to przycisk, czy nie. Teraz rozumiem, jak podłączyć wejścia do tej gry, ale nie rozumiem, jak podłączyć wyjścia do diod LED. Mam na myśli, że nie może to być zwykłe wyjście (Q) do diody LED i jej sąsiadów dopełnienie (Q ') prawda? Kolejne pytanie: czy muszę korzystać z wejścia sygnału zegara TFF? Jeśli tak to jak?
Julienn
2
Flipflop dla każdej komórki napędza bezpośrednio swoją diodę LED. Logika związana z sąsiadującymi komórkami wchodzi w dane wejściowe do flipflipa, ale dane wyjściowe pozostają lokalne dla komórki. Nie, przełączniki SPDT nie są wymagane do ogłaszania. Istnieją różne techniki ogłaszania pojedynczego sygnału, na przykład z przełącznika SPST.
Olin Lathrop,
1
Nie, nie rozumiesz logiki. Zwykle zadeklarowane wyjścia są wysokie, więc wszystkie wejścia do bramki NAND są wysokie, co powoduje, że wyjście jest niskie. Po naciśnięciu dowolnego przycisku sygnał wejściowy NAND staje się niski, co powoduje, że sygnał wyjściowy NAND staje się wysoki. Ta niska do wysokiej krawędzi powoduje, że FF przełącza swój stan.
Olin Lathrop,
0

Powiedziałbym, że przerzutniki T byłyby prawdopodobnie najłatwiejsze, ponieważ można przełączać ich stan wyjściowy za pomocą jednego wejścia. Możesz użyć jednego przerzutnika dla każdej diody LED, z wejściem powiązanym z przyciskiem i wyjściem przypisanym do diody LED. Następnie możesz przypisać każdy przycisk do wejść 4 sąsiednich klapek, aby również przełączyć ich stan.

Jeśli chcesz użyć klapek JK, możesz zrobić z nich klapki T, przekazując dane wejściowe do obu wejść (J i K)

Anonimowy
źródło
2
Możesz rozwinąć swoją odpowiedź, wyjaśniając, w jaki sposób podłączasz 5 przełączników do każdego przerzutnika, nie zakłócając się nawzajem. A co z przełączaniem odrzuceń?
Dave Tweed,
0

Jeśli ktoś chciałby zbudować taką grę do rozmiaru 7x7 z dyskretnej logiki, najbardziej praktycznym rozwiązaniem byłoby prawdopodobnie użycie krążącego rejestru przesuwnego do utrzymania stanu planszy oraz sześciobitowego licznika do śledzenia zmiany pozycja danych w rejestrze. Przesuwaj dane przez przesuwnik w grupach po 8 bitów, aby prowadzić zmultipleksowany wyświetlacz i skanować zmultipleksowaną klawiaturę. Mają siedmiobitowy licznik „flip light”, który będzie działał za każdym razem, gdy dolne sześć bitów będzie niezerowych lub gdy stan górnego bitu odpowiada stanowi aktualnie dekodowanego przycisku. Odwróć stan bieżącego światła, ilekroć mają zastosowanie wszystkie poniższe warunki:

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

Zauważ, że chociaż do odkodowania tych stanów przeciwnych potrzebna byłaby znaczna logika, byłoby to trywialne w porównaniu z liczbą układów wymaganych do wdrożenia każdego światła osobno.

supercat
źródło