التجربة السادسة:- وحدات العرض ذات شرائح الليدات السبعة Seven segment LED display

الوصف(Description):-

توجد هذه الوحدات غالبا فى ساعات الراديو وفى أجهزة تسجيل الفديو وفى أفران الميكروويف وفى الألعاب وفى كثير من الأجهزة . هذه الوحدات تستخدم أساسا فى عرض الأعداد العشرية ولكنها يمكن أن تعرض أيضا بعض الحروف الأبجدية والحروف الأخرى .هذا التدريب يتناول الربط بين هذه الوحدات والميكروكونترولر PIC16F88 .سوف نقوم بعمل عداد سداسى عشر والذى يقوم بالعد من 0 (00h) إلى 15 (0Fh) وعرض القيمة على وحدة العرض ذات شرائح الليد السبعة ..


المعلومات النظرية المطلوبة  ( Required Theory)
وحدة العرض ذات شرائح الليدات السبعة هى تشكيل خاص من سبعة عناصر ليدات بغرض تشكيل شكل مستطيل يستخدم شريحتين رأسيين فى كل جانب مع شريحة أفقية فى القمة وأخرى فى الوسط وثالثة فى القاع .بتوصيل ON أو فصل OFF الشرائج كل على حدة  (منفردة) يمكن عرض الأرقان من 0 إلى 9 وبعض الحروف . فى بعض الأحيات تمتلك وحدة العرض شريحة ثامنة لعرض النقطة ( العلامة ) العشرية . لذلك فإن وحدة العرض ذات شرائح الليدات السبعة تتطلب سبعة مخارج من الميكروكونترولر لعرض عدد ومخرج إضافى إذا رغبنا فى عرض العلامة العشرية أيضا .
تعلم ( تسمى – ترمز ) الشرائح بالحروف الصغيرة a, b, c, d, e, f, g , dp حيث dp هى رمز العلامة العشرية .يمكن تنظيم (ترتيب) الثمانى ليدات الموجودة بداخل وحدة العرض فى هيئة " بمهبط (كاثود) مشترك" أو " بمصعد (أنود) مشترك".
فى المهبط المشترك يتم ربط (توصيل) جميع مهابط ليدات الشرائح مع بعضها ويجب توصيل هذه النقطة المشتركة بالأرضى . عندما نريد توصيل (إضاءة) ليد شريحة نقوم بتوصيل جهد المنطق المرتفع 1 إلى مصعده .
فى وحدات العرض ذات المصعد المشترك يتم ربط (توصيل) جميع المصاعد مع بعضها وتوصيل النقطة المشتركة إلى الجهد الموجب Vcc . عندما نريد توصيل (إضاءة) ليد شريحة معينة نقوم بتوصيل جهد المنطق المنخفض 0 إلى مهبطه .
فى حالة الرغبة فى استخدام أكثر من وحدة عرض نستخدم تقنية "الانتخاب"multiplexing لتقليل عدد أطراف الميكروكونترولر المطلوبة . سوف نتناول هذه التقنية فى تدريب لاحق .
الشكل التالى يبين وحدة عرض ذات مهبط مشترك وهى ذات10أطراف .

جميع المهابط متصلة ببعضها ونقطة المهبط المشترك متاحة على الأطراف 3 و  8 . يتم تشغيل المصاعد من خلال أطراف المداخل / المخارج للميكروكونترولر من خلال مقاومات توالى لتحديد للتيار . عرض الرقم المطلوب يتطلب توصيل وفصل ليدات الشرائح المناسبة . على سبيل المثال لعرض الرقم 7 يتم توصيل ليدات الشرائح a, b, , c فقط .

مخطط الدائرة    (Circuit Diagram)

البرنامج (Software)


 sbit seg_a at Rb0_bit;
 sbit seg_b at Rb1_bit;
 sbit seg_c at Rb2_bit;
 sbit seg_d at Rb3_bit;
 sbit seg_e at Rb4_bit;
 sbit seg_f at Rb5_bit;
 sbit seg_g at Rb6_bit;
 unsigned short count=0;
 void main() {
  ANSEL = 0b00000000;    //All I/O pins are configured as digital
  TRISb = 0b00000000;   // PORTC All Outputs
  TRISA = 0b00001000;  // PORTA All Outputs, Except RA3
  OSCCON = 0b01100000;
do {
   switch (count) {
   case 0 : seg_a=1; seg_b=1; seg_c=1;
            seg_d=1; seg_e=1; seg_f=1; seg_g=0;
            break;
   case 1 : seg_a=0; seg_b=1; seg_c=1; seg_d=0;
            seg_e=0; seg_f=0; seg_g=0;
            break;
   case 2 : seg_a=1; seg_b=1; seg_c=0; seg_d=1;
            seg_e=1; seg_f=0; seg_g=1;
            break;
   case 3 : seg_a=1; seg_b=1; seg_c=1; seg_d=1;
            seg_e=0; seg_f=0; seg_g=1;
            break;
   case 4 : seg_a=0; seg_b=1; seg_c=1; seg_d=0;
            seg_e=0; seg_f=1; seg_g=1;
            break;
   case 5 : seg_a=1; seg_b=0; seg_c=1; seg_d=1;
            seg_e=0; seg_f=1; seg_g=1;
            break;
   case 6 : seg_a=1; seg_b=0; seg_c=1; seg_d=1;
            seg_e=1; seg_f=1; seg_g=1;
            break;
   case 7 : seg_a=1; seg_b=1; seg_c=1; seg_d=0;
            seg_e=0; seg_f=0; seg_g=0;
            break;
   case 8 : seg_a=1; seg_b=1; seg_c=1; seg_d=1;
            seg_e=1; seg_f=1; seg_g=1;
            break;
   case 9 : seg_a=1; seg_b=1; seg_c=1; seg_d=0;
            seg_e=0; seg_f=1; seg_g=1;
            break;
   case 10 : seg_a=1; seg_b=1; seg_c=1; seg_d=0;
            seg_e=1; seg_f=1; seg_g=1;
            break;
   case 11 : seg_a=0; seg_b=0; seg_c=1; seg_d=1;
             seg_e=1; seg_f=1; seg_g=1;
             break;
   case 12 : seg_a=1; seg_b=0; seg_c=0; seg_d=1;
             seg_e=1; seg_f=1; seg_g=0;
             break;
   case 13 : seg_a=0; seg_b=1; seg_c=1; seg_d=1;
             seg_e=1; seg_f=0; seg_g=1;
             break;
   case 14 : seg_a=1; seg_b=0; seg_c=0; seg_d=1;
             seg_e=1; seg_f=1; seg_g=1;
             break;
   case 15 : seg_a=1; seg_b=0; seg_c=0; seg_d=0;
             seg_e=1; seg_f=1; seg_g=1;
             break;
  }
  count ++;
if(count ==16) count =0;
Delay_ms(1000); // Wait for 1 sec before updating the display
 } while(1);  // Infinite Loop

}

