الرسم والكتابة باللغة العربية على شاشة الـ LCD December 17, 2017 – Posted in: Arduino, Learn arduino – Tags: الكتابة بالعربي
هل حاولت من قبل عرض الحروف العربية أو الرموز الخاصة بك على شاشة LCD كما نفعل في اللغة الإنجليزية , وهل حاولت أيضا فهم كيف يتم عرض الاحرف عليها او رسم بعض الأشكال الخاصة بك؟!
في هذا المشروع سنقوم بكتابة كلمات باللغة العربية و رسم رموز خاصة بنا عن طريق الرسم على شاشة LCD.
القطع المطلوبة:
الأدوات التي تحتاجها لهذا المشروع :
-
Rotary Potentiometer – 10k Ohm, Linear₪ 4.0
-
Arduino Uno – R3 (china)₪ 35.0
-
Breadboard Jumper Wire 65pcs₪ 16.0
-
Product on saleHALF-SIZE BREADBOARD₪ 11.0
-
STANDARD LCD 20X4₪ 45.0
-
Standard LCD 16×2₪ 25.0
ولكي نقوم بطباعة الحروف العربية او الرموز الخاصة بنا على شاشة العرض LCD يجب ان نتعرف على ذاكرة ال CG-RAM لشاشة LCD .
ذاكرة CG-RAM
CG-RAM هي العنصر الأساسي لعملية انشاء الرسومات و الاحرف الخاصة بك على شاشة العرض LCD، بحيث تقوم بتخزين الرسومات التي نقوم بإنشائها في الكود.
– حجم هذه الذاكرة هو 64 بايت, بحيث يمكنها تخزين 8 احرف في وقت واحد، وكل حرف يتكون من 8 بايت
– يبدأ عنوان الذاكرة CG-RAM من (0x40 Hex (64 decimal.
في الجدول التالي يتم توضيح عناوين الاحرف و الرسومات التي سيتم إنشاءها وأوامر الطباعة الخاصة بهم:
في الجدول اعلاه ستلاحظ العنوان الذي سيبدأ به كل رمز خاص بك مع امر الطباعة الخاص به. مثلا اول حرف يتم انشاؤه وتخزينه على الموقع من 0x40 الى 0x47 في الذاكرة، ثم يتم طباعته على شاشة الـ LCD بواسطة ارسال الامر 0 الى شاشة الـ LCD. والحرف الثاني يبدأ تخزينه من الموقع 0x48 الى 0x4F ويتم طباعته من خلال ارسال الامر 1 الى الشاشة.
كيف يتم إنشاء أحرف مخصصة في CG-RAM
يتم تشكيل كل حرف او رمز على الشاشة في مصفوفة تكون ابعادها 8×5، حيث ان 5 تمثل عدد الاعمدة و 8 تمثل عدد الصفوف.
اولا: قم برسم مصفوفة 8*5 بكسل، ثم قم برسم الرمز او الحرف الخاص بك في داخل المصفوفة، ثم قم بوضع على كل خلية ملونة قيمة 1 , و قيمة صفر على الخلايا الأخرى.
فمثلا اذا اردنا ان ننشئ حرف ا في هذه المصفوفة يتم انشاؤه بالطريقة التالية:
يتم استبدل كل لون اسود بالرقم ١ و المربع الغير ملون نستبدله ب 0.
وبهذه الطريقة، عندما نريد كتابة أي حرف او شكل يجب ان يكون بداخل المصفوفة التي حجمها 8×5، بحيث يتم مكان كتابة النقطة المراد اضاءتها ١ و النقاط الاخرى 0.
بعد ذلك نقوم بتحويلها الى مصفوفة مكونة من 8-Bytes كالتالي:
مثلا في هذا الشكل، استبدل الصف الاول المضاء ب1 والمطفىء ب0
،وبما اننا استخدمنا اول ٥ خانات من البت سوف نكتبها في هذا الشكل
0b00000 , وبعد ما ترتيب باقي المصفوفة سوف نجد لدينا هذه المصفوفة
توصيل شاشة الـ 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 .
الكود البرمجي للأردوينو
قم برفع البرنامج التالي على الاردوينو:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); byte R[8] = { 0b00000, 0b00000, 0b00010, 0b00010, 0b00010, 0b00100, 0b01000, 0b10000 };byte W[8] = { 0b00000, 0b00000, 0b00111, 0b00101, 0b00111, 0b00100, 0b01000, 0b10000 }; byte B[8] = { 0b00000, 0b00000, 0b00000, 0b00001, 0b11111, 0b00000, 0b00010, 0b00000 };byte T[8] = { 0b00000, 0b00110, 0b00000, 0b00100, 0b11111, 0b00000, 0b00000, 0b00000 }; byte K[8] = { 0b11110, 0b10000, 0b10000, 0b10000, 0b11111, 0b00000, 0b00000, 0b00000 }; byte S1[8] = { 0b00000, 0b00000, 0b00000, 0b01010, 0b11111, 0b00000, 0b00000, 0b00000 }; byte S2[8] = { 0b00000, 0b00000, 0b00000, 0b00001, 0b10001, 0b10001, 0b11111, 0b00000 }; byte logo[8] = { 0b00000, 0b00100, 0b10101, 0b10101, 0b11111, 0b10101, 0b11111, 0b00000 }; void Word1() { lcd.setCursor(4,0); lcd.write(7); lcd.write(byte(0)); lcd.write(1); lcd.write(2); lcd.write(3); lcd.write(4); lcd.write(5); lcd.write(6); lcd.write(7); lcd.setCursor(4,1); lcd.print("ROBOTICX"); lcd.write(7); } void Logo1() { lcd.setCursor(7,0); lcd.write(8); } void setup() { lcd.createChar(0, S2); // char (س) lcd.createChar(1, S1); //char ( س ) lcd.createChar(2, K); //char (ـكـ) lcd.createChar(3, T); //char (ـتـ) lcd.createChar(4, B); //char (بـ) lcd.createChar(5, W); //char (و) lcd.createChar(6, R); //char (ر) lcd.createChar(7, logo); lcd.begin(16, 2); } void loop() { Word1(); Logo1(); } |
يتم استخدام createChar لتشكيل رمز يمكن طباعته على شاشة LCD و تكون ابعادة 8×5 بكسل.
1 2 3 4 5 6 7 8 |
lcd.createChar(0, S2); // char (س) lcd.createChar(1, S1); //char ( س ) lcd.createChar(2, K); //char (ـكـ) lcd.createChar(3, T); //char (ـتـ) lcd.createChar(4, B); //char (بـ) lcd.createChar(5, W); //char (و) lcd.createChar(6, R); //char (ر) lcd.createChar(7, logo); |
وليتم رسمه على شاشة الـ LCD يتم استخدام الامر write
1 2 3 4 5 6 7 8 9 10 11 12 13 |
lcd.setCursor(4,0); lcd.write(7); lcd.write(byte(0)); lcd.write(1); lcd.write(2); lcd.write(3); lcd.write(4); lcd.write(5); lcd.write(6); lcd.write(7); lcd.setCursor(4,1); lcd.print("ROBOTICX"); lcd.write(7); |
بعد رفع الكود البرمجي على لوحة الأردوينو سيتم عرض كلمة روبوتكس وشعارنا على الـ LCD .