8

الدرس الثامن


في الدرس السابق تحدثنا عن مشروع به بعض قواعد الشرط واليوم نجري عليه بعض التعديلات الهامة ونتعلم بعض الجمل الشرطية الاخري .





الدرس الثامن
الأخوة الكرام السلام عليكم ورحمة الله وبركاته
ماذا يتناول هذا الدرس :
1.   معالجة أخطاء المشروع السابق.
2.   الجملة While.
3.   الجملة do ….. while.
4.   الجملة switch.
====================
معالجة أخطاء المشروع السابق
كان لدينا مشروع قد قمت طلبته منكم وأتقدم بالشكر لكل من قام بتنفيذه وان لم يرفعه  لي واقل لمن لم يقم بتنفيذه إذا كنت تنوي عدم تطبيق المشروعات التي يتم عرضها هنا فإليك هذه النصيحة إذا كنت مبتدئ مثلي : بهذه الطريقة أنت لا تتعلم شئ اذهب وإقراء مقالات عن الميكروكنترولر مقصود بها أناس لا يريدون التعلم فهذه الدورة للمجتهدين فقط أم إذا كنت ممن يعتبروا أنفسهم من المتقدمين في مجال الميكروكنترولر فمرحبا بك أستاذي ولي طلب عندك إذا كنت تنوي متابعة هذه الدورة رجاء شارك واصنع المشاريع ربما تصادفك ملاحظات تعرضها هنا وكذلك نقطة تشجيع لمتابعي الدورة .
اكرر شركي واحترام لكل من شارك معنا وقام بتنفيذ التطبيقات المطروحة هنا

v    كان مشروع الدرس السابق حول هذه الدائرة :
v   كان المطلوب :
o      الضغط علي المفتاح الأول يضئ الليد الأول لمده 3 ثواني.
o      الضغط علي المفتاح الثاني يضئ الليد الثاني لمده 5 ثواني.
o      الضغط علي المفتاح الثالث يضئ الليد الثالث لمده 8 ثواني.
o      الضغط علي المفتاح الرابع يضئ الليد الأول لمده 10 ثواني.

v   شكرا لك اللي اجتهد وحاول ينفذه سواء نفذه أو وجهته مشكلة.
v   ده الكود الخاص بالمشروع :
Void main ()
{
Trisa = 0b00001111;
Trisb = 0; portb = 0;
While (1){
If ( porta.f1 == 0 ){ portb.f1 = 1; delay_ms(5000);portb.f1 = 0; }
If ( porta.f2 == 0 ){ portb.f2 = 1; delay_ms(8000);portb.f2 = 0; }
If ( porta.f3 == 0 ){ portb.f3 = 1; delay_ms(10000);portb.f3 = 0; }
}}
v   إذا كنت لم تستطع تنفيذ هذا المشروع جرب الكود السابق قبل استكمال الدرس.
v   يوجد مشكلة في هذا الكود :
عندما يضغط المستخدم علي الضاغط الأول فان الليد يضئ دون أن ينتظر المستخدم حتي يرفع يده ... طيب فين الاندهاش اللي في الموضوع ؟؟
لا أنت مش واخد بالك .. أصل المستخدم لو فضل ضاغط علي المفتاح أكثر من 3 ثواني يبقي الليد هيضئ 6 ثواني ولو ضغط علي المفتاح اكتر من 6 ثواني يبقي الليد هيضئ 9 وهكذا .
بص الصورة دي وأنت تفهم اكتر.
v    سالت مجموعة من الأصدقاء ولقيت ده ردهم


ده مش اسمه حل ده اسمه تيييييييييييييييييييييييييييييييييييت
طيب تعال نشوف الحال  .... جرب الكود ده كده .
Void main ()
{
Trisa = 0b00001111;
Trisb = 0; portb = 0;
While (1){
If ( porta.f1 == 0 ){
while ( porta.f1 == 0 ){}
portb.f1 = 1; delay_ms(5000);portb.f1 = 0; }
If ( porta.f2 == 0 ){
while ( porta.f2 == 0 ){}
 portb.f2 = 1; delay_ms(8000);portb.f2 = 0; }
If ( porta.f3 == 0 ){
while ( porta.f3 == 0 ){}
 portb.f3 = 1; delay_ms(10000);portb.f3 = 0; }
}}
ايون كده هو ده الحل ولا بلاش وwhile  هي اللي حلت المشكلة بس فيه سؤال
هي while حلت المشكلة أزاي وبعدين هي ليها كام وظيفة . ممكن تعرفني عليها ؟!
بس كده ده أنا أعرفك عليه وخليها تعملك Add علي فيس بوك كمان .
========================
الجملة While
الجملة while من أهم التعبيرات الموجودة في لغة C ويمكنك أن تقول لا يوجد تطبيق عملي لا يحتوي عليها .
جملة  whileيمكنها أن تعمل كأي جملة شرطية ويمكنها أن تعمل كحلقة تكرارية تعالي نشوف أزاي ؟!
أولا : جملة while كجملة شرطية :
زيها زى If بس في فيها حاجة مختلفة .... تقوم بتنفيذ مجموعة من الأوامر في حالة تحقق الشرط ويستمر التنفيذ لحين عدم تحقق الشرط ... بزمتكم حد فاهم حاجة ؟!
في بداية تعلم الميكروكنترولر سالت علي احد المنتديات العربية ما الفرق بين if وwhile  وكانت هذه إجابة العضو الوحيد الذي قام بالرد علي !
ما علينا :
تعالوا نشوف الفرق بين if و while :
 عاوز تفهم الفرق اكتر جرب الكودين دول وأنت تعرف الفرق :

الكود الأول :
Void main () {
Char x = 1;
Trisb=0; portb=0;
If (x==1){portb=1;Delay_ms(2000);}
Portb=0
}
الكود الثاني :
Void main () {
Char x = 1;
Trisb=0; portb=0;
while (x==1){portb=1;Delay_ms(2000);}
Portb=0
}
لو فهمت الفرق بين if وwhile  اكتب الفرق بين الكودين اللي فاتوا
ثانيا : جملة while كحلقة تكرارية :
تم تأجيل هذه الجزئية للدرس القادم الذي يتحدث عن الحلقات التكرارية
انتظرونا.....
=====================
الجملة do ….. while
هي ذات ذاتها (حلوة ذات ذاتها دي) جملة while بس فيه فرق بسيط وهو أن الأوامر بتتنفذ الأوامر أول مره سواء تحقق الشرط أو لم يتحقق وفي حالة تحقق الشرط يتم تنفيذ الجملة مرة أخري وهكذا.
بمعني أخر الأمر يتم تنفيذها مرة واحدة علي الأقل وذلك عند عدم تحقق الشرط وعده مرات في حالة تحقق الشرط.
وهذه هي صيغة الجملة :

====================
الجملة switch
الجملة switch من أهم الجمل الشرطية وهي لاختبار أكثر من حالة للشرط عكس سابقتيها if و while
اكتب الكود :
 كون الدائرة :

تأكد من إغلاق جميع المفاتيح ثم أبدا المحاكاة 
 هذه هي جملة switch ولكن هناك بعض الملاحظات :
1.   Break : تستخدم للخروج من الحلقة وفائدتها هنا انه في حالة تحقق احد الشروط يتم تنفيذ الأوامر الخاصة به وعدم استكمال اختبار باقي الشروط .
2.    إذا كان هناك أي جزء مش واضح رجاء أخباري .
انتهي درس اليوم
إلي اللقاء في الدرس القادم
بإذن الله
هناك ما نحتاجه منك :
1.   الدائرة السابقة المستخدمة مع جملة switch احتاج إلي استبدال المفتاح switch بضاغط Button  وعند الضغط عليه يضئ الليد الخاص به (هذه الجزئية بسيط) .. كما نلاحظ انه عند الضغط لا أكثر من مفتاح لا تضئ سوي ليد واحد فانا احتاج أيضا حل لهذه المشكلة فارجوا التفكير فيها (هذه الجزئية تعتبر أكثر احترافية فهل ستفعلها).
2.   تم وضع سؤال مظلل باللون الأصفر فهل من إجابة عليه ؟
3.   انظر لهذه الدائرة :

ما رائيك بها ... أنها جميلة حقا ... اقصد الدائرة علي فكرة !
احتاج إلي كود لهذه الدائرة عند الضغط علي الضاغط الموجود يضاء الليد الأول وإذا ضغط مرة ثانية يضاء الليد الأول والثاني ومرة أخري يضاء الليد الأول والثاني والثالث وهكذا إلي أن يضئ الثماني ليدات والضغطة التالية تطفئ جميع الليدات ونعيد من جديد ... (إذا استطعت تنفيذ هذا المشروع فاعلم انك برنس )
4.   لا تقم بكتابة الاكواد في تعليق لأنها لا تظهر غير واضحة كما أنها قد يكون بها خطاء غير ملحوظ لذا يجب أن يتم وضع ملف السي وكذلك ملف المحاكاة معا في ملف مضغوط ورفعه علي أي موقع ..
5.   في الدرس التالي ربما يكون هناك شئ جديد ولكن لمن يتفاعل معنا فقط لذلك يرجي ذكر اسمك في المشاركة لمعرفة من تكون .
6.   بداية من الدرس بعد القادم سيتم رفع الرقابة عن التعليقات وذلك لزيادة تفاعل المتابعين مع بعضهم البعض للنقاش في المشاريع المعروضة .
7.   إذا كان لديك أي ملاحظات رجاء اذكرها .............
وفق الله الجميع



Blogger Tricks
8 تعليقات

هناك 8 تعليقات :

  1. اخي الفاضل لم اقصد نهائيا اني اخل بالدورة عندما قلت علي منتدي القرية الالكترونية انه يتم طرح درس كل يوم ولكن هذا ما لحظته
    وانا متاسف ....
    وبارك الله فيك

    ردحذف
    الردود
    1. اخي الفاضل جزاك الله خيرا علي محاولة لنشر الدورة ولكن وصلتني رسالة من احد الماتبعين غفر الله له (كانت رسالة لا تحمل معني الاخلاق) وقال لي اني قلت سوف اطرح كل يوم درس ... هذا ما ضايقني فانا لم اقل ذلك!
      جزاك الله خيرا مرة اخري

      حذف
  2. السلام عليكم
    هذا هو المشروع
    http://www.mediafire.com/?4qr38l40ao94dqe
    جزاك الله خيراً

    ردحذف
    الردود
    1. انت اول من شارك بالمشروع لذا فانت افضل المتابعين استمر علي ذلك

      حذف
  3. جزاك الله خير يا بشمهندس
    ياريت حضرتك توضح اكثر جمله switch
    وتوضح كمان حل الدائرة الاخيرة

    ردحذف
  4. حاضر سيتم التوضيح اكتر في الدرس العاشر

    ردحذف
  5. السيد أحمد
    سؤال بخصوص الدرس التاسع التمرين الأول:
    هل يجب أن ينتهي الضوء الأول من الإضائة ثم ينتقل إلى الضوئ الثاني.
    أم أن الضوئين يجب أن يضومضوا معا كل حسب الزمن الذي وضعته.
    وشكرا لجهودك

    ردحذف
    الردود
    1. ينتهي الضوء الأول من الإضاءة ثم ينتقل إلى الضوء الثاني

      حذف