اگر به کمک بیشتری نیاز داشتید، حتما با ما در تماس باشید تا بتوانیم شما را راهنمایی کنیم و مشکلات احتمالی شما را رفع کنیم.
LCDهای کاراکتری همانطور که از نام آن پیدا است، تنها برای نمايش پيام متنی و يا كاراكتر طراحی شده اند. اين LCD دارای يک LED برای نور پس زمينه است كه میتواند 32 كاراكتر اسكی را در دو رديف 16 تايی نمايش دهد.

LCDهای کاراکتری همانطور که از نام آن پیدا است، تنها برای نمايش پيام متنی و يا كاراكتر طراحی شده اند. اين LCD دارای يک LED برای نور پس زمينه است كه میتواند 32 كاراكتر اسكی را در دو رديف 16 تايی نمايش دهد.![]()
اگر با دقت به تصویر بالا نگاه كنيد، میتوانید بلوکهای مستطيلی شكل مربوط به هر كاراكتر و پيكسلهای آن را مشاهده كنيد. هر يک از اين مستطيلها بهصورت شبكه ای از 5×8 پيكسل است.
با وجود اینکه اين صفحات نمايش تنها میتوانند متن را نشان دهند، اما در ابعاد و رنگهای مختلفی وجود دارند، مانند صفحات نمايش 1×16، 4×16و 4×20 با متن سفيد در زمينه آبی يا متن سياه در زمينه سبز.
اما شاید نکته مثبت و البته جالب برای شما، امکان جابهجایی این LCDها با یکدیگر باشد. یعنی اگر شما از یک LCD با ابعاد خاصی در پروژه آردوینو خود استفاده کردید، به سادگی میتوانید سوکت آن را دربیاورید و سوکت LCD جدید خود را در هر رنگ و اندازهای که میخواهید، جایگزین LCD قبلی کنید. تنها ممکن است لازم باشد، کد آردوینو را کمی اصلاح کنید. اما حداقل دیگر نیازی به تغییر سیم کشی LCD جدید نیست!
پیش از اینکه راه اندازی LCD كاراكتری 2×16 با آردوینو را آغاز کنیم، بیایید نگاهی به پينهای ماژول آن بیندازیم:

پين GND به زمين آردوينو متصل میشود.
پين VCC تغذيه الكتريكی LCD است و به پين 5 ولت آردوينو متصل میشود.
پين Vo جهت كنترل كنتراست (Contrast) و نور LCD مورد استفاده قرار میگيرد. با استفاده از يک تقسيم كننده ولتاژ و يک پتانسيومتر میتوانید كنتراست را بهسادگی تنظيم کنید.
پين RS به آردوينو اجازه میدهد كه به LCD اطلاع دهد كه آيا در حال ارسال ديتا يا ارسال فرمان است. اين پين اصولا برای ايجاد تمايز بين فرمان و ديتا مورد استفاده قرار میگیرد. به عنوان مثال هنگامیكه مقدار پين RS بهصورت LOW باشد، در واقع شما در حال ارسال فرمانی از آردوینو به LCD هستید (فرمانهايی مانند دستور تنظيم مكان نما در يک مكان خاص، دستور پاک كردن صفحه نمايش، دستور رفتن به سمت راست صفحه نمايش و يا …. ). اما زمانیكه پين RS بهصورت High باشد، شما در حال ارسال ديتا يا كاراكتر از آردوینو بر روی LCD هستید.
پين R/W بر روی LCD به شما نشان میدهد که آیا در حال نوشتن ديتا بر روی LCD هستید يا در حال خواندن ديتا از آن هستید. با توجه به اینکه در این پروژه از این LCD تنها به عنوان خروجی استفاده میکنیم، باید مقدار این پین را LOW تنظیم کنید. زمانیکه این پین LOW باشد، LCD در مد نوشتن قرار میگیرد و شما میتوانید به LCD، دیتا ارسال کنید.
پين E جهت فعالسازی LCD استفاده میشود. یعنی زمانیكه اين پين LOW باشد، در حقيقت LCD اهميتی به مقادير پينهای R/W، RS و خطوط باس ديتا نمیدهد. اما با High شدن این پين، LCD اطلاعات دريافتی را پردازش خواهد کرد.
پينهای D0-D7 (باس ديتا) برای انتقال ديتای 8 بيتی مورد استفاده قرار میگیرند که شما برای LCD ارسال میکنید. به عنوان مثال اگر بخواهيد كاراكتر A را بر روی LCD مشاهده کنید، باید این هشت پین را با کد 0100 0001 (براساس جدول اسکی) تنظیم کنید. به این شکل LCD کاراکتر A را نمایش خواهد داد.
پينهای A-K (آند و كاتد) برای كنترل نور پس زمينه LCD مورد استفاده قرار میگیرند.
در اینجا به قسمت هیجان انگیز پروژه میرسیم، زیرا شما باید LCD خود را تست کنید، اما اگر هنوز قطعات این پروژه را تهیه نکردهاید، میتوانید از طریق لینکهای زیر اقدام به خرید کنید:
اما برای تست کردن LCD، مراحل زیر را طی کنید:
نکته:
برای محاسبه مقدار اين مقاومت الكتريكی بايد به حداكثر جريان نور پس زمينه و افت ولتاژ معمول آن كه در ديتاشيت LCD مشخص شده است، دقت كنيد. پس از آن به سادگی میتوانید با استفاده از قانون اهم مقدار مقاومت را محاسبه کنید. اگر به ديتا شيت دسترسی نداريد، به جهت رعايت اصول ايمنی از يک مقاومت 220 اهمی استفاده كنيد. با این حال اگر برای LCD خاص شما اين مقدار مقاومت زياد باشد، ممكن است تاحدودی باعث ضعيف شدن نور پس زمينه شود.
همان طور که مشاهده میکنید، با چرخاندن پتاسیومتر، می توانید کنتراست LCD را تنظیم کنید.
این تمام چیزی بود که برای تست کردن LCD باید انجام میدادید!
اکنون آردوینو را روشن کنید. با روشن کردن آردوینو، باید بتوانید نور پس زمینه LCD و با چرخاندن پتاسیومتر، باید بتوانید خط اول بلوکهای مستطیلی را که بر روی صفحه نمایش ظاهر میشوند، مشاهده کنید. اگر چنین چیزی را مشاهده کردید، به شما تبریک میگوییم! LCD شما به خوبی در حال کار کردن است.
پس از تست ال سی دی، زمان راه اندازی LCD كاراكتری 2×16 با آردوینو است.
LCD دارای پينهای زيادی است (مجموعا 16 پين) كه در ادامه نحوه اتصال هر كدام از آنها را برای شما توضيح میدهیم. البته برای راه اندازی و استفاده از LCD با آردوينو نيازی به اتصال همه اين پينها نیست.
همان طور که میدانید 8 خط ديتا برای انتقال ديتای خام به صفحه نمايش وجود دارد. اما LCDهای HD44780 بهگونهای طراحی شدهاند كه بهجای 8 پين، تنها با استفاده از 4 پين میتوان انتقال ديتا را انجام داد (مد 4 بيتی). به این شکل، 4 پین دیگر برای شما باقی میماند!
تفاوت بين مد 4 بيتی با مد 8 بيتی
انتقال ديتا در مد 8 بيتی سريعتر از مد 4 بيتی است. چرا كه در مد 8 بيتی كل ديتا را يكباره برای LCD میتوان ارسال کرد. در حالیكه در مد 4 بيتی، يک بايت ديتا به دو بخش تقسيم بندی میشود. يک بخش به راست شيفت داده میشود و عمل نوشتن ديتا بر روی LCD دوبار انجام خواهد شد.
از مد 4 بيتی در مواقعی كه نياز به صرفهجويی در استفاده از تعداد پينهای ورودی/خروجی داشته باشيم، میتوان استفاده کرد. در كاربردهايی كه سرعت نوشتن ديتا بر روی LCD اهميت دارد و حداقل 10 عدد پين ورودی/خروجی در دسترس است، استفاده از مد 8 بيتی بهتر است. در ادامه، از مد 4 بيتی استفاده میکنیم.
بنابراين، برای نوشتن پيام بر روی LCD فقط به 6 پين نياز خواهيد داشت: پين RS، EN، D4، D5، D6 و D7.
اکنون زمان اتصال LCD به آردوینو است. چهار پين ديتای LCD يعنی پينهای D4 تا D7 را به پينهای ديجيتال شماره 4 تا 7 آردوينو متصل کنید. سپس، پين فعالسازی LCD را به پين شماره 2 آردوينو و پين RS را به پين شماره 1 آردوينو وصل کنید. در تصویر زير میتوانید نحوه سيم كشی را مشاهده کنید:
پس از اتمام سیمکشی و اتصال پینها به آردوینو ، همه چیز آماده است تا شما برای نمایش دیتا بر روی LCD، کد بنویسید.
بخشی از فرایند راه اندازی LCD كاراكتری 2×16 با آردوینو ، مربوط به کد نویسی است که در اینجا به آن میپردازیم.
كد زير پيام ‘Hello World!’ را بر روی صفحه نمايش LCD نشان خواهد داد. جزئيات اين كد را در ادامه بیشتر توضیح خواهیم داد.
// include the library code:
#include <LiquidCrystal.h>
// Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Clears the LCD screen
lcd.clear();
}
void loop()
{
// Print a message to the LCD.
lcd.print(" Hello world!");
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// Print a message to the LCD.
lcd.print(" LCD Tutorial");
}
اگر همه چيز بهدرستی انجام گرفته باشد، خروجی که شما مشاهده میکنید، باید به شکل زیر باشد:

این كد، با فراخوانی كتابخانه LiquidCrystal آغاز میشود. همانطور كه قبلا گفتیم، آردوینو دارای کتابخانهای با نام LiquidCrystal است که راه اندازی و برنامه ريزی ماژول LCD را بهمراتب سادهتر میکند.
// include the library code:
#include <LiquidCrystal.h>
در قدم بعدی، شما باید شی LiquidCrystal را ايجاد کنید. اين شی از 6 پارامتر استفاده میكند و مشخص میکند که كدام يک از پينهای آردوينو به هر يک از پينهای RS، E و چهار پين ديتا D4 تا D7 متصل شدهاند.
// Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
اكنون كه شی LiquidCrystal را تعریف کردید، میتوانید به توابعی (توابع aka) كه مخصوص LCD هستند، دسترسی داشته باشید.
در بخش Setup، از دو تابع استفاده خواهیم کرد:
lcd.begin(16, 2);
lcd.clear();
در بخش loop، از تابع ()print برای نمايش پيام بر روی خط اول صفحه نمايش استفاده کنید.
// Print a message to the LCD.
lcd.print(" Hello world!");
در ادامه، به كمک تابع ()setCursor مكان نما را بر روی خط دوم تنظيم کنید. موقعيت مكان نما بر روی صفحه LCD، توسط اين تابع مشخص خواهد شد. به علاوه، مختصات گوشه بالا سمت چپ 0 و 0 خواهد بود.
lcd.setCursor(0, 1);
lcd.print(" LCD Tutorial");
توابع مفیدی وجود دارد كه شما میتوانيد با شی LiquidCrystal از آنها استفاده كنيد. برخی از اين توابع عبارتند از:
اگر کاراکترهایی که بر روی LCD نمایش داده میشوند، برای شما جذابیت ندارد، میتوانيد كاراكتر دلخواه خود را ایجاد کنید. اين قابليت زمانی که کاراکتر مورد نظر شما در جدول استاندارد کاراکترهای اسکی وجود ندارد، بسیار مفید است.
CGROM و CGRAM:
همه LCDهايی كه بر مبنای چيپ كنترلر هيتاچی HD44780 هستند، دارای دو نوع حافظه برای ذخيره كاراكترهای تعريف شده هستند. اين حافظهها عبارتند از CGRAM (Character Generator RAM) و CGRAM .(Character Generator ROM) CGROM يک حافظه غير فرار است كه محتويات آن قابل ويرايش نيست. در مقابل، محتويات حافظه CGRAM را هر موقع كه بخواهيد میتوانید ويرايش کنید.
حافظه CGROM برای ذخيره سازی همه فونتهای دائمی كه با استفاده از كدهای اسكی مربوطه قابل نمايش هستند، بهكار گرفته میشود. به عنوان نمونه اگر كد 0x41 نوشته شود، كاراكتر A نمايش داده خواهد شد. حافظه ديگر يعنی CGRAM برای ذخيره كاراكترهای تعريف شده كاربران استفاده میشود. اين حافظه دارای محدوديت ظرفيت 64 بايت است. بنابراين برای يک LCD كه دارای خانههای پيكسلی 5×8 است، حداكثر 8 كاراكتر دلخواه را میتوان در حافظه GCRAM ذخيره نمود. در حالیكه در مورد LCD با خانههای پيكسلی 5×10 تنها میتوان 4 كاراكتر دلخواه را ذخيره کرد.
همانطور كه در قسمتهای قبلی اين آموزش گفتیم، تصوير هر كاراكتر بر روی LCD با استفاده از يک ماتريس 5×8 از پيكسلها نمايش داده خواهد شد. بنابراين كاراكترهای دلخواه شما نيز بايد بهصورت ماتريسی تعريف شوند. برای تعريف يک كاراكتر، از تابع ()createChar که از كتابخانه LiquidCrystal است، استفاده کنید.
برای استفاده از اين تابع، ابتدا يک آرايه 8 بايتی ايجاد کنید. هر بايت (كه البته فقط 5 بيت آن استفاده میشود) متناسب با يک رديف ماتريس 5×8 خواهد بود. درحالیکه 0 و 1 هر بايت نشان دهنده پيكسلهای روشن و خاموش هر رديف در بلوک 5×8 صفحه نمايش LCD است.
تا پیش از این، ايجاد كاراكترهای دلخواه كار سادهای نبوده است. اما برای اين كار يک اپليكيشن كوچک به نام Custom character generator for character LCD ساخته شده است. این اپلیکیشن را میتوانید در جدول زیر مشاهده کنید. با كليک بر روی هر يک از پيكسلهای جدول میتوانید آنها را روشن یا خاموش کنید. با این کار، كد كاراكتر متناسب با آن ايجاد خواهد شد. اين كد را میتوانید مستقيما در آردوينو مورد استفاده قرار دهید.

ذهن ما هیچوقت در تصور كاراكترهای مختلف محدوديت نخواهد داشت! اما متاسفانه كتابخانه LiquidCrystal تنها از 8 كاراكتر دلخواه پشتيبانی میكند. اما به هر حال نباید ناامید شوید. زیرا حداقل میتوانید 8 كاراكتر بهدلخواه خود تعریف کنید.
با کد زیر میتوانيد كاراكترهای قلب، زنگوله، آدم فضایی، علامت تیک، اسپیکر، صوت (نوت چنگ)، جمجمه و قفل را در LCD نشان دهید.
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// make some custom characters:
byte Heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};
byte Bell[8] = {
0b00100,
0b01110,
0b01110,
0b01110,
0b11111,
0b00000,
0b00100,
0b00000
};
byte Alien[8] = {
0b11111,
0b10101,
0b11111,
0b11111,
0b01110,
0b01010,
0b11011,
0b00000
};
byte Check[8] = {
0b00000,
0b00001,
0b00011,
0b10110,
0b11100,
0b01000,
0b00000,
0b00000
};
byte Speaker[8] = {
0b00001,
0b00011,
0b01111,
0b01111,
0b01111,
0b00011,
0b00001,
0b00000
};
byte Sound[8] = {
0b00001,
0b00011,
0b00101,
0b01001,
0b01001,
0b01011,
0b11011,
0b11000
};
byte Skull[8] = {
0b00000,
0b01110,
0b10101,
0b11011,
0b01110,
0b01110,
0b00000,
0b00000
};
byte Lock[8] = {
0b01110,
0b10001,
0b10001,
0b11111,
0b11011,
0b11011,
0b11111,
0b00000
};
void setup()
{
// initialize LCD and set up the number of columns and rows:
lcd.begin(16, 2);
// create a new character
lcd.createChar(0, Heart);
// create a new character
lcd.createChar(1, Bell);
// create a new character
lcd.createChar(2, Alien);
// create a new character
lcd.createChar(3, Check);
// create a new character
lcd.createChar(4, Speaker);
// create a new character
lcd.createChar(5, Sound);
// create a new character
lcd.createChar(6, Skull);
// create a new character
lcd.createChar(7, Lock);
// Clears the LCD screen
lcd.clear();
// Print a message to the lcd.
lcd.print("Custom Character");
}
// Print All the custom characters
void loop()
{
lcd.setCursor(0, 1);
lcd.write(byte(0));
lcd.setCursor(2, 1);
lcd.write(byte(1));
lcd.setCursor(4, 1);
lcd.write(byte(2));
lcd.setCursor(6, 1);
lcd.write(byte(3));
lcd.setCursor(8, 1);
lcd.write(byte(4));
lcd.setCursor(10, 1);
lcd.write(byte(5));
lcd.setCursor(12, 1);
lcd.write(byte(6));
lcd.setCursor(14, 1);
lcd.write(byte(7));
}
بعد از فراخوانی كتابخانه، بايد آرايه 8 بايتی كاراكتر دلخواه را مقدار دهی اولیه کنید.
byte Heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};
در بخش setup، با استفاده از تابع ()createChar كاراكترهای دلخواه خود را ایجاد کنید. اين تابع به دو پارامتر نياز دارد. پارامتر اول عددی بين 0 تا 7 است كه برای رزرو يكی از 8 كاراكتر تعريف شده استفاده میشود و پارامتر دوم نام آرايه بايتها خواهد بود.
// create a new character
lcd.createChar(0, Heart);
در بخش loop كد، برای نمايش كاراكتر مورد نظر باید از تابع ()write استفاده کنید. پارامتر مورد نياز اين تابع نیز همان شماره كاراكتر مورد نظر شما خواهد بود.
// byte(0) represents Heart character.
lcd.write(byte(0));

هدف ما در این مقاله این بود که راه اندازی LCD كاراكتری 2×16 با آردوینو را به سادهترین شکل ممکن به شما آموزش دهیم. مقاله را به دقت مطالعه کنید و حتما راه اندازی این ماژول را آغاز کنید. مرحله به مرحله با مقاله پیش بروید تا دچار مشکل نشوید.
اگر به کمک بیشتری نیاز داشتید، حتما با ما در تماس باشید تا بتوانیم شما را راهنمایی کنیم و مشکلات احتمالی شما را رفع کنیم.