ฉันกำลังออกแบบปุ่มกดใน VHDL ทุกอย่างทำงานได้ดีเมื่อกดปุ่มเพียงปุ่มเดียว ฉันกำลังสแกนแต่ละคอลัมน์เพื่อกดปุ่มในเครื่องสถานะและเมื่อไม่มีการกดปุ่มซึ่งเป็นเงื่อนไขที่pin4pin6pin7pin2 = "0000"
ฉันสลับไปยังสถานะถัดไปเพื่อสแกนคอลัมน์ถัดไป ดังนั้นผมจึงตั้งคอลัมน์pin3pin1pin5
ตามลำดับเพื่อ"001"
, และ"010"
"100"
ในขณะที่การสแกนpin3pin1pin5
เป็น"001"
และถ้าpin4pin6pin7pin2
เป็น"0100"
แล้วก็ "9" ถูกกด ฉันประกาศใน VHDL pin4pin6pin7pin2
เป็นอินพุตและpin3pin1pin5
พอร์ตเอาต์พุต เมื่อฉันกด 6 และ 9 ในเวลาเดียวกันpin6
และมีpin7
high
ปุ่มกดแรกจะถูกอ่านปุ่มที่สองจะถูกละเว้น เมื่อฉันกด 3 และ 7 ในเวลาเดียวกันคนแรกที่กดด้วยไม่กี่มิลลิวินาทีก่อนที่จะชนะและที่สำคัญคือการอ่านครั้งแรกที่สำคัญที่สองจะถูกละเว้นpin2
และมีpin4
high
นี่คือส่วนที่ยุ่งยาก. เมื่อฉันกด 4 และ 6 ในเวลาเดียวกันฉันคาดว่าpin7
จะเป็นhigh
แต่มันจะกลายเป็นlow
และpin4pin6pin7pin2 = "0000"
ซึ่งฉันไม่เข้าใจว่าทำไมและทำไม เนื่องจาก"0000"
ตรวจพบว่าไม่มีการกดปุ่มใด ๆ เครื่องของรัฐจะกระโดดจากรัฐหนึ่งไปยังอีกรัฐหนึ่ง ในขณะที่ถือ 4 และ 6 หากผลักดันและใบ 4 หลายครั้งก็จะถูกตรวจพบว่าเป็น 6 กดหลายครั้งซึ่งเป็นปัญหาใหญ่ ฉันจะดีใจถ้าคุณสามารถช่วยฉันแก้ปัญหานี้!
สิ่งเดียวกันเกิดขึ้นกับ "1" และ "2" เหมือนกันกับ "7" และ "8" สำหรับคีย์ในแถวเดียวกันเท่านั้น เนื่องจากนี่เป็นโครงการต่อเนื่องฉันไม่สามารถใส่รหัส VHDL ของฉันทางออนไลน์ได้ :( ฉันจะดีใจถ้าคุณสามารถให้เคล็ดลับแก่ฉันเพื่อเอาชนะสิ่งนี้!
ด้านล่างฉันไม่ได้อัปโหลดรหัสของฉันไปยังบอร์ดไม่มีรหัสกำลังทำงานอยู่ การเชื่อมPin5
ต่อกับกราวด์กดเพียงครั้งเดียวบน 1,2,4,5,7,8, *, 0 ไม่ได้เปิดPin3
ไฟ LED แต่ถ้าฉันกด 6 แล้ว 4 ในเวลาเดียวกันPin3
LED จะติดและPin7
LED ยังคงเปิดอยู่ แต่ เมื่อรหัสของฉันกำลังทำงานสิ่งนี้จะไม่เกิดขึ้น บางทีฉันอาจจะเชื่อมต่อบางอย่างผิดปกติและโชคดีPin7
ที่ฉันไม่ทราบ ...
ด้านล่างเป็นแผนผังของแผงปุ่มกด: