جلسه ششم: اتصال و راه اندازی LCD کاراکتری با آردوینو

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

ال سی دی های کاراکتری بسته به مدل آن ها دارای محدودیت در تعداد نمایش حروف یا اعداد هستند. به عنوان مثال یک نمایشگر کاراکتری 2*16 می تواند 32 حرف یا عدد را در دو خط نمایش دهد. پس زمانیکه می گوییم LCD داریم که 2*16 است یعنی این ال سی دی دارای 2 خط است که در هر خط می تواند 16 کاراکتر نمایش دهد. با مشاهده تصویر زیر می توانید این موضوع را راحتر درک نمائید.

همانطور که ذکر شد ال سی دی های کارکتری در انواع مختلفی هستند که از نظر تعداد کارکترهای سطر و ستون تقسیم بندی می شوند. در جدول زیر انواع مختلف این نوع LCD نمایش داده شده است.

قطعات مورد نیاز

:: برد آردوینو Arduino Uno

:: LCD کاراکتری 2*16

:: یک عدد پتانسیومتر خوابیده 10 کیلو اهم

:: یک عدد مقاومت با مقدار 220 اهم

:: سیم جامپر برد بوردی

:: برد بورد

معرفی پایه های LCD کاراکتری

یک LCD کاراکتری دارای 16 عدد پایه است. که ترتیب پایه ها و نام هر یک از آن ها در شکل زیر آمده است. همچنین در ادامه می توانید با کاربرد هر پایه از LCD کاراکتری آشنا شوید.

پایه شماره 1 (VSS) : این پایه مربوط به تغذیه ال سی دی کاراکتری می باشد و باید به منفی منبع تغذیه یا پایه GND برد آردوینو Arduino متصل شود.

پایه شماره 2 (VDD) : این پایه مربوط به تغذیه ال سی دی کاراکتری می باشد و باید به مثبت منبع تغذیه یا پایه 5V برد آردوینو Arduino متصل شود.

پایه شماره 3 (VE) : این پایه مربوط به تنظیم کنتراست نمایشگر می باشد. نحوه تنظیم کنتراست به این صورت می باشد که هرچقدر ولتاژ اعمالی به این پایه به مثبت 5 ولت نزدیک باشد متن ها بر روی نمایشگر به صورت کم رنگ تر نمایش داده می شوند و بلعکس هر گاه ولتاژ اعمالی به این پایه به صفر ولت یا همان GND نزدیکتر باشد متن ها به صورت پر رنگ تر نمایش داده می شوند. در پروژه ها و مدارات برای تنظیم ولتاژ اعمالی بر روی این پایه از LCD در بازه 0 الی 5 ولت معمولا از یک پتانسیومتر یا یک مولتی ترن 10 کیلو اهمی استفاده می شود.

پایه شماره 4 (RS) : این پایه مربوط به رجیسترها و آدرس دهی برای خواندن و یا نوشتن بر روی چیپ های درایور ال سی دی می باشد.

پایه شماره 5 (RW) : توسط این پایه می توانید برای نمایشگر مشخص کنید که آیا قصد نوشتن بر روی آنرا دارید و یا خواندن داده ها از آن، زمانیکه این پایه صفر می شود LCD آماده دریافت اطلاعات می شود و بلعکس زمانیکه این پایه یک شود شما می توانید داده ها را از روی ال سی دی بخوانید.

پایه شماره 6 (E) : در برخی مواقع لازم است LCD فعال و یا غیر فعال شود که این پایه دقیقا این وظیفه را به عهده دارد. به طوریکه می توانید با صفر و یک کردن این پایه نمایشگر را فعال و یا غیر فعال نمائید.

پایه های شماره 7 الی 14 (D0 الی D7) : توسط این 8 پایه می توانیم داده های مورد نظر خود را که می خواهیم بر روی ال سی دی نمایش داده شوند، به صورت 4 بیتی و یا 8 بیتی، برای LCD کاراکتری ارسال کنیم.

پایه شماره 15 (Backlight VCC) : این پایه مربوط به پلاریته مثبت لامپ LED نور پس زمینه LCD کاراکتری می باشد که باید توسط یک مقاومت 220 اهمی به مثبت 5 ولت یا پایه 5V برد آردوینو متصل شود.

پایه شماره 16 (Backlight GND) : این پایه مربوط به پلاریته منفی لامپ LED نور پس زمینه LCD کاراکتری می باشد که باید به منفی منبع تغذیه یا پایه GND برد آردوینو متصل شود.

نحوه اتصال LCD کاراکتری به برد آردوینو به صورت 4 بیتی

