로직 게이트 또는 플립 플롭을 사용하여 Lights-Out 게임을 어떻게 구현합니까? 때마다 북쪽 / 남쪽 / 동쪽 /

첫째, 게임에 익숙하지 않은 사람들에게는 이것이 게임이 작동하는 방식입니다.

게임 플레이

이 게임의 목표는 “Lights Out”이라고하는 모든 조명을 끄는 것입니다. 버튼 / 조명을 누를 때마다 북쪽 / 남쪽 / 동쪽 / 서쪽 인접 이웃뿐만 아니라 상태가 반전됩니다. .

이제 제가 생각할 수있는 것은 SR 플립 플롭 또는 JK 플립 플롭을 사용하는 것입니다. 이는 저장 요소 (초기 상태 및 다음 상태)로 작동 할 수 있기 때문입니다. 그러나 실제로 구현하는 방법을 생각할 수 없습니다.

또 다른 아이디어는 각 버튼 세트와 인접한 (NSEW) 버튼 / 표시등에 다음과 같이 고유 한 진리표가 있다는 것입니다.

그러나 입력 변수를 출력 변수와 동일하게 할 수 있습니까? 다른 방법이 있습니까?



답변

확실한 접근 방식은 프로세서를 사용하고 펌웨어에서이 모든 작업을 수행하는 것입니다.

그러나 스톤 나이프를 사용 하여이 작업을 수행하고 어떤 이유로 스킨을 보유 해야하는 경우 각 사각형에 플립 플롭을 토글합니다. 각 사각형의 플립 플롭은 해당 버튼 또는 네 개의 인접 버튼 중 하나를 누르면 토글됩니다. 물론 이러한 버튼 누름은 바운스 해제되어야합니다. 다시 말하지만, 이것은 펌웨어에서 더 쉬울 것입니다.

하드웨어 솔루션은 그다지 복잡하지는 않지만 모든 것이 25 번 복제되어 크기가 크고 복잡합니다.

추가 :

분명히 위의 설명은 명확하지 않습니다. 각 셀에있는 내용은 다음과 같습니다.

NAND 게이트에 대한 다른 4 개의 입력은이 사각형의 상태를 토글해야하는 4 개의 주변 버튼의 디 바운스 된 신호로부터 구동됩니다. 마찬가지로이 버튼에서 디 바운스 된 신호는 4 개의 주변 셀 각각의 NAND 게이트 입력 중 하나에 전달됩니다.


답변

T 플립 플롭이 단일 입력으로 출력 상태를 토글 할 수 있기 때문에 아마도 가장 쉽다고 말할 것입니다. 각 LED에 단일 플립 플롭을 사용할 수 있으며 입력은 버튼에 연결되고 출력은 LED에 연결됩니다. 그런 다음 각 버튼을 4 개의 인접한 플립 플롭의 입력에 연결하여 상태를 전환 할 수 있습니다.

JK 플립 플롭을 사용하려면 두 입력 (J 및 K)에 입력을 전달하여 T 플립 플롭을 만들 수 있습니다.


답변

이산 논리에서 최대 7×7 크기의 게임을 만들고 싶다면 가장 실용적인 디자인은 순환 시프트 레지스터를 사용하여 보드의 상태를 유지하고 6 비트 카운터를 사용하여 이동을 추적하는 것입니다. 레지스터 내의 데이터 위치. 멀티플렉싱 디스플레이를 구동하고 멀티플렉싱 키보드를 스캔하려면 8 비트 그룹으로 시프터를 통해 데이터를 이동하십시오. 맨 아래 6 비트가 0이 아니거나 맨 위 비트의 상태가 현재 디코딩 된 버튼의 상태와 일치 할 때 실행되는 7 비트 “플립 라이트”카운터가 있어야합니다. 다음이 모두 적용될 때마다 현재 조명의 상태를 뒤집습니다.

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

이들 카운터 상태를 디코딩하기 위해서는 상당한 양의 로직이 필요하지만, 각각의 광을 개별적으로 구현하는데 필요한 칩의 수와 비교하면 사소한 것이 될 것이다.