Lights-Out oyununu mantık kapıları veya parmak arası terlik kullanarak nasıl uygularım?


9

İlk olarak, oyuna aşina olmayanlar için, oyun bu şekilde çalışır,

Oynanış

Oyunun amacı, "Lights Out" olarak adlandırılan tüm ışıkları kapatmaktır ve düğmeye / ışığa her basıldığında durumu ve kuzey / güney / doğu / batı komşu komşularını tersine çevirir ve bu hemen hemen .

Şimdi, düşünebileceğim SR flip-flop veya JK flip-flop kullanmak. Bunun nedeni, depolama elemanı (başlangıç ​​durumu ve sonraki durum) gibi davranabilmesidir. Ama onları gerçekten uygulamanın yollarını düşünemiyorum.

Başka bir fikir, her bir düğme kümesinin ve bitişik (NSEW) düğme / ışıkların aşağıdaki gibi kendi doğruluk tablosuna sahip olacağıdır:

mantık tablosu

ancak girdi değişkenlerinin çıktı değişkenleriyle aynı olması mümkün müdür? Bunu yapmanın başka yolları var mı?

Yanıtlar:


9

Açık yaklaşım bir işlemci kullanmak ve tüm bunları bellenimde yapmak olacaktır.

Bununla birlikte, bunu bir sebepten dolayı taş bıçaklarla ve derileri ayırarak gerçekten yapmam gerekirse, her kareye geçişli bir flip-flop ayırırdım. Her karenin flip flopu, düğmesine veya dört komşu düğmeden birine basılarak değiştirilebilir. Tabii ki bu tuşlara basılması gerekiyor. Yine, bu bellenimde daha kolay olurdu.

Bir donanım çözümü o kadar karmaşık olmazdı, ancak her şey 25 kez çoğaltılacak, bu da onu büyük ve inşa edilmesi gereken bir hale getirdi.

Katma:

Görünüşe göre yukarıdaki açıklama yeterince açık değil. İşte her hücrede neler olduğunu gösteren bir diyagram:

NAND geçidinin diğer 4 girişi, aynı zamanda bu karenin durumunu değiştirmesi gereken 4 çevreleyen düğmenin kaldırılmış sinyallerinden tahrik edilir. Benzer şekilde, bu düğmeden çıkarılan sinyal de çevreleyen 4 hücrenin her birinin NAND geçit girişlerinden birine gider.


1
Bu, yapılacak en uygun şey gibi geliyor. TFF'leri kullanır ve tüm T girişlerini "1" e bağlarım. Sonra her düğme için bir SPDT anlık anahtarı olurdu. Bir atımı "0" a, bir atışı "1" e, ardından kutbu karşılık gelen TFF saat girişlerine bağlayın. Ardından, bir anahtara bastığınızda, tek bir poz / neg kenarı oluşturarak çevredeki flip-flopları değiştirir.
Shamtam

1
@Shamtam: Evet, SPDT anahtarlarınız varsa, bu durumdan çıkmanın bir yolu. Bununla birlikte, çoğu buton normalde açık SPST'dir.
Olin Lathrop

Sanırım basma düğmesi olsun ya da olmasın, kalkış için SPDT anahtarını kullanmam gerekirdi. Şimdi bu oyunun girişlerini nasıl bağlayacağım, ama elde edemediğim çıkışların LED'lere nasıl bağlanacağı. Yani, LED'e ve komşularına basit bir çıkış (Q) olamaz, tamamlayıcı (Q ') değil mi? Ayrıca, başka bir soru, TFF saat sinyali girişini kullanmam gerekir mi? Öyleyse nasıl?
Julienn

2
Her hücre için iki duraklı, LED'ini doğrudan yönlendirir. Komşu hücrelerle ilgili mantık , flipflip girişine girer , ancak çıkış, hücre için lokal olarak kalır. Hayır, SPDT anahtarları sistemden çıkış için gerekli değildir. SPST anahtarından tek bir sinyalin ayrılması için çeşitli teknikler vardır.
Olin Lathrop

1
Hayır, mantığı anlamıyorsun. Normalde, geri dönen çıkışlar yüksektir, bu nedenle NAND geçidine tüm girişler yüksektir, bu da çıkışı düşük tutar. Herhangi bir düğmeye basıldığında, NAND alma girişi azalır ve NAND çıkışı artar. Bu düşük ila yüksek kenar, FF'nin durumunu değiştirmesine neden olur.
Olin Lathrop

0

T flip floplarının, çıkış durumlarını tek bir girişle değiştirebildiğiniz için muhtemelen en kolayı olduğunu söyleyebilirim. Her LED için tek bir flip flop kullanabilirsiniz ve giriş düğmenize bağlı ve çıkış LED'inize bağlı. Daha sonra, durumlarını değiştirmek için her bir düğmenin bitişik 4 flip flopun girişlerine bağlanmasını sağlayabilirsiniz.

JK flip floplarını kullanmak istiyorsanız, girişinizi her iki girişe de (J ve K) geçirerek T flip floplarını bunlardan çıkarabilirsiniz.


2
Her bir flip-flopta birbirleriyle etkileşime girmeden 5 anahtarı nasıl bağladığınızı açıklayarak cevabınızı genişletebilirsiniz. Ayrıca, anahtar sıçrama hakkında ne dersiniz?
Dave Tweed

0

Eğer biri ayrı mantıktan 7x7 boyuta kadar böyle bir oyun inşa etmek isterse, en pratik tasarım muhtemelen tahta durumunu tutmak için dolaşan bir vardiya kaydı ve vardiyayı takip etmek için altı bitlik bir sayaç kullanmak olacaktır. verinin kayıttaki konumu. Çoklayıcılı bir ekran sürmek ve çoklanmış bir klavyeyi taramak için verileri 8 bitlik gruplar halinde kaydırıcıdan geçirin. Alt altı bit sıfırdan farklı olduğunda veya üst bitin durumu şu anda kodu çözülmüş düğmenin durumuyla eşleştiğinde çalışacak yedi bitlik bir "flip light" sayacına sahip olun. Aşağıdakilerin tümü geçerli olduğunda mevcut ışığın durumunu çevirin:

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

Bu karşı durumların kodunu çözmek için önemli miktarda mantık gerekli olsa da, her ışığı ayrı ayrı uygulamak için gereken yonga sayısına kıyasla önemsiz olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.