در این شیوه علاوه بر پایه های RS و RW و E تنها تعداد 4 پایه از 8 پایه D0 الی D7 به برد آردوینو متصل می شوند. مزیت این شیوه کاهش تعداد پایه های اشغال شده بر روی برد آردوینو توسط LCD کاراکتری می باشد، که به همین دلیل نیز در اکثر پروژه هایی که نیاز به استفاده از LCD کاراکتری است از این روش برای راه اندازی آن استفاده می شود. در تصویر زیر نحوه اتصال LCD کاراکتری به برد آردوینو Arduino به صورت 4 بیتی، آمده است.

نحوه اتصال LCD کاراکتری به برد آردوینو به صورت 8 بیتی

در این شیوه علاوه بر پایه های RS و RW و E برخلاف مد 4 بیتی هر 8 پایه D0 الی D7 به برد آردوینو متصل می شوند. مزیت این شیوه افزایش سرعت نمایش اطلاعات بر روی ال سی دی کاراکتری است، اما به دلیل اینکه در این روش تعداد پایه های اشغال شده بر روی برد آردوینو توسط LCD کاراکتری بیشتر از روش 4 بیتی می باشد، به ندرت در پروژه ها از این شیوه برای راه اندازی LCD کاراکتری استفاده می شود. در تصویر زیر نحوه اتصال LCD کاراکتری به برد آردوینو به صورت 8 بیتی، آمده است.

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

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

 

 

نحوه تعریف پایه های LCD کاراکتری در مد 4 بیتی

بعد از اینکه مطابق نقشه بالا LCD کاراکتری را به شیوه 4 بیتی به برد آردوینو متصل کردید باید در برنامه خود به آردوینو بگوئید که کدام پایه ال سی دی را به کدام پایه آردوینو متصل کرده اید، برای این منظور از کد دستوری زیر استفاده می کنیم.

LiquidCrystal lcd(Rs, R/W, EN, D4, D5, D6, D7);

 

توجه : برای استفاده از کد دستوری بالا در برنامه خود کافی است به جای نام هر پایه LCD شماره پایه ای که آن پایه به برد آردوینو متصل شده است را وارد کنید.

نحوه تعریف پایه های LCD کاراکتری در مد 8 بیتی

برای تعریف LCD کاراکتری به شیوه 8 بیتی در برنامه آردوینو خود می توانید، از قطعه کد دستوری زیر استفاده کنید.

LiquidCrystal lcd(Rs, R/W, EN, D0, D1, D2, D3 , D4 , D5 , D6, D7);

 

توجه : برای استفاده از کد دستوری بالا در برنامه خود کافی است به جای نام هر پایه LCD شماره پایه ای که آن پایه به برد آردوینو متصل شده است را وارد کنید.

تعریف مدل LCD کاراکتری در برنامه آردوینو

برای شروع کار با LCD کاراکتری نیاز است در زیر برنامه setup() مدل ال سی دی کاراکتری مورد استفاده در پروژه خود را، از نظر تعداد کارکترهای سطر و ستون مشخص کنید. برای این منظور می توانید از قطعه کد زیر استفاده کنید. توجه داشته باشید برای استفاده از دستور زیر در برنامه آردوینو باید به جای cols تعداد ستون ها و به جای rows تعداد سطرهای ال سی دی کاراکتری مورد استفاده در پروژه خود را وارد نمائید.

 

lcd.begin(cols, rows);

کد دستوری پاک کردن صفحه نمایش

lcd.clear();

 

کد دستوری انتقال مکان نما به ابتدای صفحه نمایش

دستور زیر مکان نمای صفحه نمایش را به خانه اول از سطر و ستون LCD هدایت می کند.

lcd.home();

کد دستوری انتقال مکان نما به محل دلخواه

با استفاده از کد دستوری زیر می توانید مکان نما را بر روی محل دلخواه از نمایشگر تنظیم کنید. لطفا توجه داشته باشید برای استفاده از دستور زیر در برنامه آردوینو باید به جای Col شماره خانه ستون مورد نظر و به جای row شماره خانه سطر مورد نظر بر روی نمایشگر که می خواهید مکان نما به آن نقطه منتقل شود را وارد نمائید.

lcd.setCursor(col, row);

 

کد دستوری نمایش متن و اعداد مورد نظر بر روی LCD کاراکتری

توسط دستور زیر می توانید یک رشته و یا یک متغیر را برای نمایش در LCD کاراکتری ارسال کنید. برای استفاده از دستور زیر در برنامه آردوینو می توانید به جای text رشته و یا عدد مورد نظر خود جهت نمایش بر روی LCD کاراکتری وارد کنید.

 

lcd.print(text);

کد دستوری نمایش یک کاراکتر بر روی LCD

