Làm cách nào để triển khai trò chơi Tắt đèn bằng cổng logic hoặc dép xỏ ngón?


9

Đầu tiên, đối với những người không quen thuộc với trò chơi, đây là cách trò chơi hoạt động,

chơi trò chơi

Mục tiêu của trò chơi là tắt tất cả các đèn, do đó được gọi là "Tắt đèn" và mỗi lần nhấn nút / đèn sẽ đảo ngược trạng thái của nó cũng như các nước láng giềng phía bắc / nam / đông / tây, và đó là khá nhiều .

Bây giờ, những gì tôi có thể nghĩ là bằng cách sử dụng dép xỏ ngón SR, hoặc dép xỏ ngón JK. Điều này là do khả năng của nó hoạt động như một yếu tố lưu trữ (trạng thái ban đầu và trạng thái tiếp theo). Nhưng tôi dường như không thể nghĩ ra cách nào để thực hiện chúng.

Một ý tưởng khác là mỗi bộ nút và nút / đèn liền kề (NSEW) của nó sẽ có bảng chân lý riêng, như thế này:

bảng logic

nhưng, có thể có các biến đầu vào giống như các biến đầu ra không? Có cách nào khác để làm điều này?

Câu trả lời:


9

Cách tiếp cận rõ ràng sẽ là sử dụng bộ xử lý và thực hiện tất cả điều này trong phần sụn.

Tuy nhiên, nếu tôi thực sự cần phải làm điều này với dao đá và da gấu vì một số lý do, tôi sẽ dành một cái lật lật cho mỗi hình vuông. Việc lật của mỗi ô vuông sẽ được bật bằng cách nhấn nút hoặc một trong bốn nút lân cận. Tất nhiên những lần nhấn nút đó cần phải được trả lại. Một lần nữa, điều này sẽ dễ dàng hơn trong phần sụn.

Một giải pháp phần cứng sẽ không quá phức tạp, nhưng mọi thứ sẽ được nhân rộng 25 lần, khiến nó trở nên lớn và tẻ nhạt.

Thêm:

Rõ ràng mô tả ở trên là không đủ rõ ràng. Dưới đây là sơ đồ của những gì có trong mỗi ô:

4 đầu vào khác của cổng NAND được điều khiển từ các tín hiệu được phát ra của 4 nút xung quanh cũng được cho là để chuyển trạng thái của hình vuông này. Tương tự, tín hiệu được phát ra từ nút này cũng đi đến một trong các đầu vào cổng NAND của mỗi trong số 4 ô xung quanh.


1
Điều này nghe có vẻ như là điều khả thi nhất để làm. Tôi sẽ sử dụng TFF và buộc tất cả các đầu vào T thành "1.". Sau đó, tôi sẽ có một công tắc tạm thời SPDT cho mỗi nút. Buộc một lần ném thành "0", một lần ném thành "1" và sau đó cực cho các đầu vào đồng hồ TFF tương ứng. Sau đó, khi bạn nhấn một công tắc, nó sẽ chuyển đổi các flip-flop xung quanh bằng cách tạo ra một cạnh pos / neg duy nhất.
Shamtam

1
@Shamtam: Vâng, đó là một cách để gỡ rối nếu bạn có công tắc SPDT. Tuy nhiên, hầu hết các nút bấm chỉ là SPST thường mở.
Olin Lathrop

Tôi đoán tôi sẽ phải sử dụng công tắc SPDT để gỡ lỗi, cho dù là nút nhấn hay không. Bây giờ tôi có cách kết nối đầu vào của trò chơi này, nhưng điều tôi không nhận được là làm thế nào để kết nối đầu ra với đèn LED. Ý tôi là, nó không thể chỉ là đầu ra đơn giản (Q) cho đèn LED và hàng xóm của nó là phần bù (Q ') phải không? Ngoài ra, một câu hỏi khác, tôi có cần sử dụng đầu vào tín hiệu đồng hồ của TFF không? Nếu vậy thì thế nào?
Julienn

2
Các flipflop cho mỗi tế bào điều khiển LED trực tiếp. Logic phải làm với các ô lân cận nhập vào đầu vào của flipflip, nhưng đầu ra vẫn nằm cục bộ với ô. Không, thiết bị chuyển mạch SPDT không cần thiết để gỡ lỗi. Có nhiều kỹ thuật khác nhau để phát ra một tín hiệu duy nhất như từ bộ chuyển đổi SPST.
Olin Lathrop

1
Không, bạn không có được logic. Thông thường, các đầu ra được công bố là cao, vì vậy tất cả các đầu vào cho cổng NAND đều cao, khiến đầu ra ở mức thấp. Khi nhấn bất kỳ nút nào, NAND đó sẽ nhận đầu vào ở mức thấp, làm cho đầu ra NAND ở mức cao. Cạnh thấp đến cao này khiến FF chuyển trạng thái của nó.
Olin Lathrop

0

Tôi có thể nói rằng T flip flops có thể là dễ nhất vì bạn có thể chuyển trạng thái đầu ra của chúng với một đầu vào duy nhất. Bạn có thể sử dụng một nút lật đơn cho mỗi đèn LED và với đầu vào được gắn vào nút của bạn và đầu ra được gắn với đèn LED của bạn. Sau đó, bạn có thể có mỗi nút được gắn với đầu vào của 4 flip flop liền kề để chuyển trạng thái của chúng.

Nếu bạn muốn sử dụng flip flip flop, bạn có thể tạo T flip flops ra khỏi chúng bằng cách chuyển đầu vào của bạn cho cả hai đầu vào (J và K)


2
Bạn có thể mở rộng câu trả lời của mình bằng cách giải thích cách bạn kết nối 5 công tắc với mỗi flip-flop mà không cần chúng can thiệp lẫn nhau. Ngoài ra, những gì về chuyển đổi bị trả lại?
Dave Tweed

0

Nếu một người muốn xây dựng một trò chơi như vậy với kích thước 7x7 ngoài logic rời rạc, thiết kế thực tế nhất có lẽ là sử dụng một thanh ghi thay đổi tuần hoàn để giữ trạng thái của bảng và bộ đếm sáu bit để theo dõi sự thay đổi vị trí của dữ liệu trong sổ đăng ký. Di chuyển dữ liệu qua bộ dịch chuyển theo nhóm 8 bit để điều khiển màn hình được ghép kênh và quét bàn phím được ghép. Có bộ đếm "lật ánh sáng" bảy bit sẽ chạy bất cứ lúc nào sáu bit dưới cùng khác không hoặc khi trạng thái của bit trên cùng khớp với trạng thái của nút được giải mã hiện tại. Lật trạng thái của ánh sáng hiện tại bất cứ khi nào áp dụng tất cả những điều sau đây:

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

Lưu ý rằng mặc dù cần một lượng logic đáng kể để giải mã các trạng thái bộ đếm đó, nhưng nó sẽ không đáng kể so với số lượng chip cần thiết để thực hiện riêng từng ánh sáng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.