توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ساخت منوی ساده
سلام
من میخوام با codevision یه منوی ساده مثل منوی تلفن درست کنم ولی ظاهرا یه جای کارم اشکال داره
s=0;
if(PINA.2==0)s++;
if (PINA.0==0 && s==1)
{
i++;
در واقع میخوام وقتی یکبار کلید A.2 رو میزنم مقدار s=1 بشه و وقتی که مقدار s=1 شد و کلید A.0 عمل بکنه و مقدار i رو در lcd نمایش بده
ممنون میشم راهنمایی کنید
afdm_2020
04-01-2012, 12:01
سلام
من میخوام با codevision یه منوی ساده مثل منوی تلفن درست کنم ولی ظاهرا یه جای کارم اشکال داره
s=0;
if(PINA.2==0)s++;
if (PINA.0==0 && s==1)
{
i++;
در واقع میخوام وقتی یکبار کلید A.2 رو میزنم مقدار s=1 بشه و وقتی که مقدار s=1 شد و کلید A.0 عمل بکنه و مقدار i رو در lcd نمایش بده
ممنون میشم راهنمایی کنید
سلام
فک میکنم شما باید از یه delay با مقدار مناسب کارتون استفاده کنید
اگه delay رو برای اینکه هنگام فشردن کلید A.2 که به مقدار s اضافه میکنه میگید که باید بگم با این مشکل حل نمیشه
من براش شرط زیر رو گذاشتم که با زدن کلید بیشتر از یه واد بهش اضافه نشه
if (PINA.2==0 && m)
{
s++;
m=0;
}
if(PINA.2==1)m=1;
اگه delay رو برای اینکه هنگام فشردن کلید A.2 که به مقدار s اضافه میکنه میگید که باید بگم با این مشکل حل نمیشه
من براش شرط زیر رو گذاشتم که با زدن کلید بیشتر از یه واحد اضافه نشه
if (PINA.2==0 && m)
{
s++;
m=0;
}
if(PINA.2==1)m=1;
s=0;
if(PINA.2==0) s=1;
else
s=0;
if (PINA.0==0 && s==1)
{
i++;
من با مقادیر s کار دارم پس نمیتونم قسمت else s=0 رو استفاده کنم
sadmonew
04-01-2012, 22:34
با سلام دوست عزيز شما بايد از دستور While استفاده كنيد. به اين صورت يعني با هر بار فشار دادن دكمه فقط يه واحد به مقدار اضافه ميشه.
sadmonew
05-01-2012, 01:36
با سلام
دوست عزيز برنامه رو به اين صورت تغيير بديد ببينيد جواب ميده؟
s=0;
if(PINA.2==0)
{
s++;
while(!PINA.2)
}
if (PINA.0==0 && s==1)
{ i++;
}
ممنون از شما من برنامه رو به شکل زیر تغییر دادم و جواب داد فقط میخوام زمانی که m=1 میشه sal1 توی lcd خاموش و روشن بشه وقتی m=2 میشه sal2 خاموش و روشن بشه (در هر ثانیه 1 بار خاموش و روشن )
فقط اینکارو میخوام با وقفه ها انجام بدم نه با delay
الان 2 روزه که دارم بهش ور میرم ولی ره نیافتاده ممنون میشم راهنمایی بفرمایید
while (1)
{ lcd_gotoxy(10,0);
lcd_puts(saeid);
if (!PINA.0&& m==1)
{
sal1++;
}
if (!PINA.1 && m==2)
{sal2++;
}
if (!PINA.2){delay_ms(25);
m++;
if (m==3)m=0;
while(!PINA.2){}
}
lcd_screen();
sadmonew
06-01-2012, 17:15
با سلام
دوست عزيز اگه كل برنامه اي كه نوشتي رو بذاري بهتر ميتونم كمك كنم.
شما خودتون قسمت وقفه رو باهاش كار كردين؟
يا اگه نميخواين كل برنامتون رو بذاريد اون قسمتي كه مربوط به وقفه ميشه رو اينجا قرار بديد.
سلام
فایل پروتئوس + کدویژن رو قرار دادم
توی پروتئوس به ترتیب هست که در ابتدا 2 کلید بالا کار نمیکنه (a.0 , a.1) بعد از زدن کلید سوم (a.2) متن
سال اول خاموش میشه ولی روشن نمیشه اما با زدن کلید a.0 به مقدار سال اضافه میشه
بازدن مجدد کلید a.2 مقدار سال دوم اضافه میشه
سلام
فایل پروتئوس + کدویژن رو قرار دادم
توی پروتئوس به این ترتیب هست که در ابتدا 2 کلید بالا کار نمیکنه (a.0 , a.1) بعد از زدن کلید سوم (a.2) متن
سال اول خاموش میشه ولی روشن نمیشه اما با زدن کلید a.0 به مقدار سال اضافه میشه
بازدن مجدد کلید a.2 مقدار سال دوم اضافه میشه
sadmonew
06-01-2012, 21:25
با سلام
دوست عزيز برنامه رو تغيير دادم. البته بدون وقفه انجام دادم.
با كليد متصل شده به A.0 ميتونيد مشخص كنيد كه كدوم عدد(sal1 يا sal2) رو ميخوايد افزايش بديد با زدن اين دكمه، علامت">" جلوي sal ظاهر ميشه.
با دكمه هاي A.1 عدد مربوط به sal1 افزايش و با زدن دكمه A.2 عدد مربوط به sal2 افزايش پيدا ميكنه.
به هر صورت در خدمتيم.
_______________________
برنامه نويسي، الكترونيك(PE) (You can see links before reply)
_______________________
سلام
ممنون از شما
ولی من میخوام اینکه هم کار با وقفه ها رو یاد بگیرم هم اینکه موقع ویرایش سال چشمک بزنه
دوستان کسی یه نمونه برنامه از وقفه ها داره که مثلا یه led خاموش و روشن بکنه ؟
هنوز نتونستم راه بندازم
دوستان کسی یه نمونه برنامه از وقفه ها داره که مثلا یه led خاموش و روشن بکنه ؟
هنوز نتونستم راه بندازم
sadmonew
07-01-2012, 20:23
با سلام
دوست عزيز يه پروژه پيدا كردم فكر كنم به اون چيزي كه شما ميخواين يكم شبيه. از وقفه استفاده كرده و تو پروتئوس هم شبيه سازي شده. تو محيط WinAVR به زبان C نوشته شده.
_______________________
برنامه نويسي، الكترونيك(PE) (You can see links before reply)
_______________________
سلام و تشکر از شما
ببخشید خیلی اذیتتون کردم
من فقط با کد ویژن کار کردم و مشکل عمده من تنظیم رجیستر ها و فعال سازی تایمر با فعال کردن کلید هست
از این برنامه ای که دادید چیزی سر در نیاوردم !
من یه مقدار از برنامه رو نوشتم اما هنوز اشکال داره فکر میکنم فرکانسها بدرستی ست نشده
یه تابع delay به شکل زیر نوشته شد
void delay()
{
TCCR0=0B00000101; // Timer Clock = CLK/1024
while(!TIFR&0x01); // Wait Until Overflow
TIFR=TIFR|0B00000001; // Clear TOV0
TCCR0=0x00; // Stop Timer0
}
TCCR0=0x00;
TCNT0=0x00;
و در شرط زیر از تابع delay استفاده کردم
if (!PINA.2)
{
delay_ms(25);
m++;
if (m==3)m=0;
if(m==1)
{
lcd_gotoxy(0,0);
lcd_puts ("sale=1390");
delay();
lcd_gotoxy(0,0);
lcd_puts ("sale= ");
lcd_clear();
}
من الان انتظار دارم با زدن کلید 1390 شروع به چشمک زدن بکنه ولی فقط خاموش میشه
sadmonew
08-01-2012, 21:07
با سلام
لطفا همين برنامه كه جديدا نوشتيد رو به طور كامل با فايلاي پروژه اينجا بذاريد ببينيم مشكل دقيقا چيه؟
تو پروتئوس تست كردين يا به صورت عملي؟
اگه با پروتئوس تست كردين لطفا فايل پروتئوس رو هم همراه برنامه بذاريد.
سلام من از اون موقع تغییرات زیادی اعمال کردم ولی الان دوباره طوری نوشتم که تقریبا همون چیزی که گفتم رو انجام میده
وقتی کلید A.2 رو میزنید عملیات بعد از تابع delay رو انجام میده
دوستان فکر نکنم موضوع اینقدر پیچیده باشه
منم چون اولین بار هست که میخوام با تایمر ها کار کنم نمیتونم به درستی تنظیمش کنم
من فقط میخوام بازدن یه کلید یه متن شروع به چشمک زدن کنه
دارم به این نتیجه میرسم که برنامه اصلی رو دوباره با بسکام بنویسم cry::
Powered by vBulletin® Version 4.2.1 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.