در این مقاله به آموزش راه اندازی LCD گرافیکی با آردوینو UNO می پردازیم. ماژول LCD مورد استفاده در این پروژه ST7920 است.
در این مقاله قصد داریم تا در ابتدا توضیحاتی درمورد LCD گرافیکی 128*64 بدهیم. سپس، مراحل راهاندازی آن را با برد آردوینو آموزش میدهیم و تصاویر بیتمپ را نمایش میدهیم. و در آخر هم بعد از این که سختافزارهای لازم را بهم وصل کردیم، یک عکس بیتمپ را روی ماژول نمایش میدهیم.
تفاوت ال سی دی گرافیکی 128×64 با ال سی دی کاراکتری 16×2
در نگاه اول، بنظر میرسد ال سی دی های 128*64 شبیه ال سی دی های ۱۶*۲ باشند. ساختار و پینهای هر دوی این نمایشگرها شبیه به هم هستند ولی یک تفاوت بزرگ میان این دو دسته وجود دارد.
نمایشگر ال سی دی های 16×2، از دسته ی نمایشگرهای کاراکتری می باشند و فقط میتوانند الفبا و اعداد و بعضی از کاراکترهای خاص را نمایش دهند. مقاله آموزش LCD کاراکتری 2 *16 برای مبتدیان (قسمت1) را برای آشنایی بیشتر با LCDهای کاراکتری ببینید.
اما نمایشگر ال سی دی های 128×64، از دسته ی نمایشگرهای گرافیکی می باشند و علاوه بر موارد بالا، امکان نمایش تصاویر و انیمیشنهای ساده را هم دارند. در ماژول ال سی دی گرافیکی 128×64، 64 ردیف و 128 ستون وجود دارد.
همچنین خوب است که بدانید در واقع متداول ترین ابعاد ال سی دی های گرافیکی 64*128 می باشد؛ در حالی که متداول ترین ابعاد ال سی دی های کاراکتری 16*2 است.
ال سی دی کنترلر 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 را مشاهده میکنید.
آموزش راه اندازی ال سی دی گرافیکی 64*128 با آردوینو
حالا که در مورد ال سی دی گرافیکی و کنترلر ST7920 اطلاعات بیشتری کسب کردهاید، وقت آن است راه اندازی ال سی دی گرافیکی را با استفاده از آردوینو یاد بگیرید. برای این که متوجه شوید راهاندازی ال سی دی گرافیکی با استفاده از برد آردوینو ساده است یک مدار ساده را برای شما مثال میزنیم.
برای انتقال دیتا از رابط سریال استفاده میکنیم و یک عکس بیتمپ را به نمایش میگذاریم.
نمودار مدار
عکس زیر نمودار مدار برای راه اندازی LCD گرافیکی با آردوینو است.
وسایل مورد نیاز
- برد آردوینو UNO
- نمایشگرLCD گرافیکی 128×64 (برای خرید LCD گرافیکی 128×64 اورجینال از شرکت هادی بان الکترونیک کلیک کنید)
- پتانسیومتر 10 کیلو اهمی
- بردبورد
- منبع تغذیه بردبورد
- سیمهای اتصال
ما برای راه اندازی این پروژه، LCD گرافیکی 128×64 را از قطعات الکترونیکی شرکت هادی بان الکترونیک خریداری کردیم.
اتصالات سختافزاری
3 راه برای راهاندازی صفحه نمایش گرافیکی با برد آردوینو وجود دارد که به شرح زیر هستند:
- 4 بیتی
- 8 بیتی
- سریالی
در حالت سریالی فقط به سه پین برای انتقال اطلاعات نیاز داریم. این سه پین، پینهای RS، RW و E هستند.پین RS در ارتباط سریالی مانند پین Chip Select عمل میکند. پینهای RW و Eبه ترتیب مانند پینهای Serial Data IN و Serial CLK عمل میکنند.
پین RS، پین RW و پین E را به IC های دیجیتال 10 تا 13 برد آردوینو وصل کنید. برای این که رابط سریالی را انتخاب کنید، حتما پین PCB را به GND وصل کنید.
بقیه اتصالات مانند راهاندازی صفحهنمایش 16×2 است. VCC و GND به 5Vو منبع تغذیه زمین وصل میشوند. پین VO به یکی از پایههای پتانسیومتر 10 کیلو اهمی وصل میشود و دو پایه دیگر به پینهای V5 و GND وصل میشوند.
برای این که زمینه نمایشگر روشن شود، BLV را به V5 و BLK را به GND وصل کنید.
تولید کد 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 عکس را که قبلا دریافت کرده بودید را باید وارد کد کنید.
- منبع: ترجمه از سایت : electronicshub.org
کامنت یادتون نره و اگر آموزش راه اندازی LCD گرافیکی با آردوینو براتون مفید بود ما را نیز دعا کنید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
خییییییلللللی مممنون اشکالم رفع شد
سلام خدا خیرتون بده که اینهمه آموزش مفید و رایگان در اختیار ما قرار میدید. واقعاً خدا قوت و دستمریزاد…یک سوال دارم… اینکه آیا میشه از داخل مدارات و بوردهای الکترونیکی مثلا رادیو تلویزیون تلفن موبایل آیفون درب بازکن دزدگیر و یا کلا هرچیزی که در دنیای الکترونیک وجود داره، بوردهای آردوینو و رزبری پای استخراج کرد؟ من با استفاده از مدارات و قطعات بوردهای الکترونیکی مختلف (که بلااستفاده شدن)چیزهای جدید و قابل استفاده میسازم. بینهایت ممنون میشم اگه راهنماییم کنید.
سلام،نظر لطف شماست. نه متاسفانه نمیشه.
سلام خسته نباشید میخواستم بدونم کتابخونه LCD گرافیکی st9720 برای Proteus از کجا باید دانلود کنم؟؟؟ توی اینترنت زیاد گشتم ولی چیزی پیدا نکردم
سلام خدا خیرتان بده.
ببخشید زمانی که من میخواهم کد را از برنامه ی آردوینو به خود آردوینو منتقل کنم ارور میده :Serial port not selected
باید چکار کنم؟؟
سلام خسته نباشید مهندس جان ممنون از آموزش خوبتون.خواستم بگم که با stm32 f103که بلو پیل با استفاده از محیط اردینو ide ترتیب پایه ها به شکل هست امکان راهنمایی هست مهندس عزیز
سلام چطور صفحه نمایش را ۱۸۰ درجه بچرخانیم؟