PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ساخت منوی ساده



saeidhp
04-01-2012, 09:25
سلام

من میخوام با 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 با مقدار مناسب کارتون استفاده کنید

saeidhp
04-01-2012, 17:28
اگه delay رو برای اینکه هنگام فشردن کلید A.2 که به مقدار s اضافه میکنه میگید که باید بگم با این مشکل حل نمیشه

من براش شرط زیر رو گذاشتم که با زدن کلید بیشتر از یه واد بهش اضافه نشه





if (PINA.2==0 && m)
{
s++;
m=0;
}
if(PINA.2==1)m=1;

saeidhp
04-01-2012, 17:28
اگه delay رو برای اینکه هنگام فشردن کلید A.2 که به مقدار s اضافه میکنه میگید که باید بگم با این مشکل حل نمیشه

من براش شرط زیر رو گذاشتم که با زدن کلید بیشتر از یه واحد اضافه نشه





if (PINA.2==0 && m)
{
s++;
m=0;
}
if(PINA.2==1)m=1;

rayk
04-01-2012, 18:13
s=0;

if(PINA.2==0) s=1;
else
s=0;
if (PINA.0==0 && s==1)
{
i++;

saeidhp
04-01-2012, 19:26
من با مقادیر 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++;
}

saeidhp
06-01-2012, 16:17
ممنون از شما من برنامه رو به شکل زیر تغییر دادم و جواب داد فقط میخوام زمانی که 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
با سلام
دوست عزيز اگه كل برنامه اي كه نوشتي رو بذاري بهتر ميتونم كمك كنم.
شما خودتون قسمت وقفه رو باهاش كار كردين؟
يا اگه نميخواين كل برنامتون رو بذاريد اون قسمتي كه مربوط به وقفه ميشه رو اينجا قرار بديد.

saeidhp
06-01-2012, 18:36
سلام

فایل پروتئوس + کدویژن رو قرار دادم

توی پروتئوس به ترتیب هست که در ابتدا 2 کلید بالا کار نمیکنه (a.0 , a.1) بعد از زدن کلید سوم (a.2) متن

سال اول خاموش میشه ولی روشن نمیشه اما با زدن کلید a.0 به مقدار سال اضافه میشه

بازدن مجدد کلید a.2 مقدار سال دوم اضافه میشه

saeidhp
06-01-2012, 18:36
سلام

فایل پروتئوس + کدویژن رو قرار دادم

توی پروتئوس به این ترتیب هست که در ابتدا 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)
_______________________

saeidhp
06-01-2012, 22:23
سلام

ممنون از شما

ولی من میخوام اینکه هم کار با وقفه ها رو یاد بگیرم هم اینکه موقع ویرایش سال چشمک بزنه

saeidhp
07-01-2012, 19:21
دوستان کسی یه نمونه برنامه از وقفه ها داره که مثلا یه led خاموش و روشن بکنه ؟

هنوز نتونستم راه بندازم

saeidhp
07-01-2012, 19:22
دوستان کسی یه نمونه برنامه از وقفه ها داره که مثلا یه led خاموش و روشن بکنه ؟

هنوز نتونستم راه بندازم

sadmonew
07-01-2012, 20:23
با سلام
دوست عزيز يه پروژه پيدا كردم فكر كنم به اون چيزي كه شما ميخواين يكم شبيه. از وقفه استفاده كرده و تو پروتئوس هم شبيه سازي شده. تو محيط WinAVR به زبان C نوشته شده.

_______________________
برنامه نويسي، الكترونيك(PE) (You can see links before reply)
_______________________

saeidhp
07-01-2012, 21:12
سلام و تشکر از شما

ببخشید خیلی اذیتتون کردم

من فقط با کد ویژن کار کردم و مشکل عمده من تنظیم رجیستر ها و فعال سازی تایمر با فعال کردن کلید هست

از این برنامه ای که دادید چیزی سر در نیاوردم !

saeidhp
08-01-2012, 20:20
من یه مقدار از برنامه رو نوشتم اما هنوز اشکال داره فکر میکنم فرکانسها بدرستی ست نشده

یه تابع 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
با سلام
لطفا همين برنامه كه جديدا نوشتيد رو به طور كامل با فايلاي پروژه اينجا بذاريد ببينيم مشكل دقيقا چيه؟
تو پروتئوس تست كردين يا به صورت عملي؟
اگه با پروتئوس تست كردين لطفا فايل پروتئوس رو هم همراه برنامه بذاريد.

saeidhp
08-01-2012, 21:44
سلام من از اون موقع تغییرات زیادی اعمال کردم ولی الان دوباره طوری نوشتم که تقریبا همون چیزی که گفتم رو انجام میده

وقتی کلید A.2 رو میزنید عملیات بعد از تابع delay رو انجام میده

saeidhp
10-01-2012, 07:42
دوستان فکر نکنم موضوع اینقدر پیچیده باشه

منم چون اولین بار هست که میخوام با تایمر ها کار کنم نمیتونم به درستی تنظیمش کنم

من فقط میخوام بازدن یه کلید یه متن شروع به چشمک زدن کنه

دارم به این نتیجه میرسم که برنامه اصلی رو دوباره با بسکام بنویسم cry::