آموزش راه‌ اندازی ال سی دی نوکیا 5110 با آردوینو

راه‌ اندازی نمایشگر Nokia 5110

در این آموزش جذاب با راه‌ اندازی ال سی دی نوکیا 5110 با ما همراه باشید. پیش از معرفی اولین گوشی آیفون، حتما خاطرتان هست که فقط برای تمیز کردن صفحه نمایش موبایل‌ها آن‌ها را لمس می‌کردیم! زمانی که گوشی‌های Nokia 3310 و Nokia 5110 از نمایشگرهای LCD سیاه و سفید کوچکی استفاده می‌کردند. با پیشرفت تکنولوژی، این نمایشگر ها جایگاه ویژه‌ای در پروژه‌های دست‌ساز پیدا کرده‌اند و به خاطر داشتن اندازه‌ی کوچک (حدود 1.5 اینچ)، قیمت ارزان، راه‌ اندازی آسان، توان مصرفی نسبتاً پایین و قابلیت نمایش متن و تصاویر بیت‌ مپ BitMap، محبوبیت بالایی در میان علاقمندان الکترونیک دارند.

مشخصات سخت افزاری ماژول LCD نوکیا 5110

برای راه‌ اندازی ماژول ال سی دی نوکیا 5110 نیاز به یک شناخت کلی درمورد تجهیزات و سخت‌افزار به‌کاربرده شده روی این برد است که ما در ادامه به مهمترین ‌آن‌ها اشاره می‌کنیم :

1. درایور LCD PCD8544

درست در قلب ماژول LCD Nokia 5110 یک چیپ درایور ال سی دی CMOS قدرتمند و کم مصرف، ساخت شرکت Philips به نام PCD8544 قرار گرفته است. این آی‌سی از یک رابط سریال شبیه SPI برای ارتباط با میکروکنترلرها استفاده می‌کند و به گونه‌ای طراحی شده تا نمایشگرهای گرافیکی 84×84 پیکسل را راه‌ اندازی کند. میکروکنترلر PCD8544 تغذیه انرژی نمایشگر LCD را هم فراهم می‌کند و ولتاژهای لازم را ایجاد می‌کند که این یک پوئن مثبت برای کاهش توان مصرفی است و باعث می‌شود برای کاربردهای کم توان کارآمد باشد. یک نمایشگر LCD معمولاً بین 6 تا 7 میلی آمپر جریان نیاز دارد. همچنین طبق دیتاشیت، این چیپ در بازه 2.7 تا 3.3 ولت کار می‌کند و سطح منطقی ارتباطی 3 ولت دارد. پس متوجه شدیم که برای کار با یک میکروکنترلر با منطق 5 ولت مثل آردوینو UNO، نیاز به تغییر سطح منطقی خواهیم داشت.

2. تغییر نور پس زمینه LCD

خوب است بدانید که همه نمایشگرهای LCD، به نور پس زمینه (بک لایت) نیاز دارند و برای ماژول ال سی دی نوکیا 5110، پس زمینه در 4 رنگ قرمز، سبز، آبی و سفید وجود دارد.

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

3. ساختار حافظه در ماژول ال سی دی نوکیا 5110

درایور LCD های نوع PCD8544 شامل 504 بایت حافظه رم برای ذخیره تصاویر گرافیکی (GDDRAM) می‌باشند که توسط این حافظه، الگوی بیتی تصویری که می‌خواهیم نمایش دهیم را ذخیره می‌کنند. فضای این حافظه به 6 بخش (بانک) تقسیم می‌شود (0 تا 5) و هر بخش از 84 واحد یا ستون (0 تا 83) تشکیل شده و هر ستون 8 بیت داده (0 تا 7) را در خود ذخیره می‌کند. در نتیجه:

6 بانک x 84 بخش x  8 بیت دیتا = 4032 بیت = 504 بایت

تمام حافظه 504 بایتی با بانک‌ها، ستون‌ها و بیت‌های داده در شکل زیر نشان‌داده‌شده است:

ساختار بیت‌ها در نمایشگر ال سی دی نوکیا 5110

هر بیت یک پیکسل خاص در صفحه را نشان می‌دهد که با برنامه‌نویسی می‌تواند خاموش یا روشن شود.

4. مشخصات فنی

تکنولوژی نمایشگرLCD دات ماتریس
پروتکل ارتباط با میکروکنترلرSPI
اندازه صفحه نمایش1.5 اینچ
رزولوشن (وضوح)84×84 پیکسل
ولتاژ کاری2.7 تا 3.3 ولت
جریان کاریحداکثر 50 میلی آمپر
زاویه دید180°

5. معرفی پین‌ها

برای درک دقیق‌تر نحوه انجام اتصالات جهت راه‌ اندازی نمایشگر LCD گرافیکی Nokia 5110 ، در شکل زیر پین‌های این ماژول LCD نوکیا را به ترتیب مشخص و عملکرد هر پایه را برای شما در ادامه توضیح داده‌ایم:

پین‌های ماژول Nokia 5110

RST : پایه ریست نمایشگر که از نوع فعال صفر (active low) است، به این معنا که با اتصال به منطق صفر، نمایشگر ریست می‌شود. همچنین می‌توانید آن را به پایه ریست آردوینو متصل کنید تا آردوینو و نمایشگر هم‌زمان ریست شوند.

