จอแสดงผลเป็นส่วนที่จำเป็นของเครื่องจักรไม่ว่าจะเป็นเครื่องใช้ในบ้านหรือเครื่องจักรอุตสาหกรรมก็ตาม จอแสดงผลไม่เพียง แต่แสดงตัวเลือกการควบคุมในการสั่งงานเครื่อง แต่ยังแสดงสถานะและผลลัพธ์ของงานที่ทำโดยเครื่องนั้นด้วย มีจอแสดงผลหลายประเภทที่ใช้ในอุปกรณ์อิเล็กทรอนิกส์เช่นจอแสดงผล 7 ส่วน, จอ LCD 16x2, หน้าจอสัมผัส TFT, จอแสดงผล OLED เป็นต้น
จอ LCD 16x2เป็นโมดูลการแสดงผลขั้นพื้นฐานที่สุดและยังใช้ในอุปกรณ์อิเล็กทรอนิกส์ขนาดเล็กเช่นเครื่องคิดเลขมิเตอร์ดิจิตอลเป็นต้นเราได้ทำโครงการมากมายโดยใช้ LCD 16x2 รวมถึงการเชื่อมต่อพื้นฐานกับไมโครคอนโทรลเลอร์อื่น ๆ:
- การเชื่อมต่อ LCD กับไมโครคอนโทรลเลอร์ 8051
- การเชื่อมต่อ LCD กับไมโครคอนโทรลเลอร์ ATmega32
- การเชื่อมต่อ LCD กับไมโครคอนโทรลเลอร์ PIC
- การเชื่อมต่อ LCD 16x2 กับ Arduino
- 16x2 LCD เชื่อมต่อกับ Raspberry Pi โดยใช้ Python
ในบทช่วยสอนนี้เราจะดูวิธีการเชื่อมต่อ LCD 16x2 กับไมโครคอนโทรลเลอร์ Atmega16 AVRและแสดงข้อความต้อนรับง่ายๆ
ส่วนประกอบที่จำเป็น
- Atmega16
- โมดูล LCD 16x2
- จัมเปอร์
- เขียงหั่นขนม
แผนภูมิวงจรรวม
การเขียนโปรแกรม Atmega16 สำหรับจอ LCD 16x2
การเขียนโปรแกรมไม่จำเป็นต้องมีไลบรารีภายนอกใด ๆ นี่ ATmega16 เป็นโปรแกรมที่ใช้ USBASP และ Atmel Studio7.0 โปรแกรมที่สมบูรณ์และวิดีโอการทำงานมีให้ในตอนท้ายของโปรเจ็กต์เพียงอัปโหลดโปรแกรมใน Atmega16 แล้วหมุน 10k POT เพื่อปรับความสว่างของ LCDในขั้นต้นกำหนดความถี่ของ CPU และรวมไลบรารีที่จำเป็นซึ่งมาพร้อมกับแพ็คเกจ Atmel Studio เช่น สำหรับการเข้าถึงพิน IO และ
กำหนดพิน RS และ EN ของ LCDในโปรแกรม RS Pins ใช้เพื่อเลือกข้อมูลและลงทะเบียนคำสั่ง หมุดเปิดใช้งานสลักข้อมูล
#define en PA3 #define rs PA2
กำหนดด้วยว่า PORT ของ Atmega16 ใดที่จะใช้ในการเชื่อมต่อ LCD ที่นี่ใช้ PORTA
#define lcdDirection DDRA # กำหนด lcdPort PORTA
ขั้นตอนต่อไปคือการสร้างฟังก์ชันซึ่งจะยอมรับคำสั่งโดยส่งผ่านพารามิเตอร์ มีคำสั่ง LCD HEX มากมาย คำสั่ง Hex ใช้เพื่อกำหนดฟังก์ชันของ LCD เนื่องจากเราใช้โหมด 4 บิตของ LCDไบต์ (8 บิต) จะถูกส่งไปในสองแพ็กเก็ต หนึ่งแพ็คเก็ตจะเป็น Upper Nibble (4-bit) และแพ็กเก็ตอื่น ๆ จะเป็น Lower Nibble (4-bit)
โมฆะ lcdCommand (คำสั่งถ่านที่ไม่ได้ลงชื่อ) { lcdPort = (lcdPort & 0x0F) - (คำสั่ง & 0xF0); LCDPort & = ~ (1 <
ขั้นตอนต่อไปจะได้รับการยอมรับตัวละครและล็อคกับพอร์ตของจอแอลซีดีจากนั้นตัวละครที่ได้รับจะถูกส่งไปยังการแทะ LCD โดยการตอด ฟังก์ชั่นรับอักขระโดยใช้ พารามิเตอร์ pass by จากนั้นทำการแทะบนและล่าง พิน 'rs' ถูกตั้งค่าเป็นสูงสำหรับการลงทะเบียนข้อมูลจากนั้นพัลส์ที่เพิ่มขึ้นจะถูกส่งไปเพื่อล็อกข้อมูล ในทำนองเดียวกันการแทะที่ต่ำกว่าที่ส่งโดยการเปลี่ยนค่าของ enable และส่งพัลส์ที่เพิ่มขึ้นสำหรับ enable
โมฆะ lcdChar (สตริงถ่านที่ไม่ได้ลงชื่อ) { lcdPort = (lcdPort & 0x0F) - (สตริง & 0xF0); LCDPort - = (1 <
ฟังก์ชั่นนี้จะแปลงอักขระเป็นสตริงและสามารถใช้ในโปรแกรมได้ในภายหลังเมื่อต้องการเขียนสตริง
โมฆะ lcdString (ถ่าน * str) { int j; สำหรับ (j = 0; str! = 0; j ++) { lcdChar (str); } }
ตอนนี้ฟังก์ชั่นที่เขียนเพียงเพื่อล้างหน้าจอคุณต้องส่งคำสั่ง 01 ใน HEX จากนั้นตั้งค่าเคอร์เซอร์ไปที่ตำแหน่งเริ่มต้น
โมฆะ lcdClear () { lcdCommand (0x01); _delay_ms (2); lcdCommand (0x80); }
ตอนนี้ในฟังก์ชั่นหลัก LCD จะเริ่มต้น ในขั้นต้นตั้งค่าทิศทาง PORT สำหรับ LCD เพื่อเชื่อมต่อ ที่นี่ PORT ถูกตั้งค่าเป็น OUTPUT ดังนั้นตั้งค่า FF
lcdDirection = 0xFF; _delay_ms (20)
จากนั้นตั้งจอแอลซีดีในโหมด 4 บิตโดยการส่ง 02 ในฐานสิบหก ส่ง 28 ในฐานสิบหกเพื่อตั้งค่าใน 2 บรรทัดพิกเซลเมทริกซ์ 15x7 ในโหมด 4 บิต
lcdCommand (0x02); lcdCommand (0x28);
0c คำสั่งและ 06 ถูกนำมาใช้ในการควบคุมตำแหน่งของเคอร์เซอร์ และสุดท้ายก็ล้างหน้าจอโดยส่ง 01 เป็นเลขฐานสิบหก ขั้นตอนนี้จะเสร็จสิ้นการเริ่มต้นของ LCD
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
หลังจากการเริ่มต้นเสร็จสิ้นให้ทดสอบ LCD โดยส่งสตริง ที่นี่เราจะส่ง "String จอแอลซีดีเชื่อมต่อ " ใน 1 เซนต์แถว
lcdString ("อินเตอร์เฟซ LCD");
จากนั้นเลื่อนเคอร์เซอร์ไปยังแถวถัดไปโดยส่งคำสั่ง c0 เป็นเลขฐานสิบหก และสุดท้ายในตำแหน่งนี้ให้เขียนสตริง "With Atmega1 6"
lcdCommand (0xC0); lcdString ("ด้วย Atmega16");
นี้เสร็จสิ้นการกวดวิชาที่สมบูรณ์เกี่ยวกับการเชื่อมต่อจอแอลซีดี 16x2 กับ ATmega16 โปรดทราบว่าหากคุณไม่ได้รับภาพหรือพิกเซลใด ๆ ให้ตรวจสอบการเดินสายของคุณตามรหัสและแผนภาพวงจรหรือเปลี่ยนค่าของ POT ที่ต่อกับขา V0 ของ LCD หากคุณมีข้อสงสัยหรือข้อเสนอแนะคุณสามารถติดต่อเราได้โดยการเขียนลงในฟอรัมของเราหรือแสดงความคิดเห็นด้านล่าง