البرنامج الأول :
كما فى الشكل : ميكروكونترولر PIC متصل بمفتاح ضغط push-button وليد LED .
الغرض :
فى كل مرة يتم فيها الضغط على المفتاح الضاغظ وتحريره تتغير الحالة المنطقية لليد بين التوصيل on والفصل off مع تحديد زمن التأخير لمنع الارتدادات بقيمة 20 ملى ثانية .
void main ()
{
trisd.f0 = 0; //إعداد الطرف كمخرج
trisb.f0 = 1; // إعداد الطرف كمدخل
do {
if (Button (& PORTB, 0, 20, 0)) //إذا تم الضغط على المفتاح(العائد بواحد) يتم تنفيذ الأوامر التالية
{
delay_ms (200); //التأخير 200 ملى ثانية
portd.f0= ~ pord.f0; // عكس حالة الليد
}
} While (1);
}
فى البرنامج السابق: - تم إعداد الطرف RB0 كمخرج trisd.f0 = 0; لاتصاله بالليد .
- وإنشاء حلقة do-while غير منتهية حتى يعمل الميكروكونترولر بصفة مستمرة .
- برمجة دالة المفتاح كما فى الشكل التالى :
شرح الجزء التالى من البرنامج :
if (Button (& PORTB, 0, 20, 0)) //إذا تم الضغط على المفتاح(العائد بواحد) يتم تنفيذ الأوامر التالية
{
delay_ms (200); //التأخير 200 ملى ثانية
portd.f0= ~ pord.f0; // عكس حالة الليد
}
عند الضغط على المفتاح S1 يتم تنفيذ دالة المفتاح وتعود (العائد) return بالقيمة "واحد 1 " true بينما فى حالة عدم الضغط على المفتاح يكون عائده هو الصفر 0 = false .
أى أنه عند الضغط على المفتاح يكون عائد دالة المفتاح true وبالتالى يكون نتيجة شرط if هو true ويتم تنفيذ تعليمات جملة if الموجودة بين القوسين .
البرنامج السابق به مشكلة , لأنه عندما " لا نحرر الضغط من على المفتاح " تكون نتيجة شرط if بالقيمة true دائما وسوف يستمر تنفيذ التعليمات فى الحلقة الغير منتهية مرارا وتكرارا وتكون النتيجة توصيل on وفصل off الليد باستمرار أثناء الضغط على المفتاح .
البرنامج الثانى :