توسط دستور زیر می توانید تنها یک کاراکتر برای نمایش در LCD کاراکتری ارسال کنید، توجه داشته باشید ویژگی این دستور نسبت به دستور قبلی این است که علاوه بر نمایش یک کاراکتر بر روی نمایشگر، شما می توانید تعداد بایتی که بر روی ال سی دی کاراکتری نمایش داده می شود را نیز برگردانید. همچنین برای استفاده از دستور زیر در برنامه آردوینو می توانید به جای W کاراکتر مورد نظر خود جهت نمایش بر روی LCD کاراکتری وارد کنید.

lcd.write('W');

 

کد دستوری نمایش متن و اعداد مورد نظر بر روی LCD با فرمت DEC

 

lcd.print(text , DEC);

کد دستوری نمایش متن و اعداد مورد نظر بر روی LCD با فرمت OCT

 

lcd.print(text , OCT);

کد دستوری نمایش متن و اعداد مورد نظر بر روی LCD با فرمت HEX

 

lcd.print(text , HEX);

کد دستوری فعال کردن نمایش مکان نما بر روی ال سی دی

با استفاده از دستور زیر مکان نما به شکل ( _ ) بر روی نمایشگر نشان داده خواهد شد.

lcd.cursor();

 

کد دستوری غیر فعال کردن نمایش مکان نما بر روی ال سی دی

lcd.noCursor();

 

کد دستوری نمایش مکان نما به صورت چشمک زن بر روی LCD

lcd.blink();

LCD کد دستوری نمایش مکان نما به صورت ثابت بر روی

 

lcd.noBlink();

کد دستوری خاموش کردن نمایشگ

lcd.noDisplay();

کد دستوری روشن کردن نمایشگر

lcd.display();

کد دستوری انتقال متن یک خانه به سمت راست

lcd.scrollDisplayRight();

کد دستوری انتقال متن یک خانه به سمت چپ

lcd.scrollDisplayLeft();

کد دستوری راست چین کردن متن بر روی ال سی دی

lcd.leftToRight();

کد دستوری چپ چین کردن متن بر روی ال سی دی

lcd.rightToLeft();

کد دستوری تاریف کاراکتر جدید

  byte A[8]={
    B00000,
    B00000,
    B00000,
    B00000,
    B00000,
    B00000,
    B00000,
    B00000};

A همان متغیری است کهبعد از معرفی می تواند چاپ شود

در پرانتزهر عددی 1 باشد روشن و 0 باشد خاموش است

کد دستوری معرفی کاراکتر جدید

  lcd.createChar(0, A);
در اینجا متغییر A با نام 0 معرفی شده(حتما باید با یک عدد معرفی شود)

کد دستوری نمایش کاراکتر جدید

lcd.write(byte(0));

در اینجا 0 همان A است کهدر کد دستوری قبل معرفی شده

  نمونه برنامه راه اندازی LCD  کاراکتری با آردوینو

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 10, 4, 5, 6, 7);
String mesal = "IRAN elec";
long int adad = 0123456789;
void setup() {
  lcd.begin(16, 2);
  byte A[8]={
    B00000,
    B10000,
    B10111,
    B10100,
    B11111,
    B10000,
    B11111,
    B00000};
  lcd.createChar(0, A);
  lcd.print("BENAM KHODA");
  delay(5000);
}
void loop() {
  lcd.clear();
  //***********iran elec***********************
  lcd.home();
  lcd.print("iran elec");
  lcd.setCursor(0, 1);
  lcd.print(">Arduino-LCD<");
  delay(2000);
  //***********iran elec***********************
  lcd.clear();
  lcd.home();
  lcd.write('W');
  lcd.setCursor(0, 1);
  lcd.write(byte(0));
  delay(2000);
  //***********iran elec***********************
  lcd.clear();
  lcd.home();
  lcd.print(mesal);
  lcd.setCursor(0, 1);
  lcd.print(adad);
  delay(2000);
  //***********iran elec***********************
  lcd.cursor();
  lcd.blink();
  //***********iran elec***********************
  lcd.clear();
  lcd.home();
  lcd.print("Arduino");
  lcd.scrollDisplayRight();
  delay(400);
  lcd.scrollDisplayRight();
  delay(400);
  lcd.scrollDisplayRight();
  delay(2000);
  //*******************************************
  lcd.noCursor();
  lcd.noBlink();
  //*******************************************
  lcd.scrollDisplayLeft();
  delay(400);
  lcd.scrollDisplayLeft();
  delay(400);
  lcd.scrollDisplayLeft();
  delay(2000);
  //***********iran elec***********************
  lcd.noDisplay();
  delay(2000);
  //***********iran elec***********************
  lcd.display();
  lcd.clear();
  lcd.home();
  lcd.print("SALAM!!!");
  delay(2000);
  //***********iran elec***********************
}