منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو :

اذهب الى الأسفل

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : Empty مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو :

مُساهمة من طرف Admin الإثنين مارس 03, 2014 10:17 pm


مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو :
المشروع الأول : وميض ليد Flashing LED :
وصف المشروع :
لعل هذا المشروع هو أبسط مشروع يمكن إنشاؤه . فى هذا المشروع ، يتم توصيل ليد إلى البت bit 0  للمنفذ PORT B (RB0)  للميكروكونترولر PIC18F2550 (يمكن استخدام أى ميكروكونترولر آخر) . تردد الكريستال المستخدم  8MHz . الليد تومض بفترة زمنية واحد ثانية .
مخطط الدائرة الكهربائية :

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 117


منطق وصف البرنامج :
• بداية البرنامج  .
• تهيئة المنفذ .
• بداية حلقة لا نهائية .
• توصيل الليد .
• الانتظار واحد ثانية .
• فصل الليد . الانتظار واحد ثانية .
• نهاية الحلقة النهائية والعودة إلى بدايتها.
• نهاية البرنامج .  

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 217



البرنامج :


الكود:


/********************************************************************
Project1-a
FLASHING LED
In this project an LED is connected to bit 0 of PORT B (RB0) of a PIC18F2550 type microcontroller (any other PIC microcontroller can also be used in this project).
The microcontroller is operated from an 8MHz crystal.
The LED is flashed continuously with 1 second intervals.
*******************************************************************/
void main()
{
ADCON1 = 0x0F ; // Configure RB0 (AN12) as digital
TRISB = 0; // Configure PORT B as outputs
for(;;) // FOREVER loop
{
PORTB.RB0 = 1; // Turn ON LED
Delay_Ms(1000); // Wait 1 second
PORTB.RB0 = 0; // Turn OFF LED
Delay_Ms(1000); // Delay 1 second
}
}




ملحوظة :
• تم الوصول إلى بتات المنفذ بشكل منفصل باستخدام الصيغة PORTB.RB0 ، كما يمكن الوصول إليها باستخدام الصيغة PORTB.F0 ، أو الصيغة RB0_bit .
• لكتابة (تخصيص) قيمة لهذه البت تم استخدام الصيغة PORTB.RB0 = 1 ، يمكن أيضا استخدام الصيغة   LATB.B0 = 1.  

Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : Empty رد: مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو :

مُساهمة من طرف Admin الإثنين مارس 03, 2014 10:25 pm

تحسين البرنامج :



يمكن جعل البرنامج السابق أكثر سهولة فى القراءة والتتبع والفهم إذا تم استخدام عبارات توجيه المعالج ‘#define’ كما يلى :







الكود:


/********************************************************************

Project1-b

FLASHING LED

------------------

In this project an LED is connected to bit 0 of PORT B (RB0) of a PIC18F2550 type microcontroller (any other PIC microcontroller can also be used in this project).

The microcontroller is operated from an 8MHz crystal. The LED is flashed continuously with 1 second intervals.

In this version of the program "define" pre-processor statements are used to make the program more readable.

************************************************************/

#define LED PORTB.F0                  // LED is bit 0 of PORT C

#define ON 1

#define OFF 0

#define Delay_1_second Delay_Ms(1000)

 

void main()

{

ADCON1 = 0x0F ;                            // Configure RB0 (AN12) as digital

TRISB = 0;                                        // Configure PORT B as outputs

for(;;)                                                // FOREVER loop

{

LED = ON;                            // Turn ON LED

Delay_1_second;                  // Wait 1 second

LED = OFF;                          // Turn OFF LED

Delay_1_second;                  // Delay 1 second

}

}


Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : Empty رد: مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو :

مُساهمة من طرف Admin الإثنين مارس 03, 2014 10:31 pm




تعديل البرنامج السابق لمحاكاة إضاءة المنار (الفنار) Lighthouse:
فى البرنامج السابق ، تم عمل وميض بسيط لليد بفترة زمنية واحد ثانية . يمكن تعديل هذا البرنامج ، على سبيل المثال لمحاكاة وامض أضواء المنار (الفنار) البحرى بغرض التعليم . أضوار المنار متعددة ولها خصائص مختلفة ، مثل الأضواء المتناوبة ، والثابتة ، والوامضة ، وسريعة الوميض وغيرها .
كمثال على ذلك سوف نقوم بتعديل البرنامج لمحاكاة إشارة أضواء المنارة المعروفة باسم VQ(3) 5s . تتكون هذه الإشارة من 3 ومضات قصيرة ، كل منها توصيل 500 ملى ثانية وفصل 100ملى ثانية ، وتتكرر كل 5 ثوانى كما فى الشكل التالى :

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 316



لاحظ أن فترة الإشارة هى 5 ثوانى . الثلاث ومضات تأخذ 1.7 ثانية ، وتترك 3.3 ثانية قبل أن يبدأ الوميض من جديد . يحتوى البرنامج على "حلقة متداخلة" ، حيث يتم تكرار الحلقة الداخلية 3 مرات ، وتكرار الحلقة الخارجية إلى الأبد .
منطق وصف البرنامج :
• بداية البرنامج .
• تهيئة المنافذ .
• بداية حلقة لا نهائية .
• حلقة تكرار 3 مرات .
• توصيل الليد .
• الانتظار 500 ملى ثانية .
• فصل الليد .
• الانتظار 100 ملى ثانية .
• نهاية حلقة تكرار 3 مرات .
• نهاية الحلقة الانهائية .
• نهاية البرنامج .

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 416



البرنامج :


الكود:


/********************************************************************
Project1-c
FLASHING LIGHTHOUSE LED
------------------------------------------
In this project an LED is connected to bit 0 of PORT B (RB0) of a PIC18F2550 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 LED simulates the flashing of a lighthouse light having the
characteristics:
VQ(3) 5s where the light flashes 3 times with 500ms ON time and 100ms OFF time with a period of 5 seconds.
*****************************************************************/
void main()
{
unsigned char i;
ADCON1 = 0x0F ;      // Configure RB0 (AN12) as digital
TRISB = 0;          // Configure PORT B as outputs
for(;;)             // FOREVER loop
{
for(i= 0; i < 3; i++)       // Do 3 times
{
PORTB.RB0 = 1;       // Turn ON LED
Delay_Ms(500);       // Wait 500 milliseconds
PORTB.RB0 = 0;       // Turn OFF LED
Delay_Ms(100);       // Wait 100 milliseconds
}
Delay_Ms(3300);       // Wait 3.3 seconds
}
}



Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : Empty رد: مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو :

مُساهمة من طرف Admin الثلاثاء مارس 04, 2014 12:05 pm


المشروع الثانى : عداد ثنائى تصاعدى باستخدام الليدات :
وصف المشروع :
هذا المشروع أيضا بسيط ، حيث يتم توصيل 8 ليدات بالمنفذ PORT B للميكروكونترولر . إضاءة الليدات تشكل عداد ثنائى تصاعدى بفاصل واحد ثانية بين كل عدة . الشكل التالى يبين النموذج (النمط) الذى سيتم عرضه بواسطة الليدات :

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 118



مخطط الدائرة الكهربائية :

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 218


منطق وصف البرنامج :
• بداية البرنامج .
• إعلان عن متغير العداد ، و تهيئة المنفذ .
• تصفير العداد .
• بداية حلقة غير منتهية .
• إرسال قيمة العداد إلى المنفذ .
• الانتظار واحد ثانية .
• تزايد العداد .
• نهاية الحلقة الغير منتهية .
• نهاية البرنامج .

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 317



البرنامج :
الكود:



/********************************************************************
Project2-a
BINARY COUNTING UP LEDs
-----------------------------------------
In this project 8 LEDs are connected to PORT B of a PIC18F2550 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 count up in binary from 0 to 255 and then back to 0 with one second delay between each count.
****************************************************************/
void main()
{
unsigned char Cnt = 0;       // Declare and initialise Cnt
ADCON1 = 0x0F ;         // Configure PORT B as digital
TRISB = 0;             // Configure PORT B as outputs

for(;;)                // FOREVER loop
{
PORTB = Cnt;          // SendCnt to PORT B
Delay_Ms(1000);          // Delay 1 second
Cnt++;             // Increment Cnt
}

}



• فى بداية البرنامج ، يتم إعلان متغير العداد Cnt وتعينه بصفر (0) . لاحظ أن جميع المتغيرات المستخدمة فى برامج لغة السى يجب أن يتم إعلانها فى بداية البرنامج .
• بعد ذلك يتم تهيئة أطراف المنفذ PORT B لتكون جميعها مداخل /مخارج رقمية .
• يتم إنشاء حلقة غير منتهية ، بداخل هذه الحلقة يتم إرسال محتويات العداد (المتغير Cnt ) إلى المنفذ PORT B .
• ثم الانتظار (التأخير) واحد ثانية .
• وتزايد محتويات العداد ، المتغير Cnt ، بواحد .
• ثم تكرار الحلقة الغير منتهية إلى الأبد .

ملاحظات على المتغير unsigned char Cnt:
1- لماذا نحتاج إلى المتغير ؟
نحتاج إلى كتابة (إرسال) قيمة إلى المنفذ PORT B ليتم عرضها على أطرافه كمخارج ، وأثناء عرضها نحتاج إلى تعديل هذه القيمة ، هذا التعديل يجب أن يتم فى مكان آخر بالذاكرة ، هذا المكان هو المتغير Cnt . ومن ثم نكتب صفر إلى هذا المتغير Cnt = 0 ثم ننسخه إلى المنفذ PORTB = Cnt ليعرضه كمخارج ، وأثناء العرض يتم التعديل فى المتغير ، تزايد بواحد ، Cnt++ ليكون Cnt = 1 ، وتتكر العملية بتكرار الحلقة الغير منتهية .
2- نوع وحجم المتغير unsigned char Cnt :
هذا المتغير نوع حرف char أى سعته (حجمه) واحد بايت أى 8 بت ، لذلك فإن محتوياته تكون من 0 إلى 255 ، وبالتالى سوف يتزايد فى كل تكرار للحلقة بواحد حتى يمتلء ( 0,1,2,3,……255) عند التكرار التالى سوف يتم تصفيره تلقائيا ويبدأ من الصفر مرة أخرى ليحقق الغرض من هذا البرنامج على وجه التحديد . كما يمكننا استخدام الصيغة التالية :

الكود:


void main()
{
unsigned char Cnt = 0;       // Declare and initialise Cnt
ADCON1 = 0x0F ;         // Configure PORT B as digital
TRISB = 0;             // Configure PORT B as outputs

for(;;)                // FOREVER loop
{

for(Cnt=0;Cnt<=255;Cnt++)
{
PORTB = Cnt;          // SendCnt to PORT B
Delay_Ms(1000);          // Delay 1 second
}

}

}


Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : Empty رد: مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو :

مُساهمة من طرف Admin الثلاثاء مارس 04, 2014 1:32 pm

تدريب :

تعديل البرنامج ليعد تنازليا بعد أن يصل إلى 255 .




الكود:


void main()

{

unsigned char Cnt = 0;                      // Declare and initialise Cnt

ADCON1 = 0x0F ;                            // Configure PORT B as digital

TRISB = 0;                                        // Configure PORT B as outputs

 

for(;;)                                                // FOREVER loop

{

 

for(Cnt=0;Cnt<255;Cnt++)

{

PORTB = Cnt;                                  // SendCnt to PORT B

Delay_Ms(1000);                              // Delay 1 second

}

 

for(Cnt=255;Cnt>0;Cnt--)

{

PORTB = Cnt;                                  // SendCnt to PORT B

Delay_Ms(1000);                              // Delay 1 second

}

 

 

 

 

}

 

}


Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : Empty رد: مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو :

مُساهمة من طرف Admin الثلاثاء مارس 04, 2014 10:59 pm



المشروع الثالث :
إضاءة الليدات الدوارة Rotating LEDs :
فى هذا المشروع يتم توصيل 8 ليدات بأطراف المنفذ PORT B للميكروكونترولر كما فى المشروع الثانى . يتم توصيل الليدات فى الاتجاه من اليسار إلى اليمين ( من البت bit 0  تجاه البت bit 7 ) فى شكل دائرى ، مع تأخير واحد ثانية بين كل خرج حيث تكون ليد واحدة فقط فى حالة توصيل فى أى وقت . إذا تم ترتيب الليدات فى شكل دائرى ، فإن النموذج المعروض بالليدات سوف يكون كما فى الشكل التالى :


مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 119

مخطط الدائرة الكهربائية :

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 219



وصف منطق البرنامج :
• بداية البرنامج .
• إعلان وتخصيص واحد (1) لمتغيرالعداد كقيمة ابتدائية وهو ما يعنى أضاءة الليد المتصل بالطرف RB0 (bit 0)  ، وإعداد المنفذ .
• بداية حلقة غير منتهية .
• إرسال (كتابة) محتويات متغير العداد إلى إلى المنفذ .
• الانتظار (التأخير) واحد ثانية .
• إزاحة (زحزحة)  محتويات متغير العداد إلى اليسار بت واحدة فى كل تكرار.
• إختبار : هل محتويات العداد بصفر ؟ ( تم الزحزحة حتى البت الأخيرة bit 7  ) .  
• إذا كانت بصفر يتم إعادة تخصيص القيمة الابتدائية (1) لمتغير العداد .    

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 318




البرنامج :


الكود:


/********************************************************************
Project3-a
ROTATING LEDs
------------------------
In this project 8 LEDs are connected to PORT B of a PIC18F2550 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
ADCON1 = 0x0F ; // Configure PORT B as digital
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 . . .
 

Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : Empty رد: مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو :

مُساهمة من طرف Admin الثلاثاء مارس 04, 2014 11:11 pm

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 417


تعديل البرنامج :
البرنامج السابق يعطى دوران لليدات جهة اليسار . الآن سوف نعدل البرنامج بحيث تدور الليدات فى كلا الجهتين اليسرى واليمنى .
فى البرنامج المعدل ، بعد أن تضىء "آخر ليد" أثناء الدوران فى أحد الاتجاهين ، سوف يتم تغيير اتجاه الدوران . لذلك ، على سبيل المثال ، أثناء الدوران  "من اليمين إلى اليسار" ، إذا أضاءى الليد المتصلة بالطرف RB7 ، عندئذ سوف يتم تغيير اتجاه الدوران إلى "من اليسار إلى اليمين" ، وسوف تضىء الليد المتصلة بالطرف RB6 بعد ذلك ، وهكذا .

وصف منطق البرنامج :
 





البرنامج :


الكود:



/********************************************************************
Project3-b
ROTATING LEDs
------------------------
In this project 8 LEDs are connected to PORT B of a PIC18F2550 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 right to left (RB0 through RB1 and so on) and left to right (RB7 through RB6 and so on) with one second delay between each output.

*****************************************************************/
void main()
{

unsigned char Cnt = 1; // Initialise Cnt
unsigned char Mode = 0; // Mode=0 right-to-left
ADCON1 = 0x0F ; // Configure PORT B as digital
TRISB = 0; // Configure PORT B as outputs

for(;;) // FOREVER loop
{

PORTB = Cnt; // Send Cnt to PORT B
Delay_Ms(1000); // Delay 1 second

if(Mode == 0)
{
Cnt = Cnt << 1; // Left shift Cnt
if(Cnt == 0) // Last LED lit
{
Cnt = 64;
Mode = 1; // Change direction
}
}

else
{
Cnt = Cnt >> 1; // Right shift Cnt
if(Cnt == 0) // Last LED lit
{
Cnt = 2;
Mode = 0; // Change direction
}
}
}
}




• تم إعلان وتخصيص متغير يسمى Cnt .
• وإعداد أطراف المنفذ PORT B كمداخل / مخارج رقمية .
• بالإضافة إلى ذلك تم استخدام متغير يسمى Mode ، والذى يحدد اتجاه الدوران . عندما يكون
Mode = 0  ، تدور الليدات من من اليمين إلى اليسار ، وعندما يكون Mode = 1  / تدور الليدات من اليسار إلى اليمين .
• عندما يضىء آخر ليد فى الصف ، يتم تغيير اتجاه الدورات عن طريق تعيين قيمة جديدة لمتغير العداد Cnt وتغيير قيمة Mode . ولذلك ، فإن متغير العداد Cnt يأخذ القيم  :

الكود:

1 2 4 8 16 32 64 128 64 32 16 8 4 2 1 2 . .

.

Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : Empty رد: مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو :

مُساهمة من طرف Admin الأربعاء مارس 05, 2014 6:34 pm



المشروع الرابع :
عجلة يوم الحظ السعيد :
وصف المشروع :

• فى هذا المشروع يتم توصيل 7 ليدات إلى أطراف المنفذ PORT B(RB0-RB6) للميكروكونترولر . بالإضافة إلى توصيل مفتاح ضغط START بالطرف RB7 . يتم ترقيم الليدات بأيام الإسبوع كما هو مبين بالشكل التالى :

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 120


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

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 220


مخطط الدائرة الكهربائية :

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 319



بشكل عام ، يمكن توصيل مفتاح الزر الضاغط إلى أطراف الدخل/الخرج للميكروكونترولر باستخدام طريقتين : "فعال فى الحالة المنخفضة" Active Low و "فعال فى الحالة المرتفعة" .
الشكل التالى يبين طريقة "فعال فى الحالة المنخفضة" :

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 418


فى هذه الحالة عندما لا يتم الضغط على المفتاح ، فإن طرف الدخل للميكروكونترولر يكون عند المنطق "المرتفع" HIGH . الضغط على المفتاح يسحب هذا الطرف إلى المنطق "المنخفض" LOW ، وهذا التغير فى الحالة يمكن تحديده (التعرف علية) عن طريق البرنامج .
الشكل التالى يبين طريقة "فعال فى الحالة المرتفعة" :

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 515

فى هذه الحالة عندما لا يتم الضغط على المفتاح ، فإن طرف الدخل للميكروكونترولر يكون عند المنطق "المنخفض" LOW. الضغط على المفتاح يسحب هذا الطرف إلى المنطق "المرتفع" HIGH ، وهذا التغير فى الحالة يمكن تحديده (التعرف علية) عن طريق البرنامج .


فى مخطط الدائرة الكهربائية للمشروع يتم توصيل 7 ليدات لأطراف المنفذ PORT B من RB0 إلى RB6 . ويتم توصيل مفتاح الزر الضاغط START إلى الطرف RB7 فى وضع "فعال فى الحالة المنخفضة" Active Low . فى هذا الوضع ، يكون طرف دخل الميكروكونترولر فى الوضع العادى عند المنطق "المرتفع" HIGH . عند الضغط على المفتاح الضاغط ، يتحول طرف الدخل إلى حالة المنطق "المنخفض" LOW .
وصف منطق البرنامج :

مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 616

البرنامج :


الكود:


/********************************************************************

Project4-a
WHEEL OF LUCKY DAY
---------------------------------
In this project 7 LEDs are connected to PORT B of a PIC18F2550 type microcontroller (any other PIC microcontroller can also be used in this project). In addition, a push-button switch is connected to bit 7 of PORT B (RB7). The microcontroller is operated from an 8MHz crystal.
In this project the LEDs are constructed in the form of a circle and the days of the week are written next to each LED. When the push-button switch is pressed the LEDs start rotating fast. Pressing the button stops while only one LED is lit. The day name corresponding to this LED is your lucky day!.
******************************************************************/
#define STRT PORTB.RB7
void main()
{
unsigned char Cnt = 1;       // Initialise Cnt
ADCON1 = 0x0F ;         // Configure PORT B as digital
TRISB = 0x80 ;          // RB0 - RB6 output, RB7 input
PORTB = 0;
for(;;)                // DO FOREVER
{
while(STRT == 1);          // Wait until START is pressed
while(STRT == 0);          // Wait until button is released
for(;;)                // FOREVER loop
{
PORTB = Cnt;      // Send Cnt to PORT B
Delay_Ms(50);       // Delay 50ms
Cnt = Cnt << 1;       // Left shift Cnt
if(Cnt == 0)Cnt = 1;

if(STRT == 0)break;    // If button is pressed
}
while(STRT == 0);       // Wait until button is released
Delay_Ms(1000);       // Wait 1 second
}
}



• فى بداية البرنامج ، يتم تعريف الطرف RB7 على أنه START ، كما يتم إعلان تهيئة المتغير Cnt بواحد كقيمة ابتدائية ، وإعاداد الأطراف من RB0 إلى RB6 كمخارج رقمية والطرف RB7 كمدخل رقمى .
• بعد ذلك يتم إنشاء حلقة غير منتهية وينتظر البرنامج حتى يتم الضغط على المفتاح الضاغط (START==1) ثم ينتظر حتى يتم تحرير المفتاح ( SART==0).
• بمجرد أن يتم الضغط على المفتاح الضاغط ثم تحريره ، يتم تشكيل "حلقة داخلية" ، حيث يتم إضاءة الليدات وتدور بسرعة كبيرة . ، مع تأخير زمنى 50 ms بين كل خرج .
• داخل حلقة for الداخلية هذه ، يقوم البرنامج باختبار ما إذا كان المفتاح مضغوط أو لا
(START ==0) .
• عند الضغط على المفتاح ، يقفز البرنامج خارج الحلقة الداخلية وينتظر حتى يتم تحرير المفتاح . عند هذه النقطة ، آخر ليد يصل فى حالة توصيل ON .
• بعد تأخير واحد ثانية ، تتكرر العملية السابقة حيث ينتظر البرنامج من أجل الضغط على المفتاح مرة أخرى عند بداية البرنامج .

Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

- مواضيع مماثلة

 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى