ฉันจะใช้เกม Lights-Out โดยใช้ลอจิกเกตหรือ flip flops ได้อย่างไร


9

อันดับแรกสำหรับผู้ที่ไม่คุ้นเคยกับเกมนี่คือวิธีการทำงานของเกม

การเล่นเกม

เป้าหมายของเกมคือการปิดไฟทั้งหมดซึ่งเรียกว่า "Lights Out" และการกดปุ่ม / แสงแต่ละครั้งจะทำให้สถานะของมันสว่างขึ้นรวมถึงเพื่อนบ้านทางทิศเหนือ / ทิศใต้ / ทิศตะวันออก / ทิศตะวันตก .

ตอนนี้สิ่งที่ฉันคิดได้ก็คือการใช้รองเท้าแตะ SR หรือรองเท้าแตะ JK นี่เป็นเพราะความสามารถในการทำหน้าที่เป็นองค์ประกอบการจัดเก็บ (สถานะเริ่มต้นและสถานะต่อไป) แต่ฉันไม่สามารถนึกวิธีที่จะนำไปใช้จริงได้

อีกแนวคิดหนึ่งคือปุ่มแต่ละชุดและปุ่ม / ไฟที่อยู่ติดกัน (NSEW) จะมีตารางความจริงของตัวเองเช่นนี้:

ตารางลอจิก

แต่มันเป็นไปได้หรือไม่ที่จะมีตัวแปรอินพุตเหมือนกับตัวแปรเอาต์พุต? มีวิธีอื่นในการทำเช่นนี้อีกไหม?

คำตอบ:


9

แนวทางที่ชัดเจนคือการใช้โปรเซสเซอร์และทำสิ่งนี้ในเฟิร์มแวร์

อย่างไรก็ตามถ้าฉันต้องการทำสิ่งนี้ด้วยมีดหินและใช้สกินด้วยเหตุผลบางอย่างฉันจะอุทิศ flip-flop แบบสลับไปยังแต่ละตาราง ฟลิปฟล็อปของแต่ละช่องจะถูกสลับโดยกดปุ่มหรือปุ่มใดปุ่มหนึ่งในสี่ปุ่มข้างเคียง แน่นอนว่าการกดปุ่มเหล่านั้นจำเป็นต้องถูกยกเลิก อีกครั้งนี่จะง่ายขึ้นในเฟิร์มแวร์

โซลูชันฮาร์ดแวร์จะไม่ซับซ้อนทั้งหมด แต่ทุกอย่างจะถูกทำซ้ำ 25 ครั้งทำให้มีขนาดใหญ่และน่าเบื่อในการสร้าง

ที่เพิ่ม:

เห็นได้ชัดว่าคำอธิบายข้างต้นไม่ชัดเจนเพียงพอ นี่คือแผนผังของสิ่งที่อยู่ในแต่ละเซลล์:

อินพุตอีก 4 ตัวไปยังเกต NAND นั้นขับมาจากสัญญาณที่แยกออกจากปุ่ม 4 ตัวที่ล้อมรอบซึ่งควรจะสลับสถานะของสี่เหลี่ยมนี้ด้วย เช่นเดียวกันสัญญาณ debounce จากปุ่มนี้จะไปยังหนึ่งในอินพุตเกท NAND ของแต่ละเซลล์โดยรอบ 4 แห่ง


1
เสียงนี้เป็นสิ่งที่ทำได้ง่ายที่สุด ฉันจะใช้ TFF และผูกอินพุต T ทั้งหมดกับ "1. " จากนั้นฉันจะใช้สวิตช์ชั่วขณะ SPDT สำหรับแต่ละปุ่ม ผูกหนึ่งโยนไปที่ "0," หนึ่งโยนไปที่ "1" แล้วเสาไปยังอินพุตนาฬิกา TFF ที่สอดคล้องกัน จากนั้นเมื่อคุณกดสวิตช์มันจะสลับไปมาที่ flip-flop โดยรอบโดยสร้างขอบ pos / neg เดียว
Shamtam

1
@hamtam: ใช่นั่นเป็นวิธีหนึ่งในการเดบิตถ้าคุณมีสวิตช์ SPDT ปุ่มกดส่วนใหญ่อย่างไรก็ตามปกติแล้วจะเปิด SPST
Olin Lathrop

ฉันเดาว่าฉันจะต้องใช้สวิตช์ SPDT เพื่อการ debouncing ไม่ว่าจะเป็นปุ่มกดหรือไม่ก็ตาม ตอนนี้ฉันได้รับวิธีการเชื่อมต่ออินพุตของเกมนี้ แต่สิ่งที่ฉันไม่ได้รับก็คือวิธีเชื่อมต่อสัญญาณเข้ากับไฟ LED ฉันหมายความว่ามันไม่สามารถเป็นเพียงแค่เอาท์พุทแบบเรียบง่าย (Q) ไปยัง LED และเพื่อนบ้านของมัน (Q ') ใช่มั้ย อีกคำถามหนึ่งฉันต้องใช้สัญญาณนาฬิกาของ TFF หรือไม่ ถ้าเป็นเช่นนั้นได้อย่างไร
Julienn

2
flipflop สำหรับแต่ละเซลล์ขับ LED โดยตรง ตรรกะที่เกี่ยวข้องกับเซลล์ข้างเคียงจะเข้าสู่อินพุตของ flipflip แต่ผลลัพธ์จะยังคงอยู่ภายในเซลล์ ไม่จำเป็นต้องใช้สวิตช์ SPDT สำหรับการ debouncing มีเทคนิคต่าง ๆ สำหรับการ debouncing สัญญาณเดียวเช่นจากสวิตช์ SPST
Olin Lathrop

1
ไม่คุณไม่เข้าใจตรรกะ โดยปกติแล้วเอาต์พุตที่ถูก debounce จะสูงดังนั้นอินพุตทั้งหมดไปที่เกต NAND จะสูงซึ่งจะขับเอาต์พุตที่ต่ำ เมื่อกดปุ่มใด ๆ อินพุต NAND นั้นจะลดลงทำให้เอาต์พุต NAND สูงขึ้น ขอบต่ำถึงสูงนี้ทำให้ FF เปลี่ยนสถานะ
Olin Lathrop

0

ฉันจะบอกว่ารองเท้าแตะ T อาจจะง่ายที่สุดในขณะที่คุณสามารถสลับสถานะเอาท์พุทของพวกเขาด้วยการป้อนข้อมูลเดียว คุณสามารถใช้ฟลิปฟล็อปเดียวสำหรับ LED แต่ละอันและอินพุตที่ผูกติดกับปุ่มของคุณและเอาท์พุทที่เชื่อมโยงกับ LED ของคุณ จากนั้นคุณสามารถมีปุ่มแต่ละปุ่มเชื่อมโยงกับอินพุตของ flip flops ที่อยู่ติดกัน 4 ปุ่มเพื่อสลับสถานะของพวกเขาเช่นกัน

หากคุณต้องการใช้รองเท้าแตะ JK คุณสามารถทำให้รองเท้าแตะ T หลุดออกมาได้โดยส่งอินพุตของคุณไปยังอินพุตทั้งสอง (J และ K)


2
คุณสามารถขยายคำตอบของคุณโดยอธิบายว่าคุณเชื่อมต่อสวิตช์ 5 ตัวกับแต่ละ flip-flop ได้อย่างไรโดยไม่รบกวนซึ่งกันและกัน แล้วสวิตช์เด้งล่ะ
Dave Tweed

0

หากใครต้องการสร้างเกมที่มีขนาดใหญ่ถึง 7x7 จากตรรกะที่ไม่ต่อเนื่องการออกแบบที่ใช้ประโยชน์ได้มากที่สุดน่าจะเป็นการใช้ register shift หมุนเวียนเพื่อรักษาสถานะของบอร์ดและเคาน์เตอร์หกบิตเพื่อติดตามการเปลี่ยนแปลง ตำแหน่งของข้อมูลภายในรีจิสเตอร์ เลื่อนข้อมูลไปตามตัวเปลี่ยนเป็นกลุ่ม 8 บิตเพื่อขับเคลื่อนจอแสดงผลแบบมัลติเพล็กซ์และสแกนแป้นพิมพ์แบบมัลติเพล็กซ์ มีตัวนับ "แสงฟลิป" เจ็ดบิตซึ่งจะทำงานเมื่อใดก็ตามที่หกบิตด้านล่างไม่เป็นศูนย์หรือเมื่อสถานะของบิตบนสุดตรงกับสถานะของปุ่มที่ถอดรหัสในปัจจุบัน พลิกสถานะของแสงปัจจุบันทุกครั้งที่ใช้สิ่งต่อไปนี้ทั้งหมด:

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

โปรดทราบว่าในขณะที่จำนวนตรรกะที่มีนัยสำคัญจะต้องถอดรหัสรัฐเคาน์เตอร์เหล่านั้นมันจะเล็กน้อยเมื่อเทียบกับจำนวนของชิปที่ต้องใช้ในการแยกแสงแต่ละอัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.