CE (Chip Enable) : این پایه برای فعال کردن یا انتخاب ماژول استفاده می‌شود و زمانی که چندین قطعه از یک باس SPI مشترک استفاده می‌کنند کاربرد دارد. این پایه هم مانند پایه RST، به صورت active low است.

D/C (Data/Command) : این پایه برای جدا کردن دستوراتی مانند تعیین محل مکان‌نما، پاک کردن صفحه نمایش و… از داده‌ها به کار می‌رود.

DIN : پایه داده برای ارتباط سریال است.

CLK : پایه کلاک سریال است.

BL (Backlight) : این پایه نور پس زمینه LCD را کنترل می‌کند. با اتصال این پایه به هر یک از پایه‌های PWM آردوینو یا با استفاده از یک پتانسیومتر، می‌توان میزان روشنایی نمایشگر را تنظیم کرد.

VCC : پایه مثبت تغذیه است که باید به 3.3 ولت متصل شود.

GND : پایه زمین است.

وسایل مورد نیاز جهت راه اندازی نمایشگر نوکیا 5110

ما برای آسان نمودن روند انجام این پروژه و دریافت بهترین نتیجه، پیشنهاد می‌کنیم تجهیزات لازم را باتوجه به مدل و مشخصات فنی مهم آن‌ها خریداری و تهیه نمایید، در لیست زیر می‌توانید تنها با کلیک بر روی لینک مربوطه با این مشخصات آشنا شوید و در صورت نیاز خرید آنلاین خود را انجام دهید:

سیم‌کشی و اتصال ماژول نمایشگر نوکیا 5110 به یک آردوینو

اتصال نمایشگر به آردوینو برای راه‌ اندازی ماژول ال سی دی نوکیا 5110 بسیار ساده است. پایه‌های کلاک سریال (CLK)، داده سریال (DIN)، دستور/داده (DC)، فعالساز چیپ (CE) و ریست نمایشگر را به ترتیب به پایه‌های دیجیتال 7 تا 3 ماژول آردوینو متصل کنید.

متأسفانه حداکثر ولتاژ ورودی ال سی دی، 3.6 ولت است بنابراین نمی‌توانیم آن را مستقیماً به آردوینوهای 5 ولت متصل کنیم و نیاز است تغییر سطح انجام دهیم. یکی از ساده‌ترین روش‌های تغییر سطح، اضافه کردن مقاومت سری در مسیر پایه‌های داده است. بنابراین در خطوط CLK، DIN، D/C و RST مقاومت‌های سری 10 کیلواهم و در خط CE یک مقاومت 1 کیلواهم قرار دهید.

در نهایت، پایه بک لایت (BL) با یک مقاومت محدود‌کننده جریان 330 اهم به ولتاژ 3.3 ولت متصل می‌شود. اگر می‌خواهید میزان روشنایی را هم کنترل کنید، می‌توانید یک پتانسیومتر اضافه کنید یا این پایه را به یکی از پایه‌های PWM آردوینو متصل کنید. شکل زیر شماتیک کلی مدار را نشان می‌دهد:

اتصال ماژول نمایشگر به آردوینو  برای راه اندازی ماژول ال سی دی نوکیا 5110

نصب کتابخانه‌ها

قبل از شروع به نصب کتابخانه‌ها لازم است از اتصال آردوینو به کامپیوتر خود اطمینان حاصل کنیم و سپس برنامه IDE آردوینورا اجرا و از منوی Tools برد موردنظر را انتخاب می‌کنیم.

کنترلر LCD PCD8544 موجود در این ماژول، درایورهای انعطاف‌پذیر اما پیچیده‌ای دارد. برای استفاده از این آی سی، لازم است در مورد آدرس دهی حافظه اطلاعات داشته باشید. اما جای هیچگونه نگرانی نیست چراکه خوشبختانه کتابخانه Adafruit PDC8544 Nokia 5110 به ما اجازه می‌دهد با نوشتن دستورات ساده، بدون نیاز به درگیری با پیچیدگی‌های درایور PCD8544، نمایشگر را به آسانی کنترل و راه‌ اندازی ال سی دی نوکیا 5110 را شروع کنیم.

  • برای نصب این کتابخانه ابتدا به مسیر Sketch > Include Library > Manage Libraries بروید و صبر کنید تا Library Manager لیست کتابخا‌نه‌های نصب شده را به‌روزرسانی کند.
نصب کتابخانه‌ها در محیط IDE آردوینو با استفاده از منوی SKETCH
  • در این مرحله جستجوی خود را با نوشتن عبارت ‘nokia’ فیلتر کنید. در اینجا شما چندین گزینه خواهید دید که باید به دنبال کتابخانه Adafruit PCD8544 Nokia 5110 LCD library بگردید. آن را انتخاب و روی دکمه Install  کلیک کنید .
