ในชีวิตประจำวันของเราเราเห็นอุปกรณ์หลายประเภทสำหรับแสดงข้อความรูปภาพและกราฟิก LCD เป็นอุปกรณ์แสดงผลที่ได้รับความนิยมมากที่สุดในอุปกรณ์อิเล็กทรอนิกส์และใช้ในโครงการส่วนใหญ่ที่แสดงข้อมูลบางประเภท มี LCD หลายประเภทที่ใช้ในโครงการอิเล็กทรอนิกส์ เรามีใช้อยู่แล้ว 16X2 LCD ในหลายโครงการของเราและยังใช้TFT LCD กับ Arduino คุณสามารถค้นหาโครงการที่เกี่ยวข้องกับ LCD 16X2 ของเราได้โดยไปที่ลิงค์นี้รวมถึงการเชื่อมต่อกับ 8051, AVR, Arduinoและอีกมากมาย
ในการกวดวิชานี้เราจะไปทำ  จอแอลซีดีกราฟิกการเชื่อมต่อกับไมโครคอนโทรลเลอร์ 8051 ในโครงการนี้เราจะแสดงวิธีการแสดงภาพบน Graphical LCD (GLCD)

ส่วนประกอบที่จำเป็น:

  • จอแอลซีดีแบบกราฟิก
  • AT89c52 8051 ไมโครคอนโทรลเลอร์
  • ตัวควบคุมแรงดันไฟฟ้า 7805
  • ตัวเก็บประจุ 1000 ยูเอฟ
  • ตัวเก็บประจุ 10 ยูเอฟ
  • ตัวต้านทาน 10K
  • 10K POT
  • Crystal Oscillator 12 MH
  • สายเชื่อมต่อ
  • คณะขนมปัง
  • แถบแถบชาย
  • แหล่งจ่ายไฟ                    
  • LED
  • ตัวต้านทาน 220 โอห์ม
  • ตัวต้านทาน 1K

จอแอลซีดีแบบกราฟิก:

กราฟิก-LCD

จอ LCD ขนาด 16x2 ที่เรียบง่ายมี 16 พิน แต่จอแอลซีดีแบบกราฟิกมี 20 พิน คำอธิบายพินระบุไว้ด้านล่างตามแผ่นข้อมูล:
หมายเลขพินชื่อพินลักษณะฟังก์ชัน
1VSSพื้น0 โวลต์
2VDDพาวเวอร์ซัพพลาย5 โวลต์
3V0การปรับความคมชัดของ LCD 
4อาร์เอสการเลือกคำสั่ง / ข้อมูลลงทะเบียนRS = 0: การเลือกคำสั่งและ RS = 1: การเลือกข้อมูล
5R / Wอ่าน / เขียนลงทะเบียนR / W = 0: การเลือกเขียนและ R / W = 1: อ่านรายการที่เลือก
6Eเปิดใช้งานสัญญาณ 
7DB0ข้อมูลขาเข้า / ขาออก (DB0-DB7)8 บิต (DB0-DB7)
8DB1
9DB2
10DB3
11DB4
12DB5
13DB6
14DB7
15CS1เลือกชิปCS1 = 1, Chip Select Signal สำหรับ IC1
16CS2เลือกชิปCS2 = 1, Chip Select Signal สำหรับ IC2
17RSTรีเซ็ตรีเซ็ต GLCD
18VEEแรงดันไฟฟ้าลบสำหรับไดรเวอร์ LCD 
19Aไฟ LED ด้านหลัง5 โวลต์
20Kไฟ LED ด้านหลังพื้น
 

แสดงรูปภาพบน LCD แบบกราฟิกโดยใช้ 8051:

ในการแสดงภาพบนจอ LCD แบบกราฟิกอันดับแรกเราจำเป็นต้องแปลงภาพนั้นเป็นรหัสแอสเซมบลีเพื่อให้ไมโครคอนโทรลเลอร์ 8051 สามารถเข้าใจและอ่านได้ ดังนั้นเราต้องทำตามขั้นตอนด้านล่างสำหรับการแปลงอิมเมจให้เป็นรหัส HEX:

ขั้นตอนที่ 1:ก่อนอื่นเราต้องดาวน์โหลดแอปพลิเคชั่นที่แปลงอิมเมจ (รูปแบบ BMP) เป็นรหัสแอสเซมบลี ดังนั้นดาวน์โหลดBMP2ASM Image Conversion Applicationจากลิงค์นี้เพียงคลิกขวาที่ลิงก์จากนั้นคลิกบันทึกลิงก์เป็น ...
ขั้นตอนที่ 2:จากนั้นเลือกภาพที่คุณต้องการแสดงบนGraphical LCDและแปลงเป็น BMP (หากยังไม่อยู่ในรูปแบบ BMP) โดยใช้แอปพลิเคชันใด ๆ เช่น MS Paint, Photoshop ฯลฯ หรือคุณสามารถหาเว็บไซต์ออนไลน์มากมาย สำหรับการแปลงรูปแบบภาพ เรามีภาพ BMP ด้านล่างที่มีขนาด 128x64:
ภาพสำหรับกราฟิก-LCD

