المشروع الثالث :
إضاءة الليدات الدوارة Rotating LEDs :
فى هذا المشروع يتم توصيل 8 ليدات بأطراف المنفذ PORT B للميكروكونترولر كما فى المشروع الثانى . يتم توصيل الليدات فى الاتجاه من اليسار إلى اليمين ( من البت bit 0 تجاه البت bit 7 ) فى شكل دائرى ، مع تأخير واحد ثانية بين كل خرج حيث تكون ليد واحدة فقط فى حالة توصيل فى أى وقت . إذا تم ترتيب الليدات فى شكل دائرى ، فإن النموذج المعروض بالليدات سوف يكون كما فى الشكل التالى :
مخطط الدائرة الكهربائية :
وصف منطق البرنامج :
• بداية البرنامج .
• إعلان وتخصيص واحد (1) لمتغيرالعداد كقيمة ابتدائية وهو ما يعنى أضاءة الليد المتصل بالطرف RB0 (bit 0) ، وإعداد المنفذ .
• بداية حلقة غير منتهية .
• إرسال (كتابة) محتويات متغير العداد إلى إلى المنفذ .
• الانتظار (التأخير) واحد ثانية .
• إزاحة (زحزحة) محتويات متغير العداد إلى اليسار بت واحدة فى كل تكرار.
• إختبار : هل محتويات العداد بصفر ؟ ( تم الزحزحة حتى البت الأخيرة bit 7 ) .
• إذا كانت بصفر يتم إعادة تخصيص القيمة الابتدائية (1) لمتغير العداد .
البرنامج :
كود:
/********************************************************************
Project3-a
ROTATING LEDs
------------------------
In this project 8 LEDs are connected to PORT B of a PIC16F877A type microcontroller (any other PIC microcontroller can also be used in this project). The microcontroller is operated from an 8MHz crystal.
In this project the LEDs rotate left (RB0 through RB1 and so on) with one second delay between each output.
*******************************************************************/
void main()
{
unsigned char Cnt = 1; // Initialise Cnt
CMCON = 0x07; // To turn off comparators
ADCON1 = 0x06; // To turn off analog to digital converters
TRISB = 0; // Configure PORT B as outputs
for(;;) // FOREVER loop
{
PORTB = Cnt; // Send Cnt to PORT B
Delay_Ms(1000); // Delay 1 second
Cnt = Cnt << 1; // Shift left 1 digit
if(Cnt == 0)Cnt = 1; // If the last LED re-start
}
}
• فى بداية المشروع ، يتم إعداد متغير العداد Cnt للوضع الابتدائى Cnt = 1 .
• كما يتم إعداد المنفذ PORT B كمداخل / مخارج رقمية (كما سبق) .
• بعد ذلك يتم إنشاء حلقة غير منتهية ، بداخلها نبدأ بإرسال محتويات متغير العداد Cnt إلى المنفذ PORT B .
• بعد واحد ثانية تأخير ، يتم زحزحة محتويات متغير العداد جه اليسار بت واحدة Cnt = Cnt << 1 .
• يتم اختبار تصفير محتويات متغير العداد بعد عملية الإزاحة ، وإعادة تهيئته للوضع الابتدائى .
• تكرار الحلقة إلى الأبد .
• النتيجة أن متغير العداد Cnt ، وبالتالى PORT B ، يأخذ القيم 1 2 4 8 16 32 64 128 1 2 . . .