جستجو و نصب کتابخانه Adafruit PCD8544 Nokia 5110 LCD library
  • پس از اتمام این مرحله نوبت به نصب دو کتابخانه دیگر است که مکمل کتابخانه Adafruit SSD1306 هستند، به این دلیل که این کتابخانه یک کتابخانه سخت‌افزاری است که توابع سطح پایین را مدیریت می‌کند و باید با کتابخانه‌های Adafruit GFX و Adafruit BusIO Library همراه شود تا اشکال پایه گرافیکی مانند نقطه، خط، دایره، مستطیل و… را نمایش دهد، بنابراین در این قسمت ابتدا کتابخانه Adafruit GFX را نصب کنید.
 نصب کتابخانه Adafruit GFX در پنجره Labrary Maneger
  • حالا نوبت به نصب کتابخانه سوم با نام Adafruit BusIO Library است. این کتابخانه را هم طبق مراحل قبل جستجو کرده و نصب کنیم.
انتخاب و نصب کتابخانه Adafruit BusIO Library در پنجره Labrary Manager

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

نمونه کد اول : نمایش متن روی صفحه نمایشگر ماژول نوکیا 5110

به بخش جذاب ماجرا رسیدیم!

این برنامه شامل موارد زیر است:

•        نمایش متن ساده

•        نمایش متن با بک لایت

•        نمایش اعداد

•        نمایش اعداد به همراه مبنای آن‌ها (هگزادسیمال، دسیمال)

•        نمایش کاراکترهای اسکی (ASCII)

•        چرخش متن

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// Declare LCD object for software SPI
// Adafruit_PCD8544(CLK,DIN,D/C,CE,RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

int rotatetext = 1;

void setup()   {
	Serial.begin(9600);

	//Initialize Display
	display.begin();

	// you can change the contrast around to adapt the display for the best viewing!
	display.setContrast(57);

	// Clear the buffer.
	display.clearDisplay();

	// Display Text
	display.setTextSize(1);
	display.setTextColor(BLACK);
	display.setCursor(0,0);
	display.println("Hello world!");
	display.display();
	delay(2000);
	display.clearDisplay();


	// Display Inverted Text
	display.setTextColor(WHITE, BLACK); // 'inverted' text
	display.setCursor(0,0);
	display.println("Hello world!");
	display.display();
	delay(2000);
	display.clearDisplay();

	// Scaling Font Size
	display.setTextColor(BLACK);
	display.setCursor(0,0);
	display.setTextSize(2);
	display.println("Hello!");
	display.display();
	delay(2000);
	display.clearDisplay();

	// Display Numbers
	display.setTextSize(1);
	display.setCursor(0,0);
	display.println(123456789);
	display.display();
	delay(2000);
	display.clearDisplay();

	// Specifying Base For Numbers
	display.setCursor(0,0);
	display.print("0x"); display.print(0xFF, HEX); 
	display.print("(HEX) = ");
	display.print(0xFF, DEC);
	display.println("(DEC)"); 
	display.display();
	delay(2000);
	display.clearDisplay();

	// Display ASCII Characters
	display.setCursor(0,0);
	display.setTextSize(2);
	display.write(3);
	display.display();
	delay(2000);
	display.clearDisplay();

	// Text Rotation
	while(1)
	{
	display.clearDisplay();
	display.setRotation(rotatetext);  // rotate 90 degrees counter clockwise, can also use values of 2 and 3 to go further.
	display.setTextSize(1);
	display.setTextColor(BLACK);
	display.setCursor(0,0);
	display.println("Text Rotation");
	display.display();
	delay(1000);
	display.clearDisplay();
	rotatetext++;
	}
}

void loop() {
}

خروجی برنامه به این شکل خواهد بود:

خروجی متحرک در صفحه ال سی دی ماژول نوکیا 5110

توضیحات کد

برنامه با اضافه‌کردن سه کتابخانه SPI.h ،Adafruit_GFX.h و Adafruit_PCD8544.h شروع می‌شود.

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
  • قدم بعدی این است که یک شئ از کتابخانه Adafruit_PCD8544.h بسازیم. سازنده (constructor) Adafruit_PCD8544 ، پنج شماره پایه از آردوینو که به ترتیب به پایه‌های CLK، DIN، D/C، CE و RST نمایشگر متصل هستند را می‌گیرد. همچنین یک متغیر به نام rotatetext تعریف شده که در ادامه از آن استفاده می‌کنیم.
// Initialize LCD object for software SPI
// Adafruit_PCD8544(CLK,DIN,D/C,CE,RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

int rotatetext = 1;
  • در تابع Setup، ابتدا با استفاده از تابع ()begin، شیء را راه‌اندازی می‌کنیم. کنتراست نمایشگر را هم با تابع setContrast(value) تنظیم می‌کنیم، value می‌‌تواند مقادیر 0 تا 100 را بگیرد اما معمولا بهترین نتیجه در محدوده 50-60 به دست می‌آید.

در ادامه، قبل از نمایش اولین پیام روی صفحه‌نمایش، حافظه بافر را خالی کرده‌ایم.

نمایش یک متن ساده (Hello World)

// Display Text
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(0,0);
display.println("Hello world!");
display.display();
delay(2000);
display.clearDisplay();
نمایش متن hello word! روی LCD ماژول نمایشگر 5110

برای نمایش متن روی ال سی دی نوکیا 5110 ابتدا باید سایز فونت را مشخص کنیم. برای این کار تابع ()setTextSize را فراخوانی می‌کنیم و یک عدد مثبت (حداقل 1) به عنوان پارامتر به آن می‌دهیم.

