اطلاعیه

Collapse
No announcement yet.

مشکل در عدد اعشاری در کدویژن

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

    مشکل در عدد اعشاری در کدویژن

    سلام من نمیتونم یه عدد اعشاری رو روی lcd نشون بدم.قطعه کدم مثل زیر هستش ولی فقط قسمت صحیح عددو نشون میده و اعشاریشو 0 میذاره.کسی میتونه راهنماییم کنه؟

    کد:
         timervalue=(((10000*256)+35)/1000000);
         sprintf(w,"time:%f sec",timervalue); 
         lcd_clear(); 
         lcd_puts(w);

    #2
    پاسخ : مشکل در عدد اعشاری در کدویژن

    لطفا قبل از ارسال تاپیک یه سرچ بفرمایید .......

    باید تنظیمات قسمت project و بخش printf و sprintf رو روی float بزارید.
    موفق باشید
    چرا ناراحتی پاتریک!
    + امروز ی بچه دیدم سرچهارراه گل میفروخت
    - از دیدنش ناراحت شدی؟
    + نه
    پس چی ناراحتت کرده
    + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
    ------------------------------------------------------------------------------------------------------
    تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
    ------------------------------------------------------------------------------------------------------
    محصولات

    دیدگاه


      #3
      پاسخ : مشکل در عدد اعشاری در کدویژن

      ممنونم از جوابتون
      سرچ کردم ولی چیزی دستگیرم نشد
      این کارو انجام داده بودم و تست میکردم ولی باز هم جواب نمیده :cry2:

      دیدگاه


        #4
        پاسخ : مشکل در عدد اعشاری در کدویژن

        از ftoa استفاده کن.
        چرا ناراحتی پاتریک!
        + امروز ی بچه دیدم سرچهارراه گل میفروخت
        - از دیدنش ناراحت شدی؟
        + نه
        پس چی ناراحتت کرده
        + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
        ------------------------------------------------------------------------------------------------------
        تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
        ------------------------------------------------------------------------------------------------------
        محصولات

        دیدگاه


          #5
          پاسخ : مشکل در عدد اعشاری در کدویژن

          سلام
          ببین متغیر timervalue رو float تعریف کردی؟

          دیدگاه


            #6
            پاسخ : مشکل در عدد اعشاری در کدویژن

            به خدا از ftoa هم استفاده کردم ولی بازهم مثه همینه :cry2: :angry: :angry:

            متغیرهام هم از نوعfloat تعریف شده :angry: :angry: :cry2: :cry2:

            دیدگاه


              #7
              پاسخ : مشکل در عدد اعشاری در کدویژن

              نوشته اصلی توسط mohammadttl
              به خدا از ftoa هم استفاده کردم ولی بازهم مثه همینه :cry2: :angry: :angry:

              متغیرهام هم از نوعfloat تعریف شده :angry: :angry: :cry2: :cry2:
              سلام
              از داخل این مسیر project>configure>c compiler>code generation گزینه sprintf رو روی آخرین گزینه تغییر بدید درست میشه
              این نمونه کد رو هم ببینید با دو رقم اعشار نشون میده
              speed=(TCNT0/50.0)*120;
              TCNT0=0x00;
              lcd_clear();
              sprintf(buffer,"S:%4.2f",speed);
              lcd_puts(buffer);

              دیدگاه


                #8
                پاسخ : مشکل در عدد اعشاری در کدویژن

                دوست عزیز
                اون timervalue رو چی تعریف کردید؟
                اون مقادیر هم که گذاشتین هم که نمی تونه همین جوری باشه. حتما متغیر بودن و شما فعلا عدد گذاشتین. اون متغییر ها چیه؟(چه نوعیه) اگه متغیر نیستن هم پس چرا اینجوری نوشتینشون؟
                قطعا یه جایی دارین اشتبا میکنین.

                دیدگاه


                  #9
                  پاسخ : مشکل در عدد اعشاری در کدویژن

                  این تنظیماتو انجلم دادم ولی هنوز نشده و اعشارشو صفر نشون میده
                  اینم کدی که نوشتم.
                  نمیدونم دیگه مشکلش کجاست
                  کد:
                       
                  unsigned long int rt;  //repeat timer interrupt
                  float timervalue;
                  char w[20];
                  
                  
                  
                  timervalue=((TCNT2+(rt*256))/1000000);  //unit sec
                       TCNT2=0x00;
                  	 rt=0;  
                       sprintf(w," timer:%4.2f", timervalue);
                       
                  
                       lcd_clear(); 
                       lcd_puts(w);

                  دیدگاه


                    #10
                    پاسخ : مشکل در عدد اعشاری در کدویژن

                    در زبان C برای تبدیل نوع داده ها باید casting صورت بگیره. عبارتی که توی پرانتز نوشته شده همه ش عدد صحیحه، و نتیجه ش حتماً حتماً عدد صحیح میشه.
                    یه دوستی بود می گفت کدش کار نمی کنه. بعد رفتم دیدم نوشته x/1000 و میگه خروجیش همیشه صفره!
                    خوب این تقسیم عدد صحیح همیشه صفره دیگه.
                    شما هم اینجوری بنویس:
                    کد:
                    timervalue = (float) (TCNT2+(rt*256) /1000000.0);
                    بیایید با Google آشتی کنیم!

                    دیدگاه


                      #11
                      پاسخ : مشکل در عدد اعشاری در کدویژن

                      تشکر ویژه از مهندس [glow=red,2,300][shadow=red,left]"محمد رستمی"[/shadow][/glow]
                      ممنونم از راهنماییتون مهندس.بالاخره به جواب رسیدم
                      یه سوال مهندس جان
                      اینکه توی پرانتز نوشتید (float) این چیه؟؟؟؟چکار میکنه؟

                      دیدگاه


                        #12
                        پاسخ : مشکل در عدد اعشاری در کدویژن

                        خواهش میشه :smile:
                        اون Casting هستش. یکم تو اینترنت و آموزش های زبان C جستجو کنید قشنگ متوجه می شید.
                        اگر فرض کنیم به طور خلاصه تمام انواع (Type) متغیرها توی یک کامپایلر زبان C استاندارد اینا باشن:
                        • [li]char[/li]
                          [li]short[/li]
                          [li]int[/li]
                          [li]long int[/li]
                          [li]float[/li]
                          [li]double[/li]

                        در این صورت، اگه یه بنده خدایی بخواد این متغیرها رو به هم تبدیل کنه، باید نوع اون ها رو تغییر بده. به این کار می گن Type casting. مثالش عینیش یکی همون موردِ شماست، یکی دیگه جمع و ضرب اعداد کوچکه، که مطمئناً نتیجه بزرگتر میده.
                        کد:
                        unsigned char x, y, z;
                        z = x + y;
                        برای اعداد واقعی نتیجه غلط از آب در میاد. چون جمع دو تا عدد تک بایتی ممکنه بشه 2 بایت و توی نوع یک بایتی جا نمیشه. حتی اگه بنویسید:
                        کد:
                        unsigned char x, y;
                        unsigned int z;
                        z = x + y;
                        هم نتیجه غلطه. چون بازم جمع دو تا عدد تک بایتی تو یه رجیستری چیزی ذخیره می شه و بعدش به z منتقل میشه.
                        برای حل این مشکل بهتره اینجوری بنویسید:
                        کد:
                        unsigned char x, y;
                        unsigned int z;
                        z = (unsigned int)x + (unsigned int)y;
                        توی اعداد float باید دقت بیشتری به خرج بدید.
                        بیایید با Google آشتی کنیم!

                        دیدگاه

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