آموزش راه اندازی LCD گرافیکی با آردوینو

در این مقاله به آموزش راه اندازی LCD گرافیکی با آردوینو UNO می پردازیم. ماژول LCD مورد استفاده در این پروژه ST7920 است.

در این مقاله قصد داریم تا در ابتدا توضیحاتی درمورد LCD گرافیکی 128*64 بدهیم. سپس، مراحل راه‌اندازی آن را با برد آردوینو آموزش می‌دهیم و تصاویر بیت‌مپ را نمایش می‌دهیم. و در آخر هم بعد از این که سخت‌افزارهای لازم را بهم وصل کردیم، یک عکس بیت‌مپ را روی ماژول نمایش می‌دهیم.

آموزش راه اندازی LCD گرافیکی با آردوینو

تفاوت ال سی دی گرافیکی 128×64 با ال سی دی کاراکتری 16×2

در نگاه اول، بنظر می‌رسد ال سی دی های 128*64 شبیه ال سی دی های ۱۶*۲ باشند. ساختار و پین‌های هر دوی این نمایشگرها شبیه به هم هستند ولی یک تفاوت بزرگ میان این دو دسته وجود دارد.

نمایشگر ال سی دی های 16×2، از دسته ی نمایشگرهای کاراکتری می باشند و فقط می‌توانند الفبا و اعداد و بعضی از کاراکترهای خاص را نمایش دهند. مقاله آموزش LCD کاراکتری 2 *16 برای مبتدیان (قسمت1) را برای آشنایی بیشتر با LCDهای کاراکتری ببینید.

اما نمایشگر ال سی دی های 128×64، از دسته ی نمایشگرهای گرافیکی می باشند و علاوه بر موارد بالا، امکان نمایش تصاویر و انیمیشن‌های ساده را هم دارند. در ماژول ال سی دی گرافیکی 128×64، 64 ردیف و 128 ستون وجود دارد.

همچنین خوب است که بدانید در واقع متداول ترین ابعاد ال سی دی های گرافیکی 64*128 می باشد؛ در حالی که متداول ترین ابعاد ال سی دی های کاراکتری 16*2 است.

تفاوت آموزش راه اندازی LCD گرافیکی با آردوینو شاخص

ال سی دی کنترلر ST7920

انواع مختلفی از ال سی دی‌های گرافیکی وجود دارد. با این که موارد استفاده آن‌ها تقریبا مشابه است، همه آن‌ها در کنترلر ال سی دی با یکدیگر تفاوت دارند.

کنترلرهای معمول شامل KS0108، SSD1306، ST7920، SH1106، SSD1322 و … می‌شوند. پین نهایی می‌تواند برای کنترلرهای مختلف تغییر کند. قبل از خرید هم کنترلر و هم پین نهایی را بررسی کنید.

ماژولی که در این آموزش استفاده می‌شود دارای کنترلر ST7920است و از رابط‌های 8 بیت، 4 بیت و سریالی پشتیبانی می‌کند.

اگر قبلاً از نمایشگر LCD 16×2 استفاده کرده‌اید، احتمالا با هر دو رابط موازی 4 بیتی و 8 بیتی آشنا باشید. رابط سریالی مبحثی جدید است که در این آموزش به آن خواهیم پرداخت.

پین ال سی دی 128×64

قبل از خرید حتما پین‌های ماژول را چک کنید. جدول زیر تمامی پین‌ها و اطلاعات لازم ماژولی که برای این آموزش استفاده می‌کنیم را نشان می‌دهد.

شماره پین نام پین توضیحات
1 GND گراند
2 VCC ولتاژ تغذیه
3 VO تنظیم کنتراست
4 RS انتخاب رجیستر (CS در مود سریال)
5 RW کنترلر نوشتن و خواندن اطلاعات (ورود اطلاعات سریالی)
6 E فعال‌سازی (CLK سریالی)
7-14 D0-D7 دیتا
15 PSB انتخاب رابط (0: رابط سریالی، 1: رابط 4 یا 8 بیتی)
16 NC وصل نشده
17 RST ریست
18 Vout خروجی تقویت‌کننده ولتاژ LCD
19 BLA آند LED پس زمینه
20 BLK کاتد LED پس زمینه

در عکس زیر پین‌های پشت ال سی دی گرافیکی 64*128 را مشاهده می‌کنید.

پین ال سی دی 128x64 گرافیکی

آموزش راه اندازی ال سی دی گرافیکی 64*128 با آردوینو