ขั้นตอนที่ 3:ตอนนี้แยกแฟ้ม BMP2ASM.zip ซึ่งเราได้ดาวน์โหลดในขั้นตอนที่ 1 และเปิด Bmp2asm.exe ภายในมันและเลือกภาพBMP
เชื่อม-กราฟิก-LCD ที่มี-8051 bmp2asm-1 เชื่อม-กราฟิก-LCD ที่มี-8051 bmp2asm-2

ขั้นตอนที่ 4:ตอนนี้กด“ แปลง” ในหน้าต่างแอปพลิเคชัน BMP2ASM
เชื่อม-กราฟิก-LCD ที่มี-8051 bmp2asm-3

ขั้นตอนที่ 5:จากนั้นคัดลอกรหัสที่สร้างและวางในโปรแกรม 8051 ใน Keil uVision ทำการเปลี่ยนแปลงบางอย่างและรวบรวมรหัส
เชื่อม-กราฟิก-LCD ที่มี-8051 bmp2asm-4
ตอนนี้โค้ดของคุณพร้อมที่จะอัพโหลดใน 8051 Microcontroller แล้ว 

คำอธิบายวงจร:

 เชื่อม-กราฟิก-LCD-8051 กับวงจรแผนภาพ
การเชื่อมต่อวงจรสำหรับการเชื่อมต่อจอแอลซีดีแบบกราฟิกเพื่อ 8051 ไมโครคอนโทรลเลอร์เป็นเรื่องง่ายและเกือบเดียวกันเช่นการเชื่อมต่อ 16x2 จอแอลซีดีเพื่อ 8051 แต่ LCD ขนาด 16x2 มี 16 พินและ GLCD มี 20 พิน
หม้อขนาด 10K ใช้สำหรับตั้งค่าความเปรียบต่างของ GLCD หมุดควบคุมของ GLCD RS, R / W และ E เชื่อมต่อโดยตรงกับหมายเลขพิน89C52 P1.0, P1.1 และ P1.2 พินเลือกชิป CS1 และ CS2 ของ LCD เชื่อมต่อกับพิน P1.3 และ P1.4 ตามลำดับ Data pins DB0-DB7 เชื่อมต่อโดยตรงที่ PORT P2 ตัวควบคุมแรงดัน 7805 ใช้สำหรับแหล่งจ่ายไฟปกติ 5 โวลต์ ในวิดีโอสาธิตฉันใช้แหล่งจ่ายไฟ Arduino

คำอธิบายการเขียนโปรแกรม:

ก่อนอื่นเรารวมไฟล์ส่วนหัวที่จำเป็นในโปรแกรมและกำหนดบิตสำหรับส่วนควบคุมและ Data Pins ของ GLCD
#include <reg51.h>
#include <intrins.h>
#define lcdport P2

sbit rs = P1 ^ 0;
sbit rw = P1 ^ 1;
sbit en = P1 ^ 2;
sbit cs1 = P1 ^ 3;
sbit cs2 = P1 ^ 4;

หลังจากนั้นเราได้สร้างฟังก์ชั่นการหน่วงเวลา
โมฆะล่าช้า (int itime)
{
  int i, j;
  สำหรับ (i = 0; i <iTime; i ++)
  สำหรับ (ญ = 0; J <125; J ++);
}

Function void lcd_disp_on ()ใช้สำหรับเปิดการทำงานของจอแสดงผล
Function void setCursorY (int y)ถูกสร้างขึ้นเพื่อตั้งค่าคอลัมน์ใน GLCD และสร้างโมฆะฟังก์ชั่นsetCursorX (int x)สำหรับการตั้งค่าหน้าใน GLCD ไฟล์รหัสที่สมบูรณ์จะได้รับในด้านล่างส่วนรหัส

หลังจากตั้งค่าคอลัมน์และหน้าเราได้เขียนฟังก์ชันสำหรับส่งคำสั่งและข้อมูลไปยัง GLCD
lcdprint เป็นโมฆะ (char dat ขนาด int)
{
    int i ที่ไม่ได้ลงชื่อ
    สำหรับ (i = 0; i <ขนาด; i ++)
    {
        ถ้า (c <64)
        {
            lcdport = ดาด;
            CS1 = 1;
    ....
    ....

ในฟังก์ชั่นโมฆะ main ()เราได้ทำการล้าง GLCD แล้วตั้งค่าคอลัมน์และหน้า หลังจากนั้นส่งข้อมูลไปยังจอแอลซีดีโดยใช้โมฆะ lcdprint (ถ่านดาดขนาด int)ฟังก์ชั่น
โมฆะหลัก ()
{ 
    int x, y;
    P3 = 0xff;
    ในขณะที่ (1)
    {
           lcdclear ();
       สำหรับ (y = 0; Y <8; Y ++)
       {
        สำหรับ (x = 0; x <128; x ++)
        {
          lcd_disp_on (); 
          setCursorX (y);
          setCursorY (x);
          lcdprint (ภาพที่ [Y] [x], x);
        }
       }
    ........
    ..... .......