ปุ่มกดเป็นอุปกรณ์อินพุตที่ใช้กันอย่างแพร่หลายในอุปกรณ์อิเล็กทรอนิกส์และโครงการฝังตัวต่างๆ ใช้เพื่อรับอินพุตในรูปแบบของตัวเลขและอัลบาเบตและป้อนข้อมูลเดียวกันลงในระบบเพื่อประมวลผลต่อไป ในการกวดวิชานี้เราจะไปติดต่อปุ 4x4 เมทริกซ์กับ 8051 ไมโครคอนโทรลเลอร์
4X4 เมทริกซ์ปุ่มกด
ก่อนที่เราจะเชื่อมต่อแป้นพิมพ์กับไมโครคอนโทรลเลอร์ก่อนอื่นเราต้องเข้าใจว่ามันทำงานอย่างไร ปุ่มกด Matrix ประกอบด้วยชุดปุ่มกดซึ่งเชื่อมต่อกัน เช่นเดียวกับในกรณีของเราเราใช้แป้นพิมพ์เมทริกซ์ 4X4 ซึ่งมีปุ่มกด 4 ปุ่มในแต่ละสี่แถว และขั้วของปุ่มกดจะเชื่อมต่อตามแผนภาพ ในแถวแรกจะมีการเชื่อมต่อเทอร์มินัลหนึ่งของปุ่มกดทั้งหมด 4 ปุ่มเข้าด้วยกันและอีกขั้วหนึ่งของปุ่มกด 4 ปุ่มจะแสดงแต่ละคอลัมน์จาก 4 คอลัมน์ซึ่งจะเหมือนกันสำหรับแต่ละแถว ดังนั้นเราจึงได้ 8 เทอร์มินัลเพื่อเชื่อมต่อกับไมโครคอนโทรลเลอร์
การเชื่อมต่อปุ่มกดกับไมโครคอนโทรลเลอร์ 8051 (AT89S52)
ก่อนอื่นเราต้องเชื่อมต่อโมดูล LCD เพื่อแสดงข้อมูลซึ่งจะถูกป้อนผ่าน KEYPAD ดังนั้นโปรดอ่านบทความ“ การเชื่อมต่อ LCD กับไมโครคอนโทรลเลอร์ 8051” ก่อนที่จะเชื่อมต่อกับ KEYPAD
ดังที่แสดงในแผนภาพวงจรด้านบนในการเชื่อมต่อปุ่มกดเราจำเป็นต้องเชื่อมต่อ 8 ขั้วของปุ่มกดเข้ากับพอร์ตใด ๆ (8 พิน) ของไมโครคอนโทรลเลอร์ เหมือนเราได้เชื่อมต่อขั้วปุ่มกดเข้ากับพอร์ต 1 ของ 8051 เมื่อใดก็ตามที่กดปุ่มใดก็ตามเราจำเป็นต้องได้รับตำแหน่งของปุ่มนั้นหมายถึงแถวที่สอดคล้องกับหมายเลขคอลัมน์ เมื่อเราได้ตำแหน่งของปุ่มแล้วเราสามารถพิมพ์อักขระตามนั้นได้
ตอนนี้คำถามคือจะหาตำแหน่งของปุ่มที่กดได้อย่างไร? ฉันจะอธิบายสิ่งนี้ในขั้นตอนด้านล่างและต้องการให้คุณดูรหัส:
1. อันดับแรกเราได้สร้าง Rows to Logic ระดับ 0 และคอลัมน์ทั้งหมดเป็น Logic ระดับ 1
2. เมื่อใดก็ตามที่เรากดปุ่มคอลัมน์และแถวที่ตรงกับปุ่มนั้นจะถูกย่อและทำให้คอลัมน์ที่เกี่ยวข้องเป็นระดับลอจิก 0 เนื่องจากคอลัมน์นั้นเชื่อมต่อ (ย่อ) กับแถวซึ่งอยู่ที่ระดับลอจิก 0 ดังนั้นเราจึงได้รับ คอลัมน์เลขที่ ดูฟังก์ชัน main ()
3. ตอนนี้เราต้องหา Row no. ดังนั้นเราจึงสร้างสี่ฟังก์ชันที่สอดคล้องกับแต่ละคอลัมน์ เช่นเดียวกับการกดปุ่มใด ๆ ของคอลัมน์หนึ่งเราเรียกฟังก์ชัน row_finder1 () เพื่อค้นหาแถวที่
4. ในฟังก์ชัน row_finder1 () เราย้อนกลับระดับลอจิกหมายความว่าตอนนี้แถวทั้งหมดเป็น 1 และคอลัมน์เป็น 0 ตอนนี้แถวของปุ่มที่กดควรเป็น 0 เนื่องจากได้เชื่อมต่อ (ย่อ) กับคอลัมน์ที่มีการกดปุ่ม และคอลัมน์ทั้งหมดอยู่ที่ตรรกะ 0 เราจึงสแกนแถวทั้งหมดเป็น 0
5. ดังนั้นเมื่อใดก็ตามที่เราพบ Row ที่ลอจิก 0 หมายความว่านั่นคือแถวของปุ่มที่กด ตอนนี้เรามีคอลัมน์ no (อยู่ในขั้นตอนที่ 2) และหมายเลขแถวและเราสามารถพิมพ์ no ได้ ของปุ่มนั้นโดยใช้ฟังก์ชัน lcd_data
ขั้นตอนเดียวกันต่อไปนี้สำหรับการกดทุกปุ่มและเรากำลังใช้ในขณะที่ (1) เพื่อตรวจสอบอย่างต่อเนื่องว่ามีการกดปุ่มหรือไม่