سپس رنگ فونت را با فراخوانی تابع ()setTextColor تنظیم می‌کنیم. پارامتر اول این تابع رنگ متن و پارامتر دوم رنگ پس زمینه را تنظیم می‌کند. برای متن سفید، پارامتر اول را WHITE و برای متن سیاه، BLACK قرار می‌دهیم.

قبل از چاپ متن، محل اشاره‌گر (cursor) را با فراخوانی تابع setCursor(X,Y) تعیین می‌کنیم. دقت داشته باشید که پیکسل‌های صفحه با ابعاد افقی (X) و عمودی (Y) خود مشخص می‌شوند و مبدا این مختصات نقطه (0,0) گوشه بالا سمت چپ صفحه است بنابراین با افزایش X، به سمت راست و با افزایش Y به سمت پایین حرکت می‌کنیم.

برای چاپ متن روی صفحه، مشابه چاپ متن در سریال مانیتور می‌توان از توابع (“ “)print یا (“ “)println استفاده کرد. تنها تفاوت این دو تابع این است که ()println پس از چاپ متن اشاره گر را به خط بعدی می‌فرستد.

آخرین گام برای نمایش متن روی LCD، استفاده از تابع ()display است. با فراخوانی این تابع محتویات بافر نمایشگر به حافظه داخلی کنترلر PCD8544 ارسال می‌شود و اطلاعات روی LCD ظاهر خواهد شد.

نمایش متن با بک لایت روی ال سی دی Nokia 5110

// Display Inverted Text
display.setTextColor(WHITE, BLACK);
display.setCursor(0,0);
display.println("Hello world!");
display.display();
delay(2000);
display.clearDisplay();
نمایش متن  hello word! روی صفحه LCD ماژول نوکیا 5110 با بک لایت

برای نمایش متن با بک لایت، از تابع setTextColor(FontColor,BackgroundColor) استفاده می‌کنیم. اگر توجه کنید در قسمت قبل فقط یک پارامتر به تابع ارسال کردیم ولی در این قسمت دو پارامتر داریم. این کار به‌خاطر مفهومی به نام function overloading قابل انجام است.

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

در این کد، setTextColor(BLACK, WHITE) متن سیاهی روی پس زمینه سفید می‌نویسد.

تغییر اندازه فونت

// Scaling Font Size
display.setTextColor(BLACK);
display.setCursor(0,0);
display.setTextSize(2);
display.println("Hello!");
display.display();
delay(2000);
display.clearDisplay();
تغییر اندازه فونت و بزرگنمایی متن hello در نمایشگر نوکیا مدل 5110

در بخش‌های قبلی این آموزش، تابع setTextSize(font-size) را فراخوانی کردیم و عدد 1 را به‌ عنوان پارامتر آن ارسال کردیم. برای تغییر اندازه فونت کافی است اعداد صحیح دیگری به این تابع بدهیم.

در این نمایشگر کاراکترها با نسبت 5:7 پردازش می‌شوند. به این معنا که با فونت 1 برای هر کاراکتر 5×7 پیکسل اختصاص می‌یابد و در با فونت 2 برای هر کاراکتر 10×14 پیکسل و الی آخر.

نمایش اعداد

// Display Numbers
display.setTextSize(1);
display.setCursor(0,0);
display.println(123456789);
display.display();
delay(2000);
display.clearDisplay();
نمایش اعداد 1تا9 با ماژول ال سی دی گرافیکی Nokia 5110

با فراخوانی توابع ()print یا ()println، می‌توان اعداد را نمایش داد. به خاطر پیاده‌سازی Overloaded این توابع، اعداد بدون علامت 32 بیتی را قبول می‌کند، پس می‌توان اعداد از 0 تا 429496295 را با این توابع نمایش داد.

 مشخص‌کردن مبنای اعداد در نمایشگر نوکیا 5110

// Specifying Base For Numbers
display.setCursor(0,0);
display.print("0x"); display.print(0xFF, HEX); 
display.print("(HEX) = ");
display.print(0xFF, DEC);
display.println("(DEC)"); 
display.display();
delay(2000);
display.clearDisplay();
نمایش فرمول محاسبه مبنای اعداد روی ماژول ال سی دی 5110

توابع ()print و ()println پارامتر دومی هم به‌صورت اختیاری می‌گیرند که مبنای عدد را مشخص می‌کند؛ مقادیر مجاز مبنا عبارت‌اند از: BIN (باینری، مبنای 2)، OCT  (اوکتال، مبنای 8)، DEC (دسیمال، مبنای 10) و HEX (هگزادسیمال، مبنای 16). برای اعداد با ممیز شناور (floating point) این پارامتر تعداد رقم پس از ممیز را مشخص می‌کند.

•        دستور print(78,BIN)، در خروجی “1001110” را چاپ می‌کند.

•        دستورprint(78,OCT) در خروجی “116” را چاپ می‌کند.

•        دستور print(78,DEC) در خروجی “78” را چاپ می‌کند.

•        دستورprint(78,HEX) در خروجی “4E” را چاپ می‌کند.

•        دستور print(1.23456,0) در خروجی “1” را چاپ می‌کند.

•        دستور print(1.23456,2) در خروجی “1.23” را چاپ می‌کند.

•        دستور print(1.23456,4) در خروجی “1.2345” را چاپ می‌کند.

