سلام
اگه مقدار به برنامه ای که نوشتید دقت کنید ، مشاهده میکنید که :
کد:
while(1)
{
int time();
قبل از این دستورات مواردی مثل adc و lcd پیکربندی شده که من پیشنهاد میکنیم از آخرین ورژن های هدر ارائه شده در مجلات 2 و3 ( ویرایش دوم ) استفاده کنید . ( البته در اینجا این بخش مشکلی نداره )
بعد از این دستورات چند تا دستور دیگه وجود داره که مقدار یک کانال از adc رو میخونه و ...
اما دستور int time() :
با این دستور تابعی به نام int time فراخوانی میشه . در این تابع یک حلقه ی بینهایت while وجود داره که cpu به اون میره و دستورات زیر رو اجرا میکنه و با دستور return از اون خارح میشه و به حلقه ی اصلی برمیگره :
[HTML]int time(void)
{
while(1)
{
delay_ms(999);
sec++;
if (sec==60)
{
min++,sec=0;
}
if (min==60)
{
hur++,min=0;
}
if (hur==24)
{
hur=0;
}
lcd_gotoxy(1,1);
lcd_putsf(" : : ");
lcd_puts(hur);
lcd_gotoxy(1,4);
lcd_puts(min);
lcd_gotoxy(1,7);
lcd_puts(sec);
return(1);
}
}[/HTML]
در برنامه بالا نیازی به حلقه ی while نبود و... . با برگشتن cpu به حلقه ی اصلی دستور start_adc(); اجرا میشه تا adc فعال بشه و در نهایت cpu برای 1800 ثانیه در حلقه ی زیر گیر میکنه و دیگه به تابع int time شما نمیره تا زمان رو تغییر بده و اینجاست که :
وقتي برنامه رو پروگرام مي كنم ساعت من كار نمي كنه(فقط همون زماني كه اول تنظيم كردم نشون ميده)
کد:
for(j=0 ;j<48 ;j++);
{
for (i=0 ;i<8;i++);
{
a=read_adc(i);
lcd_gotoxy(2,i);
lcd_puts(a);
delay_s(60);
}
delay_s(1800);
}
برای رفع کردن اشکال فوق کافیه دستور int time(); را از مکان قعلیش کات کنید و به زیر دستور lcd_puts(a); منتقل نمایید . در این حالت مشکل رفرش زمان حل میشه .