الرسم على شاشة LCD

يمكن عرض جميع الرسائل المكونة من الحروف الانجليزية والأرقام ورموز خاصة مثل ( علامات الترقيم، الرموز الرياضية) وكذلك بعض الاحرف اليابانية و اليونانية على شاشة الـ LCD . ولكن كيف يمكننا عرض الحروف العربية أو رموز الخاصة بك على الشاشة ؟!

في هذا المشروع سنقوم بكتابة كلمات باللغة العربية و رسم رموز مخصصة عن طريق الرسم على شاشة LCD.

custom-characters-on-lcd

القطع المطلوبة:

الأدوات التي تحتاجها لهذا المشروع :

HD44780

LCD 16×2 شاشة

potentiometer 10k

Potentiometer 10K Ω

220 Ω resistor

مقاومة 220 اوم

Half-size Breadboard

لوح تجارب حجم متوسط (Half size breadboard )

arduino uno r3

Arduino Uno R3

Jumper Wires Male/Male

 اسلاك توصيل ذكر/ذكر (Jumper Wires Male Male)

طباعة الحروف العربية او الرموز الخاصة بك على شاشة العرض LCD ليس من الصعب جدا، يتطلب ذلك معرفة CG-RAM لشاشة LCD .

 ذاكرة CG-RAM

