- 16x2 Dot Matrix LCD คอนโทรลเลอร์ IC HD44780:
- การแสดงอักขระที่กำหนดเองบนจอ LCD 16x2:
- คำอธิบายการเขียนโปรแกรมและการทำงาน:
- การเชื่อมต่อและการทดสอบวงจร:
ในบทช่วยสอนก่อนหน้านี้เราได้เรียนรู้วิธีการเชื่อมต่อ LCD 16 * 2 กับไมโครคอนโทรลเลอร์ PIC เราขอแนะนำให้คุณทำก่อนที่จะดำเนินการต่อไปหากคุณเป็นผู้เริ่มต้นใช้ไมโครคอนโทรลเลอร์ PIC ก่อนหน้านี้เราได้เรียนรู้พื้นฐานของ PIC โดยใช้โปรแกรมกะพริบ LED และตัวจับเวลาในไมโครคอนโทรลเลอร์ PIC คุณสามารถตรวจสอบบทช่วยสอนทั้งหมดเกี่ยวกับ Learning PIC Microcontrollers โดยใช้คอมไพเลอร์ MPLABX และ XC8 ได้ที่นี่
ในบทช่วยสอนนี้ให้เราทำให้น่าสนใจยิ่งขึ้นโดยการสร้างตัวละครที่กำหนดเองและแสดงบนหน้าจอ LCD ของเราโดยใช้ไมโครคอนโทรลเลอร์ PIC16F877A PIC นอกจากนี้ยังมีอักขระที่กำหนดเองส่วนใหญ่ที่กำหนดไว้ล่วงหน้าซึ่งกำหนดโดย IC HD44780A เราจะดูว่าเราสามารถใช้งานได้อย่างไร ตามที่อธิบายไว้ในบทช่วยสอนก่อนหน้านี้ LCD ของเรามีคอนโทรลเลอร์ Hitachi HD44780 ฝังอยู่ซึ่งช่วยให้เราแสดงตัวอักษรได้ อักขระแต่ละตัวที่เราแสดงนั้นถูกกำหนดไว้ล่วงหน้าแล้วใน ROM ของ HD44780 IC เราจะเรียนรู้เกี่ยวกับตัวควบคุม LCD IC HD44780 ก่อนที่จะแสดงตัวอักษรบน LCD
16x2 Dot Matrix LCD คอนโทรลเลอร์ IC HD44780:
ในการแสดงอักขระที่กำหนดเองเราต้องบอก IC ว่าอักขระที่กำหนดเองจะมีลักษณะอย่างไร จะทำอย่างไรที่เราควรรู้เกี่ยวกับสามประเภทของความทรงจำในปัจจุบันภายในควบคุม HD44780 LCD IC:
Character Generator ROM (CGROM): เป็นหน่วยความจำแบบอ่านอย่างเดียวซึ่งตามที่กล่าวไว้ก่อนหน้านี้มีรูปแบบทั้งหมดของอักขระที่กำหนดไว้ล่วงหน้าภายใน ROM นี้จะแตกต่างกันไปตามอินเทอร์เฟซ IC แต่ละประเภทและบางตัวอาจมีอักขระแบบกำหนดเองที่กำหนดไว้ล่วงหน้าด้วย
Display Data RAM (DDRAM):นี่คือหน่วยความจำเข้าถึงโดยสุ่ม ทุกครั้งที่เราแสดงตัวอักษรรูปแบบจะถูกดึงมาจาก CGROM และโอนไปยัง DDRAM จากนั้นจะถูกวางไว้บนหน้าจอ พูดง่ายๆคือ DDRAM จะมีรูปแบบของอักขระทั้งหมดที่กำลังแสดงอยู่บนหน้าจอ LCD วิธีนี้สำหรับแต่ละรอบ IC ไม่จำเป็นต้องดึงข้อมูลจาก CGROM และช่วยในการรับความถี่ในการอัปเดตสั้น ๆ
RAM ของตัวสร้างอักขระ (CGRAM):นี่เป็นหน่วยความจำเข้าถึงโดยสุ่มด้วยดังนั้นเราจึงสามารถเขียนและอ่านข้อมูลจากมันได้ เนื่องจากชื่อมีความหมายถึงหน่วยความจำนี้จะเป็นชื่อที่สามารถใช้สร้างอักขระที่กำหนดเองได้ เราต้องสร้างรูปแบบสำหรับตัวละครและเขียนลงใน CGRAM รูปแบบนี้สามารถอ่านและแสดงบนหน้าจอได้เมื่อต้องการ
ตอนนี้เนื่องจากเรามีความเข้าใจพื้นฐานเกี่ยวกับประเภทของหน่วยความจำที่มีอยู่ใน IC อินเตอร์เฟส HD44780 ให้เราดูในแผ่นข้อมูลเพื่อทำความเข้าใจเพิ่มเติมอีกเล็กน้อย
ตามที่ระบุในแผ่นข้อมูล HD44780 IC ได้จัดเตรียมไว้เป็น 8 ตำแหน่งเพื่อจัดเก็บรูปแบบที่กำหนดเองของเราใน CGRAM และทางด้านขวาเราจะเห็นว่ามีอักขระที่กำหนดไว้ล่วงหน้าซึ่งสามารถแสดงบนหน้าจอ LCD ของเราได้ ให้เราดูว่าเราทำได้อย่างไร
การแสดงอักขระที่กำหนดเองบนจอ LCD 16x2:
ในการแสดงอักขระที่กำหนดเองก่อนอื่นเราต้องสร้างรูปแบบสำหรับมันแล้วบันทึกลงใน CGRAM เนื่องจากเรามีฟังก์ชั่นไลบรารีอยู่แล้วจึงควรทำสิ่งนี้ได้อย่างง่ายดายด้วยคำสั่งง่ายๆ นี่คือฟังก์ชัน Library สำหรับ LCD แต่ที่นี่เราได้คัดลอกฟังก์ชัน Library ทั้งหมดในโปรแกรมมาวางไว้แล้วดังนั้นจึงไม่จำเป็นต้องรวมไฟล์ส่วนหัวนี้ไว้ในโปรแกรมของเรา ตรวจสอบบทความนี้ด้วยสำหรับ Basic LCD ที่ใช้งานได้และ Pinouts
ขั้นตอนแรกคือการสร้างรูปแบบหรืออักขระที่กำหนดเอง อย่างที่เราทราบกันดีว่าตัวละครแต่ละตัวมีจุด 5 * 8 รวมกัน เราต้องเลือกว่าจุดใด (พิกเซล) ควรจะสูงและควรอยู่ต่ำ เพียงวาดช่องด้านล่างและแรเงาพื้นที่ตามตัวละครของคุณ ตัวละครของฉันที่นี่เป็นคนติด (หวังว่าจะดูเหมือนกันนะ) เมื่อแรเงาแล้วให้เขียนค่าไบนารีที่เท่ากันของแต่ละไบต์ดังที่แสดงด้านล่าง
เพียงแค่ใส่ '1' บนพื้นที่แรเงาและ '0' บนพื้นที่ที่ไม่ได้แรเงาสำหรับแต่ละไบต์เท่านี้ก็พร้อมใช้งานรูปแบบที่กำหนดเองของเราแล้ว ในทำนองเดียวกันผมได้ทำรหัสรูปแบบ 8 ที่กำหนดเองสำหรับเราพื้นที่หน่วยความจำ 8 นำเสนอ CGROM มีรายชื่ออยู่ในตารางด้านล่าง
สโน: |
อักขระที่กำหนดเอง |
รหัสรูปแบบ |
1 |
0b01110, 0b01110, 0b00100, 0b01110, 0b10101, 0b00100, 0b01010, 0b01010 |
|
2 |
0b00000, 0b00000, 0b01010, 0b00100, 0b00100, 0b10001, 0b01110, 0b00000 |
|
3 |
0b00100, 0b01110, 0b11111, 0b11111, 0b01110, 0b01110, 0b01010, 0b01010 |
|
4 |
0b01110, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
5 |
0b01110, 0b10000, 0b10000, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
6 |
0b00000, 0b10001, 0b01010, 0b10001, 0b00100, 0b01110, 0b10001, 0b00000 |
|
7 |
0b00000, 0b00000, 0b01010, 0b10101, 0b10001, 0b01110, 0b00100, 0b00000 |
|
8 |
0b11111, 0b11111, 0b10101, 0b11011, 0b11011, 0b11111, 0b10001, 0b11111 |
หมายเหตุ: ไม่บังคับให้โหลดทั้ง 8 ช่องว่างที่มีให้ใน CGRAM
คำอธิบายการเขียนโปรแกรมและการทำงาน:
ตอนนี้รหัสรูปแบบของเราพร้อมแล้วเราก็ต้องโหลดลงใน CGRAM ของ LCD และแสดงโดยใช้ไมโครคอนโทรลเลอร์ PIC ในการโหลดเข้าสู่ CGRAM เราสามารถสร้างอาร์เรย์ขององค์ประกอบ 5 * 8 และโหลดแต่ละไบต์โดยใช้ ' for loop ' อาร์เรย์ของรหัสรูปแบบแสดงไว้ด้านล่าง:
const ไม่ได้ลงนาม Custom_Char5x8 แบบสั้น = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010, // รหัสสำหรับพื้นที่หน่วยความจำ CGRAM 1 0b00000,0b00000,0b01010,0b00100,0b00100,0b10001,0b01110,0b00000 สำหรับรหัส พื้นที่หน่วยความจำ CGRAM 2 0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010, // รหัสสำหรับพื้นที่หน่วยความจำ CGRAM 3 0b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00000, // รหัสสำหรับ CGRAM ช่องว่าง 4 0b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000, // รหัสสำหรับพื้นที่หน่วยความจำ CGRAM 5 0b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000, // รหัสสำหรับพื้นที่หน่วยความจำ CGRAM 6 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000, // รหัสสำหรับพื้นที่หน่วยความจำ CGRAM 7 0b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // รหัสสำหรับพื้นที่หน่วยความจำ CGRAM 8};
พื้นที่หน่วยความจำแต่ละพื้นที่เต็มไปด้วยรูปแบบอักขระที่เคารพ ในการโหลดรูปแบบนี้ลงใน HD44780 IC ต้องอ้างถึงแผ่นข้อมูลของ HD44780 แต่เป็นเพียงบรรทัดคำสั่งที่สามารถใช้เพื่อตั้งค่าที่อยู่ของ CGRAM
// *** โหลดถ่านที่กำหนดเองลงใน CGROM *** ////// Lcd_Cmd (0x04); // ตั้งค่าที่อยู่ CGRAM Lcd_Cmd (0x00); //.. ตั้งค่า CGRAM Address สำหรับ (i = 0; i <= 63; i ++) Lcd_Print_Char (Custom_Char5x8); Lcd_Cmd (0); // กลับไปที่หน้าแรก Lcd_Cmd (2); //.. กลับไปที่หน้าแรก // *** การโหลดถ่านที่กำหนดเองเสร็จสมบูรณ์ *** //////
ที่นี่ภายใน ' for loop' แต่ละค่าไบนารีจะถูกโหลดลงใน CGROM เมื่อโหลดรูปแบบแล้วสามารถทำให้อักขระที่กำหนดเองแสดงได้โดยเพียงแค่เรียกตำแหน่งของรูปแบบโดยใช้ฟังก์ชัน void Lcd_Print_Char (char data) ดังที่แสดงด้านล่าง
Lcd_Print_Char (0); // แสดงอักขระที่กำหนดเอง 0 Lcd_Print_Char (1); // แสดงอักขระที่กำหนดเอง 1 Lcd_Print_Char (2); // แสดงอักขระที่กำหนดเอง 2 Lcd_Print_Char (3); // แสดงอักขระที่กำหนดเอง 3 Lcd_Print_Char (4); // แสดงอักขระที่กำหนดเอง 4 Lcd_Print_Char (5); // แสดงอักขระที่กำหนดเอง 5 Lcd_Print_Char (6); // แสดงอักขระที่กำหนดเอง 6 Lcd_Print_Char (7); // แสดงอักขระที่กำหนดเอง 7
พิมพ์อักขระพิเศษที่กำหนดไว้ล่วงหน้า:
HD44780 IC มีอักขระพิเศษที่กำหนดไว้ล่วงหน้าซึ่งเก็บไว้ใน DDROM สามารถพิมพ์อักขระเหล่านี้ลงบนหน้าจอได้โดยตรงโดยอ้างอิงค่าไบนารีในแผ่นข้อมูล
ตัวอย่างเช่นค่าไบนารีของอักขระ "ALPHA" คือ 0b11100000 วิธีการรับสิ่งนี้สามารถเข้าใจได้จากรูปด้านล่างเช่นเดียวกันคุณจะได้รับค่าสำหรับอักขระพิเศษใด ๆ ที่กำหนดไว้ล่วงหน้าใน IC
เมื่อทราบค่าไบนารีแล้วสามารถพิมพ์อักขระที่เกี่ยวข้องไปยังหน้าจอได้โดยใช้ฟังก์ชัน void Lcd_Print_Char (char data) ดังที่แสดงด้านล่าง
Lcd_Print_Char (0b11100000); // ค่าไบนารีของ alpha จาก data-sheet
รหัสที่สมบูรณ์ของโครงการนี้จะได้รับด้านล่างในส่วนรหัสตรวจสอบรายละเอียดวิดีโอคำอธิบายในตอนท้ายของการกวดวิชานี้
การเชื่อมต่อและการทดสอบวงจร:
โปรเจ็กต์นี้ไม่มีข้อกำหนดฮาร์ดแวร์เพิ่มเติมเราได้ใช้การเชื่อมต่อเดียวกันจากบทช่วยสอนการเชื่อมต่อ LCD ก่อนหน้านี้และใช้บอร์ดเดียวกันกับที่เราสร้างไว้ในบทแนะนำการกะพริบ LED เช่นเคยลองจำลองโปรแกรมโดยใช้ Proteus เพื่อตรวจสอบผลลัพธ์ของเรา
เมื่อเราจำลองการทำงานตามที่คาดไว้แล้วให้เบิร์นโค้ดลงในการตั้งค่าฮาร์ดแวร์ของเราโดยตรง ผลลัพธ์ของโปรแกรมที่ควรจะเป็นอะไรเช่นนี้
นั่นคือวิธีที่คุณสามารถแสดงอักขระที่กำหนดเองบน LCD 16x2 โดยใช้ไมโครคอนโทรลเลอร์ PICพร้อมคอมไพเลอร์ MPLABX และ XC8 ตรวจสอบชุดการเรียนรู้ไมโครคอนโทรลเลอร์ PIC ที่สมบูรณ์ของเราได้ที่นี่