نمایش کاراکترهای ASCII روی نمایشگر گرافیکی

// Display ASCII Characters
display.setCursor(0,0);
display.setTextSize(2);
display.write(3);
display.display();
delay(2000);
display.clearDisplay();
نمایش شکل قلب از کارکترهای اسکی روی نمایشگر نوکیا 5110

توابع ()print و ()println اطلاعات را به‌صورت متن ASCII قابل خواندن برای کاربر ارسال می‌کنند، در حالی که تابع ()write اطلاعات خام باینری را به نمایشگر ارسال می‌کند. پس برای نمایش کاراکترهای اَسکی می‌توانیم از این تابع استفاده کنیم. برای مثال ارسال عدد 3 کاراکتر قلب را نمایش می‌دهد.

چرخش متن در نمایشگر LCD نوکیا 5110

// Text Rotation
while(1)
{
	display.clearDisplay();
	display.setRotation(rotatetext);
	display.setTextSize(1);
	display.setTextColor(BLACK);
	display.setCursor(0,0);
	display.println("Text Rotation");
	display.display();
	delay(1000);
	display.clearDisplay();
	rotatetext++;
}
چرخش متن در ماژول ال سی دی  گرافیکی نوکیا 5110

برای چرخاندن تصویر در ماژول نمایشگر نوکیا 5110، می‌توانیم از تابع ()setRotation استفاده کنیم. این تابع امکان نمایش محتویات نمایشگر، به شکل افقی (landscape) و عمودی (portrait) را در اختیار ما قرار می‌دهد.

این تابع فقط یک پارامتر می‌گیرد که می‌تواند یک عدد صحیح نامنفی (شروع از صفر) باشد. با افزایش این عدد، تصویر 90 درجه در خلاف جهت عرقبه‌های ساعت شروع به چرخش می‌کند. بنابراین:

  • جهت گیری افقی استاندارد نمایشگر را حفظ می‌کند.
  • تصویر را 90 درجه به راست می‌چرخاند.
  • تصویر را برعکس می‌کند.
  • تصویر را 90 درجه به چپ می‌چرخاند.

نمونه کد دوم : رسم و نمایش اشکال ساده در ماژول نمایشگر نوکیا 5110

در این مثال می‌خواهیم تعدادی شکل ساده بکشیم. این برنامه چندین تابعِ طراحی شامل مستطیل، مستطیل با گوشه‌های گرد، دایره و مثلث را نشان می‌دهد. ابتدا برنامه را آپلود و تست کنید، سپس به بررسی دقیق‌تر آن خواهیم پرداخت.

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// Declare LCD object for software SPI
// Adafruit_PCD8544(CLK,DIN,D/C,CE,RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