شرح البرنامج

يتم تشغيل ليدات الشرائح من خلال المنفذ Port B لذلك يجب إعدادها كمخارج . يقوم البرنامج بالعد من 0 إلى 15 بفاصل زمنة قدره واحد ثانية ويعاد (يلف) العد مرة أخرى . قيم العداد تعرض على وحدة العرض فى شكل : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F .
العبارة switch….case :
عبارة if جيدة للاختيار بين زوج من المتغيرات ولكنها تكون مرهقة وبطيئة جدا عند تواجد بدائل كثيرة . لهذا الغرض توفر لك لغة السى عبارة switch .
أى أن : عبارة switch مكافئة للعديد من عبارات if-else .


يتم اختبار (مقارنة) المتغير بقائمة من الثوابت constants من نوع الأعداد الصحيحة أو الحروف . عند تواجد توافق (تطابق) يتم تنفيذ مجموعة العبارات statements المصاحبة لهذا الثابت حتى نصل إلى عبارة break . إذا لم يوجد هناك تطابق يتم تنفيذ العبارة المصاحبة لعبارة "الوضع الافتراضى" default . مع ملا حظه ان عبارة default اختيارية .
التعليق على البرنامج
 تنفيذ تعبير switch (count) أى :
تقييم قيمة المتغير count (وهو فى الوضع الابتدائى بصفر) ثم مقارنة نتيجة التقييم بجميع الحالات التى يذكر فى بدايتها كلمة case يليها ثابت وهو هنا من صفر إلى 15  . الحالة التى يتم فيها تطابق التقييم مع المقارنة يتم تحويل مسار البرنامج إليها أى تنفيذ التعليمات التى تتضمنها .وبما أن المتغير count يبدأ بالصفر فإن التطابق يحدث مع   case 0 :  ومن ثم يتم تنفيذ محتويات هذه الحالة وهى : جعل الشرئح المناظرة للرقم صفر فى الحالة المرتفعة 1 حتى تضىء هذه الشرائح لعرض الرقم صفر . تنتهى محتويات الحالة بكلمة break حيث يتم الخروج عبارة switch (count){ …..}  
مع ملا حظه هنا ان كل حاله caseنقوم بأعطاء اوامر لخرج الميكرو بأن يتشكل بحيث يضئ الرقم المطلوب فمثلا الرقم صفر يحتاج ليضئ ان نجعل جميع اطراف الميكرو بواحد ماعدا  Rb6 يمثل الحرف g في السفن سجمنت  كما في الجدول التالي حيث كل رقم يناظره الحروف التي يجب اضائتها في السفن سجمنت وبمعرفه هذه البتات يتم البرمجه علي اساسها كل حاله من حالات ال case



تطوير البرنامج
يلاحظ ان البرنامج كبير نوعا ما ويمكن اختصار هذا البرنامج بالرنامج التالي

في هذا البرنامج نعرف مصفوفه متغيرات بأسمsegmentهذه المصفوفه تعتبر كمسك اي غطاء او بمعني اخر بها اكواد السفن سجمنت من صفر الي حرف f كما بالرنامج والبرنامج الاساسي يتكون من حلقه  من صفر الي 15 يتم فيها عرض بيانات المصفوفه segment بالتتابع علي حسب تغير المتغير x من الصفراالي 15 وكل حلقه تقوم بأستدعاء قيمه المتغير  x من المصفوفه
ملاحظه 
تم عمل الارقام التي بداخل المصفوفه بمساعه بعض الادوات المتوفره داخل الميكر سي وهي الاداه التي بالصوره حيث تسمح لنا بكتابه الرقم المراد عرضه ونأخذ كوده علي حسب نوع السفن سجمنت وهنا نحن نستعمل سفن سجمنت من نوع common cathodكما بالشكل
تجريب التجربه علي Proteus

فيديو التجربه

هناك تعليق واحد :

  1. اللهم صلي على سيدنا محمد وعلى آل سيدنا محمد عدد كل درة الف ألف مرة وسلم وبارك ملئ السموات وملئ الأرض وملئ ما بينهما عدد خلقك ورضا نفسك وزنة ومداد كلماتك يارب وسلم

    ردحذف