إخواني الاعزاء الراغبين في تعلم واحتراف برمجة الميكروكنترولر .. ارحب بكم من جديد في هذه الدورة التعليمية وأقدم لكم بعض التمارين الخاصة بالدرس الأخير ..
==============================================
السؤال الأول : قم بكتابة كود يؤدي الوظيفة التالية :
في بداية البرنامج يقوم بإظهار الرقم صفر على السفن سيجمنت الموصلة بالأطراف من b0 إلى b3 عن طريق مفكك ترميز .
عند الضغط على السويتش الموصل بالطرف a0 يزداد الرقم الظاهر على السفن سيجمنت . علما بأن الأرقام المسموح بها من صفر إلى تسعة فقط .
عند الضغط على السويتش الموصل بالطرف a1 يضيء نفس الرقم الظاهر على السفن سيجمنت ويطفئ مرتين متتاليتين بسرعة .
عند الضغط على السويتش الموصل بالطرف a2 ينقص الرقم الظاهر على السفن سيجمنت ثم يضيء ويطفئ مرتين متتاليتين بسرعة ايضا .
عند الضغط على السويتش الموصل بالطرف a3 تصبح القيمة الظاهرة على السفن سيجمنت صفر مع إضاءة واطفاء للرقم مرتين متتاليتين وبسرعة .
(أقصد بكلمة بسرعة انها تتم في زمن اقل من الثانية )
ملحوظة مهمة : يجب أن يكون الكود مصمم بحيث عند الضغط على السويتش يستجيب البرنامج مرة واحدة ولا يكرر اي عملية طالما كنا ضاغطين على السويتش .
المهم في هذا السؤال هو تنسيق الكود بإتقان وباستخدام الدوال . بحيث لا يكون هناك تكرار في الكود مطلقا .
==============================================
السؤال الثاني : قم بكتابة نفس البرنامج السابق مع تعديل بسيط وهو انه لو كنا ضاغطين على السويتش فإن العملية التي يؤديها هذا السويتش تتكرر كل 200 ملي ثانية .
==============================================
السؤال الثالث : انظر للكود التالي وقم بعمل التعديلات اللازمة عليه ليكون متضمنا لاستخدام الدوال و بحيث لا يحتوي على تكرار .
كود:
void main()
{
trisb=0;
trisa=0xff;
while(1)
{
portb=0b00000001;
delay_ms(300);
portb=0b11111110;
delay_ms(300);
portb=0b00000010;
delay_ms(300);
portb=0b11111101;
delay_ms(300);
portb=0b00000100;
delay_ms(300);
portb=0b11111011;
delay_ms(300);
portb=0b00001000;
delay_ms(300);
portb=0b11110111;
delay_ms(300);
portb=0b00010000;
delay_ms(300);
portb=0b11101111;
delay_ms(300);
portb=0b00100000;
delay_ms(300);
portb=0b11011111;
delay_ms(300);
portb=0b01000000;
delay_ms(300);
portb=0b10111111;
delay_ms(300);
portb=0b10000000;
delay_ms(300);
portb=0b01111111;
delay_ms(300);
}
}
يجب اختصار هذا الكود قدر الامكان ويفضل استخدام الدوال ايضا .
==============================================
السؤال الرابع (سؤال المشروع) :
سيكون في كل تمرين بإذن الله سؤال خاص بطلب مشروع معين .
هنا في هذه المرة المطلوب عمل
مشروع لإشارة المرور .
ثلاثة اشارات . كل اشارة مرور بها لونين فقط الأحمر والأخضر
تكون اشارة واحدة فقط هي الخضراء وباقي الاشارات لهم اللون الاحمر
ثم تتحول هذه الاشارة للون الاحمر بعد
مدة معينة والاشارة الثانية هي التي ستكون خضراء وهكذا ..
الميزة المهمة التي يجب اضافته أن يكون هناك سويتشين يمكنوا رجل المرور من زيادة ونقصان المدة الزمنية التي تكون فيها الاشارة خضراء ثم تتحول للون الاحمر
ويجب ان تكون هذه المدة إما خمسة ثواني أو 10 ثواني او 15 ثانية أو 20 ثانية
يتنقل بين هذه القيم باستخدام سويتشين سويتش ينتقل لقيمة اعلى وسويتش ينتقل لقيمة اقل .
يحبذ أن يكون المشروع به بعض الرسومات التوضيحية وشرح لكيفية عمل الدائرة وموجز بسيط عن الكود لكي يستفيد الآخرون فيما بعد لو اطلعوا على المشروع.
ارجو أن يشتعل التنافس هذه المرة .. وأن يكون التكاسل قد ولى هاربا وذهب بعيدا عن جميع الاعضاء وجميع المطلعين والمشاركين بهذه الدورة . وتأكدوا ان من يبذل الجهد سيستفيد اكثر .
السؤال الخامس (سؤال قوي للمتميزين ولمن يريد التميز) :
قم بعمل نفس المشروع السابق مع جعل عدد اشارات المرور هو ثمانية اشارات ووجود خمس سويتشات اضافية كل سويتش خاص باشارة معينة بحيث لو ضغطنا على هذا السويتش يجعل الاشارة خضراء ولو ضغطنا عليه مرة اخرى يجعلها حمراء ... كل سويتش خاص باشارة كما ذكرت .
ويجب استخدام Pic16f84 ولا يمكن استخدام نوع اخر ولكن يمكن استخدام دوائر متكاملة اضافية
يمكن للجميع المشاركة في الحل في موضوع مستقل
وليس هنا
ولقد قمت بعمل موضوع جديد يتضمن هذه التمارين لمن يريد النقاش فيها والتعاون في حلها .
وفقنا الله جميعا لما يحب ويرضى ورزقنا وإياكم العلم النافع والعمل الصالح
والسلام عليكم ورحمة الله وبركاته