void setup()   {
	Serial.begin(9600);

	//Initialize Display
	display.begin();

	// you can change the contrast around to adapt the display for the best viewing!
	display.setContrast(57);

	// Clear the buffer.
	display.clearDisplay();

	// Draw Rectangle
	display.drawRect(0, 0, 60, 40, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();

	//Draw Filled Rectangle
	display.fillRect(0, 0, 60, 40, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();

	//Draw Round Rectangle
	display.drawRoundRect(0, 0, 60, 40, 8, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();

	//Draw Filled Round Rectangle
	display.fillRoundRect(0, 0, 60, 40, 8, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();

	//Draw Circle
	display.drawCircle(20, 20, 20, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();

	//Draw Filled Circle
	display.fillCircle(20, 20, 20, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();

	//Draw Triangle
	display.drawTriangle(20, 0, 0, 40, 40, 40, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();

	//Draw Filled Triangle
	display.fillTriangle(20, 0, 0, 40, 40, 40, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();
}

void loop() {
}

خروجی به این شکل خواهد بود:

رسم شکل مثلث توپر در ماژول نمایشگر 5110

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

رسم مستطیل

// Draw Rectangle
display.drawRect(0, 0, 60, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();


//Draw Filled Rectangle
display.fillRect(0, 0, 60, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();
نمایش شکل مستطیل توخالی در نمایشگر 
5110
رسم شکل مستطیل توپر و سیاه در ماژول نمایشگر Nokia 5110

شما می‌توانید با استفاده از تابع ()drawRect یک مستطیل رسم کنید. این تابع 5 پارامتر می‌گیرد که شامل X و Y؛ عرض، طول و رنگ هستند. در حقیقت این تابع مستطیل‌های توخالی با مرزی به قطر 1 پیکسل رسم می‌کند و برای رسم مستطیل توپر، می‌توان از تابع مشابه ()fillRect استفاده کرد.

رسم مستطیل با گوشه‌های گرد

//Draw Round Rectangle
display.drawRoundRect(0, 0, 60, 40, 8, BLACK);
display.display();
delay(2000);
display.clearDisplay();


//Draw Filled Round Rectangle
display.fillRoundRect(0, 0, 60, 40, 8, BLACK);
display.display();
delay(2000);
display.clearDisplay();
رسم شکل مستطیل گوشه‌گرد توخالی در خروجی ماژول نمایشگر نوکیا 5110
نمایشگر نوکیا 5110 با شکل مستطیل گوشه‌گرد توپر در خروجی خود

برای رسم این مستطیل‌ها از تابع ()drawRounfRect استفاده می‌کنیم. پارامترهای این تابع (به ‌استثنای پارامتر شعاع گردی گوشه) مشابه ()drawRect است. این تابع مستطیل‌های توخالی با مرزی به قطر 1 پیکسل رسم می‌کند. شما می‌توانید با تابع ()fillRounfRect، مستطیل توپر با گوشه‌های گرد بکشید.

رسم دایره

//Draw Circle
display.drawCircle(20, 20, 20, BLACK);
display.display();
delay(2000);
display.clearDisplay();

//Draw Filled Circle
display.fillCircle(20, 20, 20, BLACK);
display.display();
delay(2000);
display.clearDisplay();
دایره توخالی در خروجی نمایشگر NOKIA 5110
ایجاد تصویر دایره توپر در خروجی ماژول نمایشگر 5110

رسم دایره با استفاده از تابع ()drawCircle صورت می‌گیرد. این تابع 4 پارامتر مشخصات X و Y مرکز، شعاع و رنگ را می‌گیرد و دایره‌های توخالی با مرز 1 پیکسلی رسم می‌کند. برای رسم دایره توپر می‌توانید از تابع ()fillcircle استفاده کنید.

رسم مثلث

//Draw Triangle
display.drawTriangle(20, 0, 0, 40, 40, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();


//Draw Filled Triangle
display.fillTriangle(20, 0, 0, 40, 40, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();
نمایش مثلث توخالی در خروجی ماژول برد نمایشگر NOKIA 5110
نمایش دادن مثلث توپر با ماژول نمایشگر LCD نوکیا 5110

شما می‌توانید با استفاده از تابع ()drawTriangle روی نمایشگر مثلث رسم کنید. این تابع 7 پارامتر می‌گیرند که عبارت‌اند از: مختصات X و Y سه گوشه مثلث و رنگ آن. (X0, Y0) رأس بالایی، (X1, Y1) رأس سمت چپ و (X2, Y2) رأس سمت راست را مشخص می‌کند. این تابع مثلث‌های توخالی با مرزی با قطر 1 پیکسل رسم می‌کند و برای رسم مثلث توپر می‌توانید از تابع ()fillTriangle استفاده کنید.

نمونه کد سوم : نمایش تصاویر بیت مپ(BitMap)

در مثال آخر آموزش راه‌ اندازی ال سی دی نوکیا 5110، به شما نشان می‌دهیم که چگونه تصاویر بیت مپ را روی این مدل نمایشگر نمایش بدهید. همانطورکه می‌دانید، عموماً تصاویر بیت مپ برای نمایش لوگوها، آیکون‌ها، تصاویر sprite یا تصاویر گرافیکی جذاب برای نمایش اطلاعات استفاده می‌شوند.

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// Declare LCD object for software SPI
// Adafruit_PCD8544(CLK,DIN,D/C,CE,RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

// 'Marilyn Monroe 84x48', 84x48px
const unsigned char MarilynMonroe [] PROGMEM = {
	0x00, 0x00, 0x00, 0x7f, 0x00, 0x02, 0xfe, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x00, 
	0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x1f, 0xe1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 
	0x00, 0x00, 0x0f, 0xf1, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xd8, 0xe0, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x07, 0xe0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x03, 
	0x3f, 0xe0, 0x00, 0x07, 0xf0, 0x78, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x70, 0x00, 0x0f, 0xee, 
	0x7c, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x0f, 0xf7, 0x1c, 0x00, 0x00, 0x00, 0x00, 
	0x07, 0x80, 0x00, 0x0f, 0xc7, 0xf3, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x0f, 0xf3, 
	0xdf, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x08, 0x7d, 0xef, 0xff, 0xc0, 0x00, 0x00, 
	0x00, 0x7f, 0xff, 0x80, 0x30, 0x0f, 0xfc, 0xe0, 0xc0, 0x00, 0x00, 0x01, 0x9e, 0x73, 0xc0, 0xe0, 
	0x07, 0xf8, 0xc1, 0xc0, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x01, 0xc0, 0x0f, 0xfd, 0xe1, 0x80, 0x00, 
	0x00, 0x03, 0xf8, 0x00, 0x01, 0x9c, 0x0f, 0xff, 0xc1, 0xc0, 0x00, 0x00, 0x02, 0xc0, 0x00, 0x01, 
	0x9f, 0xbf, 0xfe, 0x01, 0x40, 0x00, 0x00, 0x02, 0x60, 0x00, 0x03, 0x07, 0xef, 0xff, 0x01, 0x40, 
	0x00, 0x00, 0x00, 0x60, 0x00, 0x07, 0x01, 0xf7, 0xff, 0x80, 0xc0, 0x00, 0x00, 0x00, 0x50, 0x01, 
	0xdf, 0x00, 0x7f, 0xff, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x40, 0x01, 0xff, 0x00, 0x1f, 0xff, 0x1e, 
	0xe0, 0x00, 0x00, 0x02, 0x08, 0x00, 0x3f, 0x80, 0x07, 0xef, 0x03, 0xe0, 0x00, 0x00, 0x06, 0x08, 
	0x00, 0x03, 0xc0, 0x07, 0xdf, 0x07, 0xc0, 0x00, 0x00, 0x06, 0x08, 0x0f, 0x81, 0x80, 0x1f, 0xdf, 
	0x1f, 0x80, 0x00, 0x00, 0x03, 0x08, 0x1f, 0x98, 0x00, 0x3f, 0xfe, 0x19, 0x80, 0x00, 0x00, 0x18, 
	0x08, 0x3f, 0xfe, 0x00, 0x7f, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x08, 0x08, 0x30, 0x3f, 0x00, 0xff, 
	0xff, 0x3f, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x76, 0x0f, 0x89, 0xff, 0xff, 0x9f, 0x00, 0x00, 0x00, 
	0x03, 0xe0, 0x7f, 0xc3, 0x81, 0xff, 0xfe, 0x9f, 0x80, 0x00, 0x00, 0x03, 0xf0, 0x7f, 0xf3, 0xc3, 
	0xff, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x7f, 0xfd, 0xc3, 0xff, 0xfe, 0x5e, 0x00, 0x00, 
	0x00, 0x03, 0xf0, 0x7f, 0xff, 0xc3, 0xff, 0xf3, 0x1e, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x71, 0xff, 
	0x87, 0xff, 0xe3, 0xff, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x7c, 0x3f, 0x87, 0xff, 0xe3, 0xfe, 0x00, 
	0x00, 0x00, 0x0f, 0xf0, 0x3c, 0xff, 0x05, 0xff, 0xf3, 0xfc, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 
	0xfe, 0x09, 0xff, 0xf7, 0xfc, 0x00, 0x00, 0x00, 0x08, 0xf8, 0x01, 0xfc, 0x19, 0xff, 0xff, 0xf8, 
	0x00, 0x00, 0x00, 0x0c, 0x78, 0x00, 0x00, 0x13, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x0e, 0x78, 
	0x00, 0x00, 0x23, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x0e, 0xf8, 0x00, 0x00, 0x47, 0xff, 0xff, 
	0xf0, 0x00, 0x00, 0x00, 0x0c, 0xfa, 0x00, 0x01, 0x8f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x08, 
	0x7b, 0x00, 0x03, 0x3f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x0c, 0x3b, 0xf8, 0x0f, 0xff, 0xff, 
	0xff, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 
	0x07, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x71, 0xff, 0xff, 0xff, 
	0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x41, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00
};

void setup()   {
	Serial.begin(9600);

	//Initialize Display
	display.begin();

	// you can change the contrast around to adapt the display for the best viewing!
	display.setContrast(57);

	// Clear the buffer.
	display.clearDisplay();

	// Display bitmap
	display.drawBitmap(0, 0,  MarilynMonroe, 84, 48, BLACK);
	display.display();

	// Invert Display
	//display.invertDisplay(1);
}

void loop() {
}

ما با اجرای تکه کد زیر در خروجی این نمایشگر تصویر زیر را مشاهده می‌کنیم :

نمایش تصویر بیت مپ روی ماژول نمایشگر نوکیا 5110

توضیحات کد:

ما برای نمایش تصویر بیت مپ روی LCD، باید تابع ()drawBitmap را فراخوانی کنیم. این تابع شش پارامتر می‌گیرد که به ترتیب عبارت‌انداز: مشخصه X گوشه سمت چپ، مشخصه Y گوشه سمت چپ، آرایه بیت مپ، عرض تصویر در واحد پیکسل، ارتفاع تصویر در واحد پیکسل و رنگ.

در مثال ما، اندازه تصویر 84×84 است. پس مختصات X و Y را برابر 0 و عرض و ارتفاع را 84 و 84 قرار می‌دهیم.

// Display bitmap
display.drawBitmap(0, 0,  MarilynMonroe, 84, 48, BLACK);
display.display();

ولی یادتان باشد قبل از فراخوانی تابع ()drawBitmap، به یک تصویر نیاز داریم و فراموش نکنید که رزولوشن نمایشگر ما 84×84 است پس تصاویر بزرگ‌تر از این اندازه به‌درستی نمایش داده نمی‌شوند. شما برای به‌دست‌آوردن یک تصویر با اندازه مناسب، می‌توانید از برنامه ویرایش تصویر دلخواه خود مانند Inkspace، Photoshop یا حتی Paint استفاده کنید و ابعاد تصویر را 84×84 پیکسل قرار دهید.

برای مثال ما یک تصویر از Marilyn Monroe را انتخاب و اندازه آن را با استفاده از Paint به 84×84 پیکسل تغییر دادیم. سپس با فرمت bmp. ذخیره کردیم.

مرلین مونرو (سیاه و سفید)

حال که تصویر بیت مپ را در اختیار داریم زمان آن رسیده که آن را به‌صورت آرایه‌ای دربیاوریم که برای کنترلر PCD8544 قابل‌فهم باشد. این کار به دو روش امکان‌پذیر است: روش آنلاین با استفاده از سایت image2cpp و روش آفلاین با استفاده از برنامه LCD Assistant.

ساخت آرایه به روش آنلاین با image2cpp

image2cpp یک اپلیکیشن آنلاین برای تبدیل عکس به آرایه است. سایت Image2cpp به ما اجازه می‌دهد:

•        چندین عکس را هم‌زمان تبدیل کنیم.

•        تصویر را بکشیم یا جمع کنیم تا به ‌اندازه دلخواه ما دربیاید.

•        حد آستانه روشنایی تصویر را تعیین کنیم تا چه بخش‌هایی از تصویر سیاه و چه بخش‌هایی سفید شوند.

•        تصویر را عمودی یا افقی بچرخانیم.

•        رنگ‌های تصویر را معکوس (نگاتیو) کنیم.

این برنامه به حدی قدرتمند است که می‌تواند به‌صورت آفلاین هم کار کند. کافی است تصویر را روی کامپیوتر خود ذخیره کرده و با مرورگر خود باز کنید. این قابلیت به لطف Jasper van Loenen ممکن شده است.

برای شروع، image2cpp را در مرورگر خود باز کنید و عکسی را که می‌خواهید روی نمایشگر نمایش دهید انتخاب کنید.

مرحله آپلود عکس در سایت image2cpp

ابعاد تصویر در قسمت Canvas size که زیرمجموعه بخش Imagesetting است نمایش داده می‌شود. اگر این ابعاد 84×84 نیست، آن را 84×84 تنظیم کنید. می‌توانید خروجی را در بخش Preview مشاهده کنید. همچنین در صورت نیاز می‌توانید رنگ پس‌زمینه را تغییر دهید یا تصویر را نگاتیو کنید.

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

انتخاب گزینه NVERT IMAGE COLORSدر سایت image2cpp

این پیش‌نمایش کوچک، تأثیر هر تغییری را که در تنظیمات اعمال کنید، نشان می‌دهد. پس می‌توانید با تغییر تنظیمات و بررسی پیش‌نمایش، به تصویر مناسب خود دست یابید.

پیش‌نمایش تصویر در image2cpp

پس از رضایت از نتیجه، می‌توانید آرایه را بسازید. برای این کار کافی است در بخش Output، Code output format را روی Arduino Code قرار دهید و روی دکمه Generate code کلیک کنید.

این برنامه گزینه دیگری به نام Draw mode یا “حالت طراحی” دارد. این گزینه آرایه تصویر را برحسب روش اسکن صفحه‌نمایش می‌سازد. اگر تصویر شما به‌هم‌ریخته نمایش داده می‌شود، این گزینه را تغییر داده و دوباره امتحان کنید.

گرفتن خروجی آرایه‌ی تصویر در سایت image2cpp

حال آرایه بیت مپ شما آماده است! شما می‌توانید خروجی را مستقیماً از روی کد بالا بردارید. فقط کافی است نام مناسبی برای آن انتخاب کنید و سپس آرایه خود را در تابع ()drawBitmap فراخوانی کنید.

فراخوانی آرایه در تابع drawBitmap

ساخت آرایه بیت مپ به روش آفلاین با برنامه LCD Assistant

برنامه دیگری به نام LCD Assistant برای ویندوز وجود دارد که می‌تواند تصاویر بیت مپ را به آرایه تبدیل کند. این برنامه به قدرتمندی image2cpp نیست اما در میان علاقه‌مندان این حوزه همچنان محبوب است.

برای شروع، باید تصویر خود را به بیت مپ مونو کروم با ابعاد 84×84 تبدیل کنید. برای این کار به‌ دلخواه از یک برنامه ویرایش تصویر مانند Inkscape ،Photoshop ،Paint و.. می‌توانید استفاده کنید. در اینجا ما از paint استفاده کرده‌ایم.

  • فایل خود را در Paint باز کنید و اندازه آن را به 84×84 تغییر دهید.
تغییر ابعاد تصویر در برنامه paint
  • حالا فایلی باز کردید را با فرمت bitmap ذخیره کنید. برای این کار همانطور که در تصویر زیر می‌بینید، در زمان ذخیره کردن، فیلد Save as type را روی Monochrome Bitmap(*.bmp;*.dib) قرار دهید. با این کار یک تصویر بیت مپ ساخته می‌شود که برای هر پیکسل فقط مقادیر 0 یا 1 (سیاه یا سفید) دارد.
ذخیره فایل تصویری در  paint با پسوند bmp

مشکل این روش این است که امکان تعیین حد آستانه روشنایی را نداریم و این مقدار به‌صورت پیش‌فرض روی 50% قرار داشته و قابل تغییر نیست.

باز نمودن فایل تصویر خود در نرم افزار LCD Assistant
  • در این مرحله به منوی File رفته و این بار Save output را انتخاب کنید. تصویر شما به‌صورت فایل متنی ذخیره می‌شود. این برنامه گزینه دیگری به نام Byte Orientation یا “ترتیب قرارگیری بایت‌ها” دارد. این گزینه آرایه تصویر را برحسب روش اسکن صفحه‌نمایش می‌سازد. مانند روش آنلاین، اگر تصویر شما به‌هم‌ریخته نمایش داده می‌شود این گزینه را تغییر داده و دوباره امتحان کنید.
ذخیره فایل بیت مپ با گزینه save output در منوی file
  • پس از ساخت آرایه، آن را در کد خود کپی و نام مناسبی برای آرایه خود انتخاب کنید. سپس در انتهای کار، آن را در تابع ()drawBitmap فراخوانی نمایید.

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

مقالات مشابه

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

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

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.
You need to agree with the terms to proceed

پر بازدید ترین مقالات