جمل If المتتالية التي استخدمتها .. لم تكن بحاجة إليها . لأنك من المفترض أنك تستخدم المكتبة الخاصة بـ keypad حيث قمت بكتابة الأمر
لذلك كان أمامك حلين : إما أن تختبر المتغير kp وعلى حسب قيمته يتم معرفة أي المفاتيح هي التي ضغط عليها . وحينها لن تحتاج لجمل if التي تختبر حالة كل طرف .
كود:
if (PORTB.F0==1 && PORTB.F4==1) { PORTA=0b00000001 ; Delay_ms(20); } else if (PORTB.F1==1 && PORTB.F4==1) { PORTA=0b00000010 ; Delay_ms(20); } else if (PORTB.F2==1 && PORTB.F4==1) { PORTA=0b00000011 ; Delay_ms(20); } else if (PORTB.F0==1 && PORTB.F5==1) { PORTA=0b00000100 ; Delay_ms(20); } else if (PORTB.F1==1 && PORTB.F5==1) { PORTA=0b00000101 ; Delay_ms(20); } else if (PORTB.F2==1 && PORTB.F5==1) { PORTA=0b00000110 ; Delay_ms(20); } else if (PORTB.F0==1 && PORTB.F6==1) { PORTA=0b00000111 ; Delay_ms(20); } else if (PORTB.F1==1 && PORTB.F6==1) { PORTA=0b00001000 ; Delay_ms(20); } else if (PORTB.F2==1 && PORTB.F6==1) { PORTA=0b00001001 ; Delay_ms(20); } else if (PORTB.F1==1 && PORTB.F7==1) { PORTA=0b00000000 ; Delay_ms(20); } else { PORTA=0b00000000 ; }
والحل الثاني : وهو الذي يعتمد عليه الكود الذي كتبته . وهو جمل if التي تختبر حالة كل طرف كما فعلت أنت , وحينها لم يكن هناك داعي لكتابة الأمر
لأنك لم تستفد منه بشيء .
============
هذه فقط ملاحظتي الخاصة بالكود .. أما فيما يتعلق بالدائرة الالكترونية فإنها تعمل جيدا في برنامج المحاكاة أما عند تطبيقها في الواقع فيجب وضع مقاومات قبل السفن سيجمنت حتى لا تتلف ,, كما يجب وضع مقاومات لكل عمود من الـkeypad , كما في الرسمة الخاصة بمشروع التحكم في 47 ريلاي ...
أشكرك جزيل الشكر على موضوعك الجميل , وآسف جدا على تأخري في الرد
============
وأشكرك على موضوعك الجميل ,, وتمنياتي لك بكل التوفيق والتميز