จอแสดงผลเป็นส่วนที่จำเป็นของเครื่องจักรไม่ว่าจะเป็นเครื่องใช้ในบ้านหรือเครื่องจักรอุตสาหกรรมก็ตาม จอแสดงผลไม่เพียง แต่แสดงตัวเลือกการควบคุมเพื่อใช้งานเครื่อง แต่ยังแสดงสถานะและผลลัพธ์ของงานที่ทำโดยเครื่องนั้นด้วย มีจอแสดงผลหลายประเภทที่ใช้ในอุปกรณ์อิเล็กทรอนิกส์เช่นจอแสดงผล 7 ส่วน, จอ LCD, หน้าจอสัมผัส TFT, จอแสดงผล LED เป็นต้นจอ LCD 16x2 เป็นจอแสดงผลขั้นพื้นฐานที่สุดและยังใช้จอแสดงผลในอุปกรณ์อิเล็กทรอนิกส์ขนาดเล็กบางชนิดเราได้ทำหลายอย่าง โครงการที่ใช้ 16x2 LCD รวมถึงการเชื่อมต่อพื้นฐานกับไมโครคอนโทรลเลอร์อื่น ๆ:
- การเชื่อมต่อ LCD กับไมโครคอนโทรลเลอร์ 8051
- การเชื่อมต่อ LCD กับไมโครคอนโทรลเลอร์ ATmega32
- การเชื่อมต่อ LCD กับไมโครคอนโทรลเลอร์ PIC
- การเชื่อมต่อ LCD 16x2 กับ Arduino
- 16x2 LCD เชื่อมต่อกับ Raspberry Pi โดยใช้ Python
ในบทช่วยสอนนี้เราจะดูวิธีการเชื่อมต่อ LCD 16x2 กับไมโครคอนโทรลเลอร์ ARM7-LPC2148และแสดงข้อความต้อนรับง่ายๆ หากคุณยังใหม่กับ ARM7 ให้เริ่มต้นด้วยพื้นฐานของ ARM7 LPC2148 และเรียนรู้วิธีการตั้งโปรแกรมโดยใช้ Keil uVision
วัสดุที่จำเป็น
ฮาร์ดแวร์
- บอร์ดไมโครคอนโทรลเลอร์ ARM7-LPC2148
- จอแอลซีดี (16X2)
- โพเทนชิออมิเตอร์
- IC ควบคุมแรงดันไฟฟ้า 5V
- เขียงหั่นขนม
- การเชื่อมต่อสายไฟ
- แบตเตอรี่ 9V
- สายไมโคร USB
ซอฟต์แวร์
- คีลยูวิชั่น 5
- เครื่องมือแฟลชวิเศษ
ก่อนที่จะเข้าสู่โครงการเราต้องรู้บางสิ่งเกี่ยวกับโหมดการทำงานของ LCD และเกี่ยวกับรหัส Hex LCD
โมดูลจอแสดงผล LCD 16X2
LCD 16X2 บอกว่ามี 16 คอลัมน์และ 2 แถว LCD นี้มี 16 พิน ด้านล่างภาพและตารางแสดงชื่อพินของจอ LCD และฟังก์ชันต่างๆ
ชื่อ |
ฟังก์ชั่น |
VSS |
พินกราวด์ |
VDD |
+ ขาอินพุต 5V |
วี |
พินปรับความคมชัด |
อาร์เอส |
ลงทะเบียนเลือก |
R / W |
อ่าน / เขียนพิน |
จ |
เปิดใช้งาน PIN |
D0-D7 |
หมุดข้อมูล (8 พิน) |
ไฟ LED |
ขาขั้วบวก (+ 5V) |
LED K |
แคโทดพิน (GND) |
LCD สามารถทำงานในสองโหมดที่แตกต่างกันคือโหมด 4 บิตและโหมด 8 บิต ในโหมด 4 บิต เราจะส่งข้อมูลโดยการแทะแทะบนก่อนแล้วแทะล่าง สำหรับพวกคุณที่ไม่รู้ว่าแทะคืออะไร: แทะคือกลุ่มของสี่บิตดังนั้นสี่บิตล่าง (D0-D3) ของไบต์จะสร้างการแทะที่ต่ำกว่าในขณะที่สี่บิตบน (D4-D7) ของไบต์ในรูปแบบการแทะที่สูงขึ้น สิ่งนี้ทำให้เราสามารถส่งข้อมูล 8 บิต
ในขณะที่ในโหมด 8 บิต เราสามารถส่งข้อมูล 8 บิตได้โดยตรงในจังหวะเดียวเนื่องจากเราใช้ข้อมูลทั้งหมด 8 บรรทัด
ที่นี่ในโครงการนี้เราจะใช้โหมดที่ใช้กันมากที่สุดซึ่งเป็นโหมด 4 บิต ในโหมดสี่บิตเราสามารถบันทึกไมโครคอนโทรลเลอร์ได้ 4 พินและลดค่าใช้จ่ายในการเดินสายไฟ
16x2 ยังใช้รหัส HEX เพื่อรับคำสั่งใด ๆ มีคำสั่ง hex จำนวนมากสำหรับ LCD เช่นเลื่อนเคอร์เซอร์เลือกโหมดเลื่อนการควบคุมไปที่บรรทัดที่สองเป็นต้นหากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับโมดูลจอแสดงผล LCD 16X2 และคำสั่ง hex ให้ไปที่ลิงค์.
แผนภาพวงจรและการเชื่อมต่อ
ด้านล่างแสดงตารางการเชื่อมต่อวงจรระหว่างจอแอลซีดีและ ARM7
ARM7-LPC2148 |
จอแอลซีดี (16x2) |
P0.4 |
RS (ลงทะเบียนเลือก) |
P0.6 |
E (เปิดใช้งาน) |
P0.12 |
D4 (พินข้อมูล 4) |
P0.13 |
D5 (พินข้อมูล 5) |
P0.14 |
D6 (พินข้อมูล 6) |
P0.15 |
D7 (พินข้อมูล 7) |
การเชื่อมต่อของตัวควบคุมแรงดันไฟฟ้ากับ LCD และ ARM7 Stick
ตารางด้านล่างแสดงการเชื่อมต่อระหว่าง ARM7 และ LCD พร้อมตัวควบคุมแรงดันไฟฟ้า
IC ควบคุมแรงดันไฟฟ้า |
ฟังก์ชัน Pin |
LCD และ ARM-7 LPC2148 |
1. ขาซ้าย |
+ จากแบตเตอรี่อินพุต 9V |
NC |
2. หมุดกลาง |
- จากแบตเตอรี่ |
VSS, R / W, K ของ LCD GND ของ ARM7 |
3. หมุดขวา |
เอาต์พุตควบคุม + 5V |
VDD, A ของ LCD + 5V ของ ARM7 |
โพเทนชิออมิเตอร์พร้อม LCD
โพเทนชิออมิเตอร์ใช้เพื่อปรับความคมชัดของจอ LCD หม้อมีสามพินขาซ้าย (1) เชื่อมต่อกับ + 5V และตรงกลาง (2) กับ VEE หรือ V0 ของโมดูล LCD และขาขวา (3) เชื่อมต่อกับ GND เราสามารถปรับความคมชัดได้โดยหมุนลูกบิด
การตั้งค่าจัมเปอร์
มีหมุดจัมเปอร์อยู่ใน ARM7-Stick เพื่อให้เราสามารถจ่ายไฟและอัปโหลดรหัสโดยใช้ USB หรือใช้อินพุต 5V DC เพื่อจ่ายไฟเท่านั้น คุณสามารถดูภาพด้านล่าง
ด้านล่างนี้แสดงให้เห็นภาพว่าจัมเปอร์อยู่ในตำแหน่งที่ดีซีนั่นหมายความว่าเราต้องจ่ายไฟให้บอร์ดจากแหล่งจ่ายไฟ 5V ภายนอก
และภาพนี้แสดงว่าจัมเปอร์เชื่อมต่อในโหมด USB ที่นี่มีการจ่ายไฟและรหัสผ่านพอร์ต micro usb
หมายเหตุ:ในบทช่วยสอนนี้เราได้อัปโหลดโค้ดโดยใช้ USB โดยตั้งค่าจัมเปอร์เป็น USB จากนั้นเปลี่ยนจัมเปอร์เป็นโหมด DC เพื่อจ่ายไฟ LPC2148 จากอินพุต 5v ของตัวควบคุม คุณสามารถตรวจสอบนี้ในวิดีโอที่ได้รับในตอนท้าย
วงจรสุดท้ายสำหรับเชื่อมต่อ LCD 16x2 กับไมโครคอนโทรลเลอร์ ARM7จะมีลักษณะดังนี้:
การเขียนโปรแกรม ARM7-LPC2148
ในการเขียนโปรแกรม ARM7-LPC2148 เราต้องใช้เครื่องมือ keil uVision & Flash Magic เราใช้สาย USB เพื่อตั้งโปรแกรม ARM7 Stick ผ่านพอร์ต micro USB เราเขียนโค้ดโดยใช้ Keil และสร้างไฟล์ hex จากนั้นไฟล์ HEX จะถูกแฟลชไปที่แท่ง ARM7 โดยใช้ Flash Magic หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้ง keil uVision และ Flash Magic และวิธีการใช้งานให้ไปที่ลิงค์เริ่มต้นใช้งานไมโครคอนโทรลเลอร์ ARM7 LPC2148 และตั้งโปรแกรมโดยใช้ Keil uVision
รหัสที่สมบูรณ์สำหรับการเชื่อมต่อ LCD กับ ARM 7 มีให้ในตอนท้ายของบทช่วยสอนนี้เรากำลังอธิบายบางส่วน
ก่อนอื่นเราต้องรวมไฟล์ส่วนหัวที่จำเป็น
# รวม
การเริ่มต้นโมดูล LCD เป็นขั้นตอนที่สำคัญมาก ที่นี่เราใช้รหัส HEX ซึ่งเป็นคำสั่งจริงเพื่อบอก LCD เกี่ยวกับโหมดการทำงาน (4 บิต) ประเภทของ LCD (16x2) เส้นเริ่มต้นเป็นต้น
โมฆะ LCD_INITILIZE (โมฆะ) // ฟังก์ชั่นเพื่อเตรียม LCD { IO0DIR = 0x0000FFF0; // ตั้งค่าพิน P0.4, P0.6, P0.12, P0.13, P0.14, P0.15as OUTPUT delay_ms (20); LCD_SEND (0x02); // เริ่มต้น LCD ในโหมดการทำงาน 4 บิต LCD_SEND (0x28); // 2 บรรทัด (16X2) LCD_SEND (0x0C); // แสดงเคอร์เซอร์ปิด LCD_SEND (0x06); // เคอร์เซอร์เพิ่มอัตโนมัติ LCD_SEND (0x01); // แสดง LCD_SEND ที่ ชัดเจน(0x80); // บรรทัดแรกตำแหน่งแรก}
สำหรับโหมด 4 บิตเรามีฟังก์ชั่นการเขียนประเภทต่างๆสำหรับพินนั่นคือการใช้การแทะบนและล่าง มาดูกันว่าทำอย่างไร
โมฆะ LCD_SEND (คำสั่ง char) // ฟังก์ชั่นส่งคำสั่ง hex โดยแทะ { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((command & 0xF0) << 8)); // ส่งคำสั่งตอดบน IO0SET = 0x00000040; // การเปิดใช้งาน HIGH IO0CLR = 0x00000030; // สร้าง RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // การเปิดใช้งาน LOW delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((คำสั่ง & 0x0F) << 12)); // ส่งคำสั่งตอดล่าง IO0SET = 0x00000040; // เปิดใช้งาน IO0CLR สูง= 0x00000030; // RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // เปิดใช้ LOW delay_ms (5); }
ตอดส่งตรรกะ
IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((คำสั่ง & 0x0F) << 12)); // ส่งคำสั่งตอดล่าง IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((คำสั่ง & 0xF0) << 8)); // ส่งคำสั่งตอดบน
ข้อความข้างต้นสองข้อมีบทบาทสำคัญในโปรแกรมนี้ คำสั่งแรกส่งการแทะส่วนล่าง & วินาทีส่งแทะบน นั่นคือโดยไม่ส่งผลกระทบต่อพินอื่น ๆ ที่เราทำ มาดูกันว่ามันเกิดขึ้นได้อย่างไรก่อนที่จะทำความรู้จักกับตรรกะนี้ก่อน
ORing- (A-0 = A), (A-1 = 1) ANDing- (A & 0 = 0), (A & 1 = A)
ดังนั้นเราจึงใช้แนวคิดการกำบังและการดำเนินการกะตรรกะโดยไม่ส่งผลกระทบต่อพินอื่น ๆ หมายถึงเฉพาะพิน (P0.12-P0.15) เท่านั้นและไม่มีผลต่อพินอื่น ๆ เช่น P0.4, P0.6 จะทำได้โดยการขยับข้อมูลเป็นสี่บิตและทำการแทะส่วนบนในตำแหน่งของการแทะส่วนล่างและกำบังการแทะส่วนบน จากนั้นเราทำให้บิตล่างเป็นศูนย์ (0XF0) และ ORed ด้วยข้อมูลที่แทะเพื่อรับข้อมูลการแทะบนที่เอาต์พุต
กระบวนการที่คล้ายกันนี้ใช้สำหรับข้อมูลการแทะที่ต่ำลงแต่ที่นี่เราไม่จำเป็นต้องเปลี่ยนข้อมูล
ในขณะที่เขียนข้อมูลไปยังเอาต์พุตนั่นคือในโหมดคำสั่ง RS ควรเป็น LOW และในการดำเนินการเปิดใช้งานจะต้องเป็น HIGH และในโหมดข้อมูล RS ควรเป็น HIGH และในการดำเนินการเปิดใช้งานต้องเป็น HIGH
ตอนนี้สำหรับการส่งข้อมูลสตริงที่จะพิมพ์ที่เอาต์พุตจะใช้หลักการเดียวกันกับการแทะโดยแทะ ขั้นตอนสำคัญที่นี่คือ REGISTER SELECT (RS) ต้องสูงสำหรับโหมดข้อมูล
โมฆะ LCD_DISPLAY (ถ่าน * msg) // ฟังก์ชันพิมพ์อักขระที่ส่งทีละตัว { uint8_t i = 0; ในขณะที่ (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // ส่ง IO0SET บนแทะ= 0x00000050; // RS HIGH & ENABLE HIGH เพื่อพิมพ์ข้อมูลIO0CLR = 0x00000020; // RW LOW โหมดการเขียน ล่าช้า ms (2); IO0CLR = 0x00000040; // EN = 0, RS และ RW ไม่เปลี่ยนแปลง (เช่น RS = 1, RW = 0) ความล่าช้า ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((ข้อความ & 0x0F) << 12)); // ส่ง IO0SET ล่างแทะ= 0x00000050; // RS & EN สูงIO0CLR = 0x00000020; ล่าช้า ms (2); IO0CLR = 0x00000040; ล่าช้า ms (5); ผม ++; }
วิดีโอการเข้ารหัสและสาธิตฉบับสมบูรณ์ได้รับด้านล่าง