CG-RAM هي العنصر الأساسي لإنشاء الرسومات و الاحرف الخاصة بك . حيث تقوم بتخزين الرسومات التي تم إنشاءها بمجرد اعلانها بالكود .
– حجم ذاكرة CG-RAM هو 64 بايت(64-byte) . ولذلك يمكنك تشكيل 8 احرف في وقت واحد، وكل حرف يتكون من  8 بايت (8-Byte)  . ثمانية احرف كل منها 8بايت (8-characters* 8-byte) تساوي 64-Byte .
– يبدأ عنوان الذاكرة CG-RAM من (0x40 Hex (64 decimal.

سنقوم بإنشاء الاحرف العربية او رسومات على هذه الذاكرة. بمجرد إنشاء هذة الاحرف يمكننا عرضها على شاشة LCD  في اي وقت عن طريق ارسل امر معين الى شاشة  الـ LCD .

في الجدول التالي يتم توضيح عناوين الاحرف و الرسومات التي سيتم إنشاءها  وأوامر الطباعة الخاصة بهم:

custom-characters-on-lcd

في الجدول اعلاه ستلاحظ العنوان الذي سيبدأ به كل رمز خاصة بك مع امر الطباعة الخاص به. مثلا اول حرف يتم انشاؤه وتخزينة على الموقع من 0x40 الى 0x47 في الذاكرة،  ثم يتم طباعته على شاشة الـ LCD  بواسطة ارسال الامر 0 الى شاشة الـ LCD. والحرف الثاني تبدأ تخزينة من الموقع 0x48 الى 0x4F ويتم طباعتة من خلال ارسل الامر 1 الى الشاشة.

custom-characters-on-lcd

كيف يتم إنشاء أحرف مخصصة في  CG-RAM

يتم تشكيل كل حرف او رمز على الشاشة في مصفوفة تكون ابعادها 8×5. حيث ان 5 تمثل عدد الاعمدة و 8 تمثل عدد الصفوف.

custom-characters-on-lcd

اولا: قم برسم مصفوفة 8*5 بكسل، ثم قم برسم الرمز او الحرف الخاص بك في داخل المصفوفة، ثم قم بوضع على كل خلية ملون قيمة 1 , و قيمة صفر على الباقي.

custom-characters-on-lcd

ثانيا: قم بتحويل تلك المصفوفة الى 8-Bytes.

custom-characters-on-lcd

تصميم لوح التجارب

قم بتوصيل الدائرة الكهربائية على لوحة التجارب كما هو موضح بالصورة :

custom-characters-on-lcd

توصيل  شاشة الـ LCD :

Arduino LCD
Pin 12 RS pin
Pin 11 Enable pin
Pin 5 D4 pin
Pin 4 D5 pin
Pin 3 D6 pin
Pin 2 D7 pin

يمكنك العودة إلى الدرس الثاني عشر للإطلاع على طريقة توصيل شاشة الـ LCD .

الكود البرمجي للأردوينو

قم برفع البرنامج التالي على الاردوينو:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

byte M[8] = {
0b00000,
0b00000,
0b00110,
0b01001,
0b11001,
0b00110,
0b00000,
0b00000
};
byte R[8] = {
0b00000,
0b00000,
0b00010,
0b00010,
0b00011,
0b00100,
0b01000,
0b10000
};
byte H[8] = {
0b00000,
0b01100,
0b10010,
0b00001,
0b11111,
0b00000,
0b00000,
0b00000
};
byte BA[8] = {
0b10000,
0b10000,
0b10000,
0b10010,
0b11111,
0b00000,
0b00100,
0b00000
};
byte logo[8] = {
0b11111,
0b10101,
0b11111,
0b11111,
0b01110,
0b01010,
0b11011,
0b00000
};

void Word1()
{
lcd.setCursor(12,0);
lcd.write(byte(0));
lcd.write(1);
lcd.write(2);
lcd.write(3);
}
void Logo1()
{
lcd.setCursor(10,0);
lcd.write(4);
}

void setup() {
lcd.createChar(0, BA); // char (با)
lcd.createChar(1, H); //char ( ح )
lcd.createChar(2, R); //char (ـر)
lcd.createChar(3, M); //char (مـ)
lcd.createChar(4, logo);
lcd.begin(16, 2);
}

void loop() {
Word1();
Logo1();
}

شرح الكود :

تم رسم الأحرف داخل مصفوفة و تحويلها الى 8-byte :

custom-characters-on-lcd
byte M[8] = {
0b00000,
0b00000,
0b00110,
0b01001,
0b11001,
0b00110,
0b00000,
0b00000
};
byte R[8] = {
0b00000,
0b00000,
0b00010,
0b00010,
0b00011,
0b00100,
0b01000,
0b10000
};
byte H[8] = {
0b00000,
0b01100,
0b10010,
0b00001,
0b11111,
0b00000,
0b00000,
0b00000
};
byte BA[8] = {
0b10000,
0b10000,
0b10000,
0b10010,
0b11111,
0b00000,
0b00100,
0b00000
};

يتم استخدام createChar لتشكيل رمز يمكن طباعته على شاشة LCD و تكون ابعادة 8×5 بكسل.

lcd.createChar(0, BA); // char (با)
lcd.createChar(1, H); //char ( ح )
lcd.createChar(2, R); //char (ـر)
lcd.createChar(3, M); //char (مـ)

وليتم رسمه على شاشة الـ LCD  يتم استخدام الامر write

lcd.write(byte(0));
lcd.write(1);
lcd.write(2);
lcd.write(3);

بعد رفع الكود البرمجي على لوحة الأردوينو سيتم عرض كلمة مرحبا و رمز على شاشة الـ LCD .

custom-characters-on-lcd



اردوينو – الدرس الثاني عشر – التحكم بشاشة LCD (الجزء الأول)

مقدمة

في هذا الدرس ستتعلم تركيب وتشغيل شاشة LCD.

الشاشة الكرستالية LCD  تمتلك اضاءة خلفية وتعرض سطرين، كل سطر يحتوى على 16 حرف كحد أقصى.

arduino-lesson-12-lcd

المواد والأدوات

lcd

LCD Display (16×2 characters)

arduino-lesson-12-lcd

1× مقاوم متغير 10kΩ variable resistor (pot)

Half-size Breadboard

1× لوحة التجارب (Half-size Breadboard)

Arduino Uno R3

 1× اردوينو اونو

Jumper wire pack

حزمة أسلاك توصيل (ذكر-ذكر)

Arduino cable

1× سلك اردوينو
220-ohm

1 × مقاومة 220

تلحيم رؤوس التوصيل للشاشة LCD

قد تجد أن الشاشة لا تمتلك رؤوس ‘pins’ ليتم تركيبها على لوح التجارب كما تجري العاده لبعض القطع الالكترونية الاخرى كالازرار مثلاً.

الشاشة تحتاج إلى 16 رأس توصيل، لذا ان كنت نمتلك شريط رؤوس أكثر من ذلك، ما عليك سوى قصها ليكون مجموعها 16 رأس فقط.

LCD Pins

ضع الشاشة على شريط الرؤوس (الجهة الأقصر) ولحّم كل رأس على حدة كما في الصورة التالية: (كن حذرًا)

LCD pins soldering

توصيل الدائرة

شاشة الـ LCD تحتاج إلى 6 منافذ رقمية  ‘digital pins’ من الأردوينو  كمخارج رقمية ‘digital outputs’ .

كما تحتاج لطاقة 5V و مخرج أرضي GND.

Lcd

هنالك بعض التوصيلات التي عليك ربطها، لذلك من الأفضل أن تضع شاشة الـLCD بمحاذاة لوح التجارب حتى نتعقب التوصيلات بشكل صحيح كما في صورة التصميم السابقة.
تذكر أن السلك الأصفر الطويل هو ما يربط المقاوم المتغير بمنفذ pin 3  لشاشة الـLCD. المقاوم المتغير وظيفته هنا هي لتغيير درجة سطوع الشاشة.

arduino-lesson-12-lcd

الكود البرمجي

برنامج الأردوينو IDE يحتوى على مكتبة من الأمثلة خاصة بإستخدام شاشة الـLCD والتي ستقوم باستخدام احدها الآن.
تستطيع ان تجدها عبر الذهاب إلى:
File> Examples> Liquid Crystal > HelloWorld

#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("hello, world!");
}
void loop() {
// 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 the number of seconds since reset:
lcd.print(millis() / 1000);
}

هنا استخدمنا منافذ مختلفة من لوحة الاردوينو.

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

هذا السطر يطلب من الأردوينو استعمال مكتبة الشاشة الكرستالية  (حتى يستطيع الأردوينو من استيعاب الاوامر الخاصة بالشاشة)

#include <LiquidCrystal.h>

هذا السطر يوضح أي من منافذ الأردوينو التي قمت بإستخدامها للربط مع منافذ (رؤوس) الشاشة:

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

في دالة setup هنالك سطرين:

السطر الأول يخبر مكتبة الشاشة الكرستالية العدد الأقصى لخانات السطر الواحد وعدد السطور الأقصى التي تسمح بها الشاشة.
والسطر الثاني لإظهار الجملة التي ترغب بإظهارها في الشاشة.

  lcd.begin(16, 2);
  lcd.print("hello, world!");

في دالة loop هنالك سطرين:

السطر الأول لإعداد المؤشر على الشاشة (حيث ستظهر الجمل التي نرغب بإظهارها)
السطر الثاني لاظهار أجزاء الثانية منذ أن بدأ تشغيل البرنامج على الأردوينو.

  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);

ارفع الكود إلى متحكم الاردوينو وسترى جملة ‘Hello World’ تظهر على الشاشة يتبعها رقم (عداد بدأ من الرقم صفر).

أنشطة أخرى

جرب الضغط على زر الإعادة reset في الاردوينو، ولاحظ أن العداد يبدأ مرة أخرى من الصفر.

يمكنك تغيير اعداد المؤشر (موضع الجملة والرقم).