12 KEY TELEPHONE




คีย์โทรศัพท์บนบอร์ดทดลองดิจิตอล

วงจร

ตำแหน่งบนขั้วต่อ

ตามวงจร R0 R1 R2 R3 ทำเป็นสัญญาณเอาท์พุท C0 C1 และ C2 ทำเป็นสัญญาณอินพุท เมื่อต้องการตรวจจับการกดคีย์ ให้ส่งค่าลอจิก 0 มาที่ R ที่ละตัว ตัวอื่นให้เป็นหนึ่งหมด ถ้ากดสวิทช์ในแถว R ที่ให้เป็น 0 จะได้ 0 ออกที่ C ตรงคอลัมน์ที่สวิทช์นั้นอยู่เช่น

เมื่อให้ R3-R0 = "1110" แล้วกดสวิทช์ 1 จะได้ C2-C0 = "110" เพราะ R0 (R0 = 0) จะต่อกับ C0 ผ่านคีย์ 1
แต่ถ้ากดสวิทช์ 2 จะได้ C2-C0 = "101" เพราะ R0 จะต่อกับ C1 ผ่านคีย์ 2
แต่ถ้ากดสวิทช์ 3 จะได้ C2-C0 = "011" เพราะ R0 จะต่อกับ C3 ผ่านคีย์ 3
แต่ถ้ากดสวิทช์อื่น จะได้ลอจิก 1 (C2-C0 = "111") ทั้งหมด เพราะการกดจะเป็นการต่อสาย C เข้ากับ R ที่เป็น ลอจิก 1
ดังนั้นถ้าต้องการตรวจการกดสวิทช์ของแถวอื่นต้องเปลี่ยค่าลอจิกที่ R3-R0 โดย
ถ้าให้ R3 R2 R1 R0 = "1110" เป็นการตรวจการกดของสวิทช์ 1 2 และ 3
ถ้าให้ R3 R2 R1 R0 = "1101" เป็นการตรวจการกดของสวิทช์ 4 5 และ 6
ถ้าให้ R3 R2 R1 R0 = "1011" เป็นการตรวจการกดของสวิทช์ 7 8 และ 9
ถ้าให้ R3 R2 R1 R0 = "0111" เป็นการตรวจการกดของสวิทช์ * 0 และ #

อัลกอริทึมสำหรับตรวจสอบการกดคีย์

  1. ส่งค่า "1110" ไปที่ R3 R2 R1 R0
  2. อ่านค่า C2 C1 C0 ถ้าไม่เท่ากับ "111" แสดงว่ามีการกดสวิทช์ ไปที่ 10
  3. ส่งค่า "1101" ไปที่ R3 R2 R1 R0
  4. อ่านค่า C2 C1 C0 ถ้าไม่เท่ากับ "111" แสดงว่ามีการกดสวิทช์ ไปที่ 10
  5. ส่งค่า "1011" ไปที่ R3 R2 R1 R0
  6. อ่านค่า C2 C1 C0 ถ้าไม่เท่ากับ "111" แสดงว่ามีการกดสวิทช์ ไปที่ 10
  7. ส่งค่า "0111" ไปที่ R3 R2 R1 R0
  8. อ่านค่า C2 C1 C0 ถ้าไม่เท่ากับ "111" แสดงว่ามีการกดสวิทช์ ไปที่ 10
  9. ไม่มีการกดสวิทช์ แล้วไป 11
  10. มีการกดสวิทช์ รหัสคือ R3R2R1R0C2C1C0
  11. จบการตรวจสอบ

รหัสที่ได้
รหัส R3R2R1R0C2C1C0 = "1110110" คือ สวิทช์ 1
รหัส R3R2R1R0C2C1C0 = "1110101" คือ สวิทช์ 2
รหัส R3R2R1R0C2C1C0 = "1110011" คือ สวิทช์ 3
รหัส R3R2R1R0C2C1C0 = "1101110" คือ สวิทช์ 4
รหัส R3R2R1R0C2C1C0 = "1101101" คือ สวิทช์ 5
รหัส R3R2R1R0C2C1C0 = "1101011" คือ สวิทช์ 6
รหัส R3R2R1R0C2C1C0 = "1011110" คือ สวิทช์ 7
รหัส R3R2R1R0C2C1C0 = "1011101" คือ สวิทช์ 8
รหัส R3R2R1R0C2C1C0 = "1011011" คือ สวิทช์ 9
รหัส R3R2R1R0C2C1C0 = "0111110" คือ สวิทช์ *
รหัส R3R2R1R0C2C1C0 = "0111101" คือ สวิทช์ 0
รหัส R3R2R1R0C2C1C0 = "0111011" คือ สวิทช์ #
รหัส R3R2R1R0C2C1C0 = "1110111" ไม่มีการกดสวิทช์
รหัส R3R2R1R0C2C1C0 = "1101111" ไม่มีการกดสวิทช์
รหัส R3R2R1R0C2C1C0 = "1011111" ไม่มีการกดสวิทช์
รหัส R3R2R1R0C2C1C0 = "0111111" ไม่มีการกดสวิทช์