السلام عليكم ورحمة الله ..
اخواني الأعزاء خبراء الميكروكنترولر .. انا مبتدأ في عالم الميكروكنترولر وبالتحديد بدأت مع البيك وقمت بعمل برامج صغيرة مثل الفلاش و الكاونتر على السفن سجمنت عمليا ولكن عندما حاولت ان اعمل على الكيباد ظهرت مشكلة في التطبيق العملي مع ان التطبيق على بروتس سليم ويسير بالبرنامج كما برمجته
في برنامجي هذا احاول ان ابرمج البيك 16f877a بحيث عند الضغط على زر معين في الكيباد ينير الليد الأول وعند الضغط على زر اخر ينير الليد الثاني وعند الضغط على الزر الثالث يضيء الليد الثالث وعند الضغط على اي زر اخر يضيء الثلاثة ليدات معا وطبقت البرنامج على بروتس وعمل تماما لكن عند التطبيق العملي الليدات تضيء عشوائيا حتى بدون الضغط على اي زر في الكيباد ولا اعرف ما السبب
علما باني موصل mclr مضبوط كريستالة 8 ميجا ومكثفين عليها 22 ولكن لا اعرف ما سبب المشكلة مع ان التطبيق العملي على الفلاشر العادي يعمل تمام ولكن كود الكيباد هو الذي لا يعمل بطريقة صحيحة
الكود كالتالي :
char keypadport at portb ;
short kp;
short x=0;
void main() {
keypad_init ();
trisc=0;
portc.b0=0;
portc.b1=0;
portc.b2=0;
delay_ms(500);
portc=0b00000111;
delay_ms(500);
portc=0b00000000;
delay_ms(500);
portc=0b00000111;
delay_ms(500);
portc=0b00000000;
delay_ms(500);
portc=0b00000111;
delay_ms(500);
portc=0b00000000;
delay_ms(500);
loop:
do
{
kp=keypad_key_click();
}
while(kp==0);
if(kp==1)
{
portc.b0=1 ;
delay_ms(500);
portc.b0=0 ;
delay_ms(500);
kp=0;
}
if(kp==2)
{
portc.b1=1 ;
delay_ms(500);
portc.b1=0 ;
delay_ms(500);
kp=0;
}
if(kp==3)
{
portc.b2=1 ;
delay_ms(500);
portc.b2=0 ;
delay_ms(500);
kp=0;
}
if(kp!=0)
{
portc.b0=1 ;
portc.b1=1 ;
portc.b2=1 ;
delay_ms(1000);
portc.b0=0 ;
portc.b1=0 ;
portc.b2=0 ;
delay_ms(500);
kp=0;
}
goto loop;
}
عمليا يضيء الثلاثة ليدات معا ثم يبدأ انارة عشوائيا ممكن ليد واحد او اتنين معا بدون ان اضغط على الكيباد نهائيا حتى عند فصل الكيباد تحدث نفس المشكلة
ارجو من الاخوة ارشادي الى الحل نظرا لأهمية الموضوع الخاص بالكيباد عندي
ولكم جزيل الشكر
تقبلوا تحياتي