ايران ويج

نسخه‌ی کامل: يك مشكل
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
من يه برنامه با كدويژن نوشتم(پيوستش هست).كار برنامه اينه كه اگر كليد وقفه 1 فشرده بشه يك واحد به عدد 7سگمنت اضافه كنه و اگه كليد وقفه 2 فشار داده بشه يك واحد كم بشه. درضمن اگر عدد منفي شد ال اي دي رو به عنوان علامت منفي روشن كنه ولي زماني كه من اين برنامه رو با پروتيوس شبيه سازي كردم ال اي دي به صورت چشمك زن روشن مي شد و زماني كه اون رو به يك پايه ديگه وصل كردم درست شد(به پورت D).اين اشكال در واقعيت هم وجود داره يا فقط ايراد پروتيوس هست؟
سورس برنامه و فايل پروتيوس ضميمه شده.
کد شما دو تا اشکال داشت.
این قسمت از کد رو جایگزین کنید درست کار میکنه.
کد:
while (1)
      {
      if(x>=0){
      PORTA=digit[x%10];PORTD.4=0;}
      if(x<0){PORTA=-0b10000000|digit[(-x%10)];}
      }

در کد قبلی
کد:
while (1)
      {
      if(x>=0){PORTA=digit[x%10];PORTD.4=0;}
      if(x<0){PORTA.7=1;PORTA=digit[0-x]%10;}

      }
گفتید اگر x منفی بود PORTA.7=1 بشود.
اما بعد از دستور SET. امدید کل PORTA رو یه مقدار جدید بهش دادید. که در این مقدار جدید پایه شماره 7 صفر هست. یعنی LED مرتب روشن و خاموش می شود.
راه حل این بود که اگر x منفی هست، PORTA با عدد باینری 10000000 Or شود. نتیجه LED علامت منفی روشن میشود.
اشتباه دوم در نمایش اعداد منفی بود که 10% در جای درستی قرار نداشت.

البته اگر این مدار رو در دنیای واقعی آزمایش میکردید. LED روشن میشد. اما با نور کمتری. و چشمک زدنش با چشمانمون مشخص نمیشد. چون سرعت روشن و خاموش شدنش بسیار زیاد.
بخشيد منظورتون رو از اشتباه دوم نفهميدم. يه بار ديگه بگيد؟
راستي يك سوال ديگه.اگر بخوام 7سگمنت به صورت چشمكزن در بياد چي كار بايد كنم؟
شما به این شکل نوشته بودید.
کد:
digit[0-x]%10;
که اشتباه بود. و نوشتن صحیح به این شکل.
کد:
digit[(-x%10)];
در شبیه ساز آزمایش کنید اعداد منفی رو اشتباه نمایش میداد. دو تا کد بالا رو مقایسه کنید.


برای این که چشمک بزنه کافیه این کد رو جایگزین کنید.
که هر 500 میلی ثانیه چشمک میزنه.
کد:
while (1)
       {
       delay_ms(300);
       PORTA=0;
       delay_ms(200);
       if(x>=0){
       PORTA=digit[x%10];PORTD.4=0;}
       if(x<0){PORTA=-0b10000000|digit[(-x%10)];}
       }
البته فراموش نکنید که در ابتدای برنامه تون کتابخانه مربوط به تاخیر رو به برنامه اضافه کنید.
کد:
#include <delay.h>