تدريب
المقدمة : Button وهو لعرض استخدام مكتبة المفاتيح الضاغطة Button Library .هذا البرنامج يعرض استخدام مفتاح بلوحة متصل بالمنفذ PORTB كمدخل على الطرف RB0 . عند كل تغير (تحول انتقال) فى حالة الطرف RB0 من الواحد (1) إلى الصفر يتم عكس حالة جميع خانات المنفذ PORTC .- الميكروكونترولر المستخدم PIC16F887 .
- تردد المذبذب HS, 08.0000 MHz
- المترجم mikroC PRO for PIC
- يتم التحكم فة إضاءة وإطفاء الليدات المتصلة بالمنفذ PORTC .
الدائرة الكهربية :
البرنامج :
التعليق على البرنامج :
1- الإعلان عن خانةbit كعلم باسم oldstate "الحالة القديمة"لحفظ حالة المفتاح ومقارنتها بحالة أجدد منها :
bit oldstate; // Old state flag
2- الدالة الرئيسية :
void main() {
3- إعداد المنافذ :- إعداد جميع الأطراف التناظرية كمداخل / مخارج رقمية :
ANSEL = 0; // Configure AN pins as digital I/O
ANSELH = 0;- إعداد الطرف الأول من المنفذ PORT B كمدخل (لاحظ طريقة استخدام خانة مفردة ):
TRISB0_bit = 1; // set RB0 pin as input
- إعداد جميع أطراف المنفذ PORT C كمخارج :
TRISC = 0x00; // Configure PORTC as output
- القيمة الابتدائية للمنفذ PORTC = 0xAA = 0b10101010 (مثال لنموذج )
PORTC = 0xAA; // Initial PORTC value
- الحالة الابتدائية للخانة هى الصفر لتهيئتها للعمل
oldstate = 0;
4- بدء إنشاء حلقة do{….}while الغير منتهية
do {
- كشف حالة المفتاح باستخدام عبارة الشرط : هل المفتاح منضغط ؟
if (Button(&PORTB, 0, 1, 1)) { // Detect logical one
- إذا كان المفتاح منضغط (تحقق الشرط) عندئذ نحفظ حالتة بالخانة oldstate حتى يمكن مقارنتها بحالته إذا تغيرت .
oldstate = 1; // Update flag
}
- إكتشاف الانتقال من الواحد إلى الصفر ، هل يحدث ذلك ؟ هل نتيجة عملية AND (&&) بين الخانة oldstate (فى الحالة المرتفعة) وحالة المفتاح (فى الحالة المنخفضة إى غير مفعل أى تم تحريرة) تكون (1)true أو (0)false ؟
if (oldstate && Button(&PORTB, 0, 1, 0)) { // Detect one-to-zero transition
- تحقق الشرط لأن كل من جانبى المؤثر && متحقق عندئذ يتم عكس حالة أطراف المنفذ PORTC و عودة الخانة oldstate إلى حالة الصفر للتجهيز لحالة قادمة .
PORTC = ~PORTC; // Invert PORTC
oldstate = 0; // Update flag
}
} while(1); // Endless loop
}