پاسخ : مشکل با keypad
با سلام
مطالبی که گفتید خیلی مفید بود.
فقط یه سوال...
چرا وقتی درون تابع،برنامه خودم رو مینویسم جواب نمیده؟
علت اینکه میخوام اینکارو بکنم اینه که روش کد گزاریتون رو توی تابع نمیفهمم(از اونجایی که شما DDRD =0x0F کردید پس نباید ورودی رو در حالات مختلف چک کنید؟)
یعنی به جای
نباید اینجوری بنویسم(؟):
البته کدی که من نوشتم توی proteus جواب نمیده.وقتی RUN میکنم.پورت D که به KEYPAD وصله رو همشو 1 میکنه و دیگه تغییری نمیکنه پس برنامه تو خط اول تابع من گیر میکنه.چرا؟
با تشکر
با سلام
مطالبی که گفتید خیلی مفید بود.
فقط یه سوال...
چرا وقتی درون تابع،برنامه خودم رو مینویسم جواب نمیده؟
علت اینکه میخوام اینکارو بکنم اینه که روش کد گزاریتون رو توی تابع نمیفهمم(از اونجایی که شما DDRD =0x0F کردید پس نباید ورودی رو در حالات مختلف چک کنید؟)
یعنی به جای
کد:
DDRD =0x0F;
PORTD=0xF0;
char key (void)
{ PORTD=0xF0;
if(PIND == 0xF0)return 'v';
else delay_ms(10);
PORTD=0xFE;
if(PIND.4==0)return '+';
if(PIND.5==0)return '-';
if(PIND.6==0)return '*';
if(PIND.7==0)return '/';
PORTD=0xFD;
if(PIND.4==0)return 'e';
if(PIND.5==0)return '3';
if(PIND.6==0)return '6';
if(PIND.7==0)return '9';
PORTD=0xFB;
if(PIND.4==0)return '0';
if(PIND.5==0)return '2';
if(PIND.6==0)return '5';
if(PIND.7==0)return '8';
PORTD=0xF7;
if(PIND.4==0)return '.';
if(PIND.5==0)return '1';
if(PIND.6==0)return '4';
if(PIND.7==0)return '7';
return 'v';
کد:
char key(void){
DDRD=0x0f;
PORTD=0xff;
if(PORTD == 0xFF)return 'v';
else delay_ms(10);
PORTD.0=0;
if(PIND.4==0)return '+';
if(PIND.5==0)return '-';
if(PIND.6==0)return '*';
if(PIND.7==0)return '/';
delay_ms(2);
PORTD.1=0;
if(PIND.4==0)return 'e';
if(PIND.5==0)return '3';
if(PIND.6==0)return '6';
if(PIND.7==0)return '9';
delay_ms(2);
PORTD.2=0;
if(PIND.4==0)return '0';
if(PIND.5==0)return '2';
if(PIND.6==0)return '5';
if(PIND.7==0)return '8';
delay_ms(2);
PORTD.3=0;
if(PIND.4==0)return '.';
if(PIND.5==0)return '1';
if(PIND.6==0)return '4';
if(PIND.7==0)return '7';
return 'v';
delay_ms(2);
با تشکر


; رو ماقبل از تابع نوشتیم ولی برنامه کار میکنه پس دیده میشه که این تابع قبل از حلقه while نیز شروع به کار کرده.درسته؟{سوال اضافه:اگه حرف من درست باشه پس میکرو داره همزمان دو کار میکنه:یکی اسکن keypad و یکی انجام دستورات حلقه while در حالی که micro بیش از یه کار رو در یه لحظه نمیتونه انجام بده.پس آیا میشه گفت که وقتی تابع مینویسیم،میکرو به صورت جاروب،دستورات رو انجام میده؟(یعنی یه دستور از دستورات اصلی در حلقه while و یه دستور از تابع رو}



دیدگاه