اطلاعیه

Collapse
No announcement yet.

7-seg

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    7-seg

    درود بر اساتید محترم
    من میخوام
    یک متغییر سه رقمی را روی 3 تا 7-seg بدم نمیدونم چرا عددی که نمایش میده هیچ ربطی به متغییر من نداره؟؟؟؟؟؟؟؟
    اینم از کدش :
    کد:
    #include <mega8.h>
    #include <delay.h>
    unsigned char digit [10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xff,0x6f};
    unsigned char n1,n2,n3;
    unsigned char t,e;
    void main(void)
    {
    
    PORTD=0x00;
    DDRD=0xFF;
    
    PORTB=0x00;
    DDRB=0xFF;
    while (1)
       {
       t=651;
       n1=t%10;
       e=t/10;
       n2=e%10;
       n3=e/10;
       
       PORTD=digit[n3];
       PORTB.0=1; 
       PORTB.1=0;
       PORTB.2=0; 
       delay_ms(5);
       PORTD=digit[n2];
       PORTB.0=0; 
       PORTB.1=1;
       PORTB.2=0;
       delay_ms(5); 
       PORTD=digit[n1];
       PORTB.0=0; 
       PORTB.1=0;
       PORTB.2=1;
       delay_ms(5);
       }
    }

    #2
    پاسخ : 7-seg

    سلام
    چه عددی نشون میده؟
    من فکر کنم زمان تاخیرت کمه
    و چون قبل از اینکه پورت کنترل کنندت تغییر کنه، مقدار دیتا رو عوض میکنی این باعث میشه واسه یه لحظه n2 توی سون سگمنت مربوط به n1 نشون داده شه.فکر کنم بهتره اول هر سه تا پایه پورت B رو خاموش کنی. بعد دیتا رو بریزی. بعد سون سگمنت مربوطه رو روشن کنی
    زمان تاخیرت رو هم طوری حساب کن که بین دو تا روشنی هر سون سگمنت 25 میلی ثانیه فاصله باشه.
    موفق باشی :agree:

    دیدگاه


      #3
      پاسخ : 7-seg

      ببخشید جوابم اشتباه بود ویرایشش کردم :redface: :redface:
      تنها دو روز در سال هست که نمیتونی هیچ کاری بکنیآ‌! یکیآ‌ دیروز و یکیآ‌ فردا . . .

      دیدگاه


        #4
        پاسخ : 7-seg

        زمان 5 میلی ثانیه مشکلی نداره. من قبلا 2 میلی ثانیه هم تست کردم جواب داد.
        اگه شما توی پروتئوس دارید تست میکنید زیاد قابل اطمینان نیست. توی واقعیت ببندید. قبلا برای منم پیش اومده که توی پروتئوس مشکل داشته ولی در عمل درست جواب داده.
        موفق باشید.
        www.gam-co.blogsky.com

        دیدگاه


          #5
          پاسخ : 7-seg

          بله درسته
          زمان 5 میلی ثانیه مشکلی نداره بدونه تقسیم متوالی چک کردم ولی مشکلی نداشت یعنی به جای n1,n2,n3 عدد گذاشتم
          نمیدونم متغییر سه رقمی را روی 3 تا 7-seg بدم نمیدونم چرا عددی که نمایش میده هیچ ربطی به متغییر من نداره
          به نظر من هرچی که هست مشکل از تقسیم متوالی نمید ونم چرا ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟///
          من پروتئوس استفاده نکردم تو عمل این مشکل داره

          دیدگاه


            #6
            پاسخ : 7-seg

            به جای فایل با پسوند .hex فایل .cof رو به میکروت بده (تو پروتئوس)
            بعد که play کردی pause رو بزن ببین به متغیرای n1 n2 n3 چه مقادیری داده. بعید میدونم مشکلی داشته باشه!

            دیدگاه


              #7
              پاسخ : 7-seg

              سلام اینجوری که من متوجه شدم مشکل از عملگر % هست وقتی متغییر از جنس float تعریف میکنیم error میگیره
              اگرم مثل بالا ازجنسunsigned char تعریف کنیم چون عددی که میده ممیز داره جواب درت نیست
              بنظر شما راحل چیه؟؟؟؟؟؟؟؟؟؟؟

              دیدگاه


                #8
                پاسخ : 7-seg

                اگر امکانش هست بصورت کد بهم بگین خیلی به c مسلط نیستم
                متشکرم از پاسخ

                دیدگاه


                  #9
                  پاسخ : 7-seg

                  سلام اینجوری که من متوجه شدم مشکل از عملگر % هست وقتی متغییر از جنس float تعریف میکنیم error میگیره
                  اگرم مثل بالا ازجنسunsigned char تعریف کنیم چون عددی که میده ممیز داره جواب درت نیست
                  با یکی اساتیدی که تو این ضمیمه صاحب نظر مشورت کردم
                  کد زیر را پیشنهاد داد
                  و تست کردم درست جواب داد
                  ولی منظورش از
                  کد:
                  n3=(unsigned char)
                  نفهمیدم چه کسی
                  هست این قسمت کد معنی کنه
                  اینم کد کامل:
                  کد:
                  unsigned int t;
                  unsigned char n1,n2,n3;
                  while (1)
                     {
                  
                  t=651;
                  n1=(unsigned char)(t/100);
                  n2=(unsigned char)((t/10)-(n1*10));
                  n3=(unsigned char)(t-(n1*100)+(n2*10));
                     
                     PORTD=digit[n3];
                     PORTB.0=1; 
                     PORTB.1=0;
                     PORTB.2=0; 
                     delay_ms(5);
                     PORTD=digit[n2];
                     PORTB.0=0; 
                     PORTB.1=1;
                     PORTB.2=0;
                     delay_ms(5); 
                     PORTD=digit[n1];
                     PORTB.0=0; 
                     PORTB.1=0;
                     PORTB.2=1;
                     delay_ms(5);
                     }
                  }

                  دیدگاه


                    #10
                    پاسخ : 7-seg

                    نوشته اصلی توسط hosseinip
                    سلام اینجوری که من متوجه شدم مشکل از عملگر % هست وقتی متغییر از جنس float تعریف میکنیم error میگیره
                    اگرم مثل بالا ازجنسunsigned char تعریف کنیم چون عددی که میده ممیز داره جواب درت نیست
                    بنظر شما راحل چیه؟؟؟؟؟؟؟؟؟؟؟
                    کدوم عدد ممیز میگیره؟؟ % که باقیمانده رو میده / هم خارج قسمت! تقسیمش به نظر من مشکلی نداره

                    دیدگاه


                      #11
                      پاسخ : 7-seg

                      اول توضیح راجع به این عبارت :
                      n1=(unsigned char)(t/100);
                      اول t تقسیم بر100 میشه . نتیجه هر چی باشه ممیزهاش حذف میشه . به این کار cast کردن میگن .

                      البته اینجا اصلا لازم نیست . چون تقسیم به عملوندهاش نگاه میکنه و اگه ممیز نداشته باشن جواب هم بدون ممیز میشه .
                      یعنی 3 تقسیم بر 2 میشه 1 .
                      ولی 3.0 تقسیم بر 2 میشه 1.5

                      مشکل از اون بخش پر کردن n ها است .
                      شما باید یکان و دهگان و صدگان رو جدا کنید .

                      إِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
                      کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

                      دیدگاه


                        #12
                        پاسخ : 7-seg



                        تعریف e اصلا لازم نیست .
                        إِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
                        کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

                        دیدگاه

                        لطفا صبر کنید...
                        X