الأحد، 3 مارس، 2013

الشاشة الكريستالية 1602 Liquid crystal

 الشاشة الكريستالية 1602 Liquid crystal



هذا النوع من الشاشات الكريستالية هو الأشهر و الأكثر انتشارا بين هواة الالكترونيات و في المشاريع الإلكترونية , نظراً لتوفرها بسعر زهيد و سهولة برمجتها .

 و قبل البدء بالحديث عن الشاشات الكريستالية , نقاط مهمة 
تساعدك على  أختيار الشاشة المناسبة لمشروعك ألا و هي :

1) أبعاد الشاشة 

2) نوع المتحكم المدمج معها .

3) التطبيق الذي تحتاجه من الشاشة " وجود الألوان , إظهار الصور و المؤثرات الحركية , الكتابة بخطوط مختلفة , ألخ من التطبيقات "

ما سنتحدث عنها اليوم هي الشاشة الكريستالية LCD1602  التي تحتوي على سطرين و 16 عموداً , و التي تعتمد في تشغيلها على المتحكم  Hitachi HD44780 driver  و التي يمكن تملك ناقل خط Data bus 8 bit .

سنلقي نظرة بداية على هذا النوع و عن كيفية توصيله و برمجته و عرض النصوص و البيانات و الأرقام على هذه الشاشه .



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

البنية العامة للشاشة الكريستالية :
للشاشات الكريستالية نظام اتصال على التوازي و يبين الرسم التالي التوزيع للمرابط الخاصة بهذه الشاشة :
سنتحدث بشكل مبسط و مختصر عن كل مربط و وظيفته ...

RS اختيار المسجل : هذا المربط يحدد لنا  في أي ذاكرة نحن  نكتب البيانات ! يتم الأختيار ما بين مسجل البيانات , أو مسجل التعليمات

R/W  خيار القراءة أو الكتابة  , هذا المربط يحدد إما أختيار وضعية القراءة أو الكتابة .
enable pin يسمح هذا المربط في حال تفعيله بالكتابة للمسجلات الخاصة بالشاشة الكريستالية .

data pin (D0-D7) : هي المرابط التي نمرر البيانات عبرها للمسجلات  .


هناك ايضاً مرابط للتغذية و التأريض و للأضاءة الخلفية الداخلية .
هذه لمحة عامة عن المرابط الخاصة بهذه الشاشة , سنتكلم عن توصيل هذه الشاشة مع بطاقة الأردوينو .
سنوصل المرابط كالتالي :
LCD RS ……..D12
LCD Enable …….D11
LCD D4 ……D5
LCD D5……D4
LCD D6……D3
LCD D7……D2
و التوصيل كما في الصورة ....

و أيضا سنوصل الرجل رقم 15 مع مصدر التغذية الموجب و الرجل رقم 16 مع السالب في حال أردنا تشغيل الإضاءة الداخلية .
المكتبة الاساسية الخاصة بالشاشات الكريستالية :

يجب عليك الإلمام بهذه المكتبة لأنها تمكنك من التعامل مع اغلب الشاشات الكريستالية .

أوامرها سهلة و بسيطة و يمكنك الإطلاع عليها هنا .

سنقوم بداية بكتابة عدة برامج للإلمام بأكبر قدر من الأوامر و التطبيقات .

عند كتابة البرنامج , نقوم بتعريف المداخل المربوطة مع الشاشة باستخدام الأمر LiquidCrystal
 و يكتب على الصورة التالية :

و تكتب المرابط المربوطة بالشاشة بأكثر من صيغة , و أكثر الصيغ استعمالاً هي :






و يجب أن لا ننسى أن نقوم بتهيئة الشاشة للبدء باستخدامها بواسطة الأمر 

حيث نقوم بكتابة ابعاد الشاشة المستخدمة عن طريق هذا الأمر .


في حالتنا هذه تكتب الشاشة بالصيغة :




 هذان الأمران هما أهم أمرين يجب كتابتهما في جملة التثبيت void setup

البرنامج الأول : برنامج لطباعة جملة Hello world!  الشهيرة .

البرنامج الأول سيبين لنا كيفية إظهار الكلمات على الشاشة .

// this simple program taken from :


 //This example code is in the public domain.

 //http://www.arduino.cc/en/Tutorial/LiquidCrystal
 
 //modified by Mohannad Rawashdeh

// 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);

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(){}



حسناً لنأخذ هذا المثال , ستحتاج فقط لمقاومة متغيرة مربوطة مع المدخل A0 من الأردوينو للتحكم بسرعة تحرك النص .
#include <LiquidCrystal.h>
int t=300;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int y =1;
void setup()
{  
   lcd.begin(16, 2);
   lcd.cursor();
   lcd.autoscroll();
}
char Phone[]={"0786739233"};
char Name[]={"Mohannad Rawashdeh "}; char Email[]={"Genotronex@Gmail.com "};
void timing_delay(){
  int A=analogRead(A0);
  delay(5);
  t=map(A,0,1023,30,1000);
  t= constrain(A, 30, 1000);
}
  
void loop(){
  timing_delay();
    lcd.setCursor(15, 0);
  for (int i=0;i<20;i++){
    lcd.print(Name[i]);
     timing_delay();
    delay(t);
  }
  lcd.clear();
  lcd.setCursor(15, 0);
 for (int i=0;i<21;i++){
    lcd.print(Email[i]);
    timing_delay();
    delay(t);
  }
  lcd.clear();
   lcd.setCursor(15, 0);
 for (int i=0;i<11;i++){
    lcd.print(Phone[i]);
    timing_delay();
    delay(t);
  }
  delay(2000);
  lcd.clear();
}



و في الختام , هذا الفيديو للبرنامج الأخير الذي كتبناه , تحياتي



2 التعليقات :

  1. يوجد خطأ في تعريف الامر : lcd.prine(phone[i])

    ردحذف
  2. شكراً عمر , فعلاً هناك خطأ و قد تم تعديله شكراً لمشاركتك

    ردحذف

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.