حالا که در مورد ال سی دی گرافیکی و کنترلر ST7920 اطلاعات بیشتری کسب کرده‌اید، وقت آن است راه اندازی ال سی دی گرافیکی را با استفاده از آردوینو یاد بگیرید. برای این که متوجه شوید راه‌اندازی ال سی دی گرافیکی با استفاده از برد آردوینو ساده است یک مدار ساده را برای شما مثال می‌زنیم.

برای انتقال دیتا از رابط سریال استفاده می‌کنیم و یک عکس بیت‌مپ را به نمایش می‌گذاریم.

مطلب پیشنهادی:  بردهای آردوینو Due و Zero

نمودار مدار

عکس زیر نمودار مدار برای راه اندازی LCD گرافیکی با آردوینو است.

آموزش راه اندازی LCD گرافیکی با آردوینو

وسایل مورد نیاز

ما برای راه اندازی این پروژه، LCD گرافیکی 128×64 را از قطعات الکترونیکی شرکت هادی بان الکترونیک خریداری کردیم.

اتصالات سخت‌افزاری

3 راه برای راه‌اندازی صفحه نمایش گرافیکی با برد آردوینو وجود دارد که به شرح زیر هستند:

  • 4 بیتی
  • 8 بیتی
  • سریالی

در حالت سریالی فقط به سه پین برای انتقال اطلاعات نیاز داریم. این سه پین، پین‌های RS، RW و E هستند.پین RS در ارتباط سریالی مانند پین Chip Select عمل می‌کند. پین‌های RW و E‌به ترتیب مانند پین‌های Serial Data IN و Serial CLK عمل می‌کنند.

https://melec.ir/arduino-uno-r3/

پین ‌RS، پین RW و پین E را به IC های دیجیتال 10 تا 13 برد آردوینو وصل کنید. برای این که رابط سریالی را انتخاب کنید، حتما پین PCB‌ را به GND وصل کنید.

بقیه اتصالات مانند راه‌اندازی صفحه‌نمایش 16×2 است. VCC و GND‌ به 5Vو منبع تغذیه زمین وصل می‌شوند. پین VO به یکی از پایه‌های پتانسیومتر 10 کیلو اهمی وصل می‌شود و دو پایه دیگر به پین‌های V5 و GND‌ وصل می‌شوند.

برای این که زمینه نمایشگر روشن شود، BLV‌ را به V5 و BLK را به GND وصل کنید.

تولید کد HEX برای نمایش عکس بیت‌مپ

بجای این که حروف را با فونت‌های مختلف نمایش دهیم، روی نمایشگر گرافیکی یک عکس بیت‌مپ را نمایش می‌دهیم. قبل از نوشتن کد، باید تصویر بیت‌مپ را به آرایه‌های بایتی تبدیل کنید.

تولید کد HEX برای نمایش عکس بیت‌مپ

یادتان باشد که اندازه نمایشگر 128×64 است پس بزرگ‌ترین عکسی که می‌توانید به نمایش بگذارید باید 128×64 پیکسل باشد. با استفاده از نرم‌افزار paint ویندوز رزولوشن عکس را تا 126×64 پایین آورده و با فرمت Monochrome Bitmap Image فایل را ذخیره کنید.

برای تبدیل این عکس به آرایه‌های بایتی، از نرم‌افزار GIMP استفاده می‌کنیم. فرمت عکس مورد نظر را با استفاده از این نرم‌افزار به X Bitmap Image تبدیل کنید.

یک فایل با پسوند .xbm ایجاد می‌شود که دارای کدهای HEX آن عکس هستند. با استفاد از ادیتوری مانند ++Notepad فایل را باز کرده و تغییرات زیر را ایجاد کنید. آرایه باید static const unsigned char بوده و بعد از نام آرایه کلمه PROGMEM باید وجود داشته باشد.

static const unsigned char myBitmap [] PROGMEM = {

0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,

0xff, 0xff, 0xff, 0x3f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

…..

0xff, 0xff, 0xff, 0x7f };

کد

قبل از این که کد را بنویسید، کتابخانه U8g2 را باید دانلود کنید. در IDE آدوینو به مسیر Tools-> Manage Libraries بروید و نام کتابخانه را جستجو کرده و آخرین نسخه آن را نصب کنید. این کتابخانه کمی پیچیده است اما راهنمای‌ آن در اینجا کامل نوشته شده است.

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

// 'TheOffice', 128x64px
static const unsigned char myBitmap [] PROGMEM = {

   0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0x3f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x06, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7,
   0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0x9f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x03, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0,
   0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xb0,
   0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3f, 0x00,
   0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x08, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xb0,
   0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x7f, 0x00,
   0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x08, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xb0,
   0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc0, 0x7f, 0x00,
   0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x08, 0xf0, 0xff, 0x03, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x08, 0xf8, 0xff, 0x07, 0x00, 0x00, 0x7c, 0xb0,
   0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf8, 0xff, 0x07,
   0x00, 0x00, 0xfe, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x08, 0xf8, 0xff, 0x07, 0x00, 0x00, 0xfe, 0xb0, 0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x08, 0xf8, 0xff, 0x07, 0x00, 0x00, 0xfe, 0xb0,
   0x81, 0xff, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf8, 0xff, 0x0f,
   0x00, 0x00, 0xfe, 0xb0, 0x81, 0xff, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x08, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0xfe, 0xb0, 0x81, 0xff, 0x1d, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x08, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0xfe, 0xb0,
   0x01, 0x38, 0xdc, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x08, 0xfc, 0xff, 0x0f,
   0x00, 0x00, 0x7c, 0xb0, 0x01, 0x38, 0xfc, 0xf3, 0x03, 0x00, 0x00, 0x00,
   0x08, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0x38, 0xb0, 0x01, 0x38, 0xfc, 0xfb,
   0x07, 0x00, 0x00, 0x00, 0x08, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0xfc, 0xb0,
   0x01, 0x38, 0x9c, 0x3b, 0x07, 0x00, 0x00, 0x00, 0x08, 0xfc, 0xff, 0x07,
   0x00, 0x00, 0xfe, 0xb0, 0x01, 0x38, 0x9c, 0xfb, 0x07, 0x00, 0x00, 0x00,
   0x08, 0xfc, 0xff, 0x07, 0x00, 0x00, 0xfe, 0xb7, 0x01, 0x38, 0x9c, 0xfb,
   0x07, 0x00, 0x00, 0x00, 0x08, 0xfc, 0xff, 0x07, 0x00, 0x00, 0xfe, 0xb7,
   0x01, 0x38, 0x9c, 0x3b, 0x07, 0x00, 0x00, 0x00, 0x08, 0xfc, 0xff, 0x07,
   0x00, 0x00, 0xfe, 0xb7, 0x01, 0x38, 0x9c, 0xfb, 0x07, 0x00, 0x00, 0x00,
   0x08, 0xfe, 0xff, 0x07, 0x00, 0x00, 0xff, 0xb7, 0x01, 0x38, 0x9c, 0xf3,
   0x03, 0x00, 0x00, 0x00, 0x08, 0xfe, 0xff, 0x07, 0x00, 0x80, 0xff, 0xb7,
   0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xff, 0xff, 0x00,
   0x00, 0xc0, 0xff, 0xb6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xc8, 0xff, 0xff, 0x00, 0x00, 0xe0, 0xff, 0xb6, 0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0xc8, 0xff, 0xff, 0x00, 0x00, 0xfe, 0xff, 0xb6,
   0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xff, 0xff, 0x00,
   0xc0, 0xff, 0xff, 0xb6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xc8, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xb6, 0x01, 0xf8, 0x07, 0xbe,
   0xff, 0x00, 0x00, 0x00, 0xc8, 0xff, 0xff, 0x00, 0xe0, 0x7f, 0xff, 0xb7,
   0x01, 0xfc, 0x1f, 0xbf, 0xff, 0x00, 0x00, 0x00, 0xc8, 0xff, 0xff, 0xfc,
   0xff, 0x0f, 0xff, 0xb7, 0x01, 0xfe, 0x1f, 0xbf, 0xff, 0x00, 0x00, 0x00,
   0xc8, 0xff, 0xff, 0xfc, 0xff, 0xef, 0xff, 0xb7, 0x01, 0x1f, 0x3e, 0x8f,
   0x03, 0x00, 0x00, 0x00, 0xc8, 0xff, 0xff, 0xc0, 0x01, 0xfe, 0xff, 0xb7,
   0x01, 0x0f, 0xbc, 0xff, 0xef, 0xf0, 0x87, 0x1f, 0xc8, 0xff, 0xff, 0xc0,
   0x01, 0xff, 0xff, 0xb7, 0x01, 0x0f, 0xbc, 0xff, 0xef, 0xf8, 0xcf, 0x3f,
   0xc8, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xb7, 0x01, 0x0f, 0xb8, 0xff,
   0xef, 0xfc, 0xef, 0x3f, 0xc8, 0xff, 0xff, 0xc0, 0x01, 0xff, 0x7f, 0xb7,
   0x01, 0x0f, 0x38, 0x8f, 0xe3, 0x3c, 0xef, 0x79, 0x08, 0xc0, 0x7f, 0xc0,
   0x81, 0xff, 0x1f, 0xb7, 0x01, 0x0f, 0x3c, 0x8f, 0xe3, 0x3c, 0xe0, 0x7f,
   0x08, 0xc0, 0x7f, 0xc0, 0x81, 0xef, 0xff, 0xb7, 0x01, 0x0f, 0x3c, 0x8f,
   0xe3, 0x1c, 0xe0, 0x7f, 0x08, 0xc0, 0x7f, 0xc0, 0x81, 0xef, 0xff, 0xb7,
   0x01, 0x1f, 0x3c, 0x8f, 0xe3, 0x3c, 0xe6, 0x7f, 0x08, 0xc0, 0x7f, 0xc0,
   0x81, 0xe7, 0xff, 0xb7, 0x01, 0x3e, 0x3e, 0x8f, 0xe3, 0x3c, 0xef, 0x79,
   0x08, 0x80, 0x7b, 0xc0, 0xc1, 0x67, 0x00, 0xb7, 0x01, 0xfe, 0x1f, 0x8f,
   0xe3, 0xfc, 0xef, 0x7f, 0x08, 0x80, 0x33, 0xc0, 0xc1, 0x67, 0x00, 0xb7,
   0x01, 0xfc, 0x0f, 0x8f, 0xe3, 0xf8, 0xcf, 0x3f, 0x08, 0x00, 0x00, 0xc0,
   0xc1, 0x67, 0x00, 0xb7, 0x01, 0xf8, 0x07, 0x8f, 0xe3, 0xf0, 0xc7, 0x1f,
   0x08, 0x00, 0x00, 0xc0, 0xe1, 0x63, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xc0, 0xe1, 0x63, 0x00, 0xb7,
   0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xc0,
   0xe1, 0x61, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x08, 0x00, 0x00, 0xc0, 0xe1, 0x61, 0x00, 0xb7, 0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xc0, 0xe1, 0x61, 0x00, 0xb7,
   0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xc0,
   0xe1, 0x60, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x03, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0,
   0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xbc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x06, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
   0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0x7f
};


U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8);


void draw(void)
{
  u8g2.drawXBMP( 0, 0, 128, 64, myBitmap);
}


void setup() 
{
  // put your setup code here, to run once:
  u8g2.begin();
  u8g2.clearBuffer();
}

void loop()
{
  // put your main code here, to run repeatedly:
  u8g2.firstPage();
  do
  {
    draw();
  }while(u8g2.nextPage());

  delay(1000);

}

کد HEX عکس را که قبلا دریافت کرده بودید را باید وارد کد کنید.

مطلب پیشنهادی:  چگونه یک کتابخانه آردوینو بنویسیم؟

کامنت یادتون نره و اگر آموزش راه اندازی LCD گرافیکی با آردوینو براتون مفید بود ما را نیز دعا کنید.

همچنین لطفا اپلیکیشن اندویدی ما را هم نصب کنید.

دانلود اپلیکیشن میکرو دیزاینر الکترونیک
اگر این نوشته‌ برایتان مفید بود ما را نیز دعا کنید و کامنت بنویسید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

4 دیدگاه

  1. خییییییلللللی مممنون اشکالم رفع شد

  2. امین ریاضی

    سلام خدا خیرتون بده که اینهمه آموزش مفید و رایگان در اختیار ما قرار میدید. واقعاً خدا قوت و دستمریزاد…یک سوال دارم… اینکه آیا میشه از داخل مدارات و بوردهای الکترونیکی مثلا رادیو تلویزیون تلفن موبایل آیفون درب بازکن دزدگیر و یا کلا هرچیزی که در دنیای الکترونیک وجود داره، بوردهای آردوینو و رزبری پای استخراج کرد؟ من با استفاده از مدارات و قطعات بوردهای الکترونیکی مختلف (که بلااستفاده شدن)چیزهای جدید و قابل استفاده میسازم. بینهایت ممنون میشم اگه راهنماییم کنید.

  3. سلام خسته نباشید میخواستم بدونم کتابخونه LCD گرافیکی st9720 برای Proteus از کجا باید دانلود کنم؟؟؟ توی اینترنت زیاد گشتم ولی چیزی پیدا نکردم