اطلاعیه

Collapse
No announcement yet.

نمایش اعداد اعشاری

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

    نمایش اعداد اعشاری

    سلام من این برنامه رو توی keil نوشتم ولی نمی دونم چرا اعدادو روی LCD به صورت اعشاری نمایش نمی ده وفقط قسمت صحیح عدد نشون می ده واسه اعداد اعشاری باید کار خاصی انجام داد؟؟
    #include <LPC213x.h>
    #include <LCD.h>
    #include <LCD.c>
    #include <delay.h>
    #include <stdio.h>
    int main (void)
    {
    float a=4.6;
    lcd_init();
    while(1)
    {
    lcd_clear();
    lcd_gotoxy(0,1);
    lcd_puts(a);
    delay_ms(50);
    }
    }


    جدیدترین ویرایش توسط Mojtababm66; ۱۴:۱۳ ۱۳۹۵/۰۴/۱۱.

    #2
    پاسخ : نمایش اعداد اعشاری

    سلام
    ابتدا باید عدد اعشاری (float) رو به رشته تبدیل کنید.
    اینم تابع اش:


    ////////////////////////////////////////////// convert float to string//////////////////////////
    void ftoa(unsigned char *buf, float f) {
    unsigned int rem;
    unsigned char *s,length=0;
    int i;


    i = (int)((float)f*10);


    s = buf;
    if (i == 0){ //print 0.0 with null termination here
    *s++ = '0';
    *s++ = '.';
    *s++ = '0';
    *s=0; //null terminate the string
    } else {
    if (i < 0) {
    *buf++ = '-';
    s = buf;
    i = -i;
    }
    //while-loop to "decode" the long integer to ASCII by append '0', string in reverse manner
    //If it is an integer of 124 -> string = {'4', '2', '1'}
    while (i) {
    ++length;
    rem = i % 10;
    *s++ = rem + '0';
    i /= 10;
    }
    //reverse the string in this for-loop, string became {'1', '2', '4'} after this for-loop
    for(rem=0; ((unsigned char)rem)<length/2; rem++) {
    *(buf+length) = *(buf+((unsigned char)rem));
    *(buf+((unsigned char)rem)) = *(buf+(length-((unsigned char)rem)-1));
    *(buf+(length-((unsigned char)rem)-1)) = *(buf+length);
    }


    /* Take care of the special case of 0.x if length ==1*/
    if(length==1) {
    *(buf+2) = *buf;
    *buf = '0';
    *(buf+1) = '.';
    *(s+2)=0; //null terminate
    } else {
    *(buf+length) = *(buf+length-1);
    *(buf+length-1)='.';
    *(s+1)=0; //null terminate

    }
    }
    }

    دلیل: ادغام دو پست برای جلوگیری از اسپم

    اینم یه مثال:
    char buffer_1[64], buffer_2[64];
    float out= 12.456;




    ftoa(out,3,buffer_1)
    sprintf(buffer_2,"output: %6s",buffer_1);
    lcd_puts(buffer_2);

    دیدگاه


      #3
      پاسخ : نمایش اعداد اعشاری

      نوشته اصلی توسط milad0110 نمایش پست ها
      سلام
      ابتدا باید عدد اعشاری (float) رو به رشته تبدیل کنید.
      اینم تابع اش:


      ////////////////////////////////////////////// convert float to string//////////////////////////
      void ftoa(unsigned char *buf, float f) {
      unsigned int rem;
      unsigned char *s,length=0;
      int i;


      i = (int)((float)f*10);


      s = buf;
      if (i == 0){ //print 0.0 with null termination here
      *s++ = '0';
      *s++ = '.';
      *s++ = '0';
      *s=0; //null terminate the string
      } else {
      if (i < 0) {
      *buf++ = '-';
      s = buf;
      i = -i;
      }
      //while-loop to "decode" the long integer to ASCII by append '0', string in reverse manner
      //If it is an integer of 124 -> string = {'4', '2', '1'}
      while (i) {
      ++length;
      rem = i % 10;
      *s++ = rem + '0';
      i /= 10;
      }
      //reverse the string in this for-loop, string became {'1', '2', '4'} after this for-loop
      for(rem=0; ((unsigned char)rem)<length/2; rem++) {
      *(buf+length) = *(buf+((unsigned char)rem));
      *(buf+((unsigned char)rem)) = *(buf+(length-((unsigned char)rem)-1));
      *(buf+(length-((unsigned char)rem)-1)) = *(buf+length);
      }


      /* Take care of the special case of 0.x if length ==1*/
      if(length==1) {
      *(buf+2) = *buf;
      *buf = '0';
      *(buf+1) = '.';
      *(s+2)=0; //null terminate
      } else {
      *(buf+length) = *(buf+length-1);
      *(buf+length-1)='.';
      *(s+1)=0; //null terminate

      }
      }
      }

      دلیل: ادغام دو پست برای جلوگیری از اسپم

      اینم یه مثال:
      char buffer_1[64], buffer_2[64];
      float out= 12.456;




      ftoa(out,3,buffer_1)
      sprintf(buffer_2,"output: %6s",buffer_1);
      lcd_puts(buffer_2);
      دوست عزیز شما خودت این برنامه رو اجرا کردی ؟ چون من که اجرا کردم اون buffer_1 و buffer_2 رو ارور داد.
      اینم عکسش:

      دیدگاه


        #4
        پاسخ : نمایش اعداد اعشاری

        نوشته اصلی توسط Mojtababm66 نمایش پست ها
        دوست عزیز شما خودت این برنامه رو اجرا کردی ؟ چون من که اجرا کردم اون buffer_1 و buffer_2 رو ارور داد.
        اینم عکسش:
        http://s3.img7.ir/cpRTY.jpg
        آقا یکی کمک کنه من یه عدد ساده اعشاری رو نمی تونم نمایش بدم
        هرچی دستور زدم جواب نداده
        من چی کار کنم آخه؟

        دیدگاه


          #5
          پاسخ : نمایش اعداد اعشاری

          سلام
          از این دستور استفاده کن تبدیل به رشته میشه


          sprintf(buffer,"value=%f",val); m
          قبلش حتما این فایل رو اینکلاد کن stdio.h
          جدیدترین ویرایش توسط ehsanbagheri; ۱۱:۴۹ ۱۳۹۵/۰۴/۱۲.

          دیدگاه


            #6
            پاسخ : نمایش اعداد اعشاری

            نوشته اصلی توسط ehsanbagheri نمایش پست ها
            سلام
            از این دستور استفاده کن تبدیل به رشته میشه


            sprintf(buffer,"value=%f",val); m
            قبلش حتما این فایل رو اینکلاد کن stdio.h
            این دستور رو زدم ولی روی ال سی دی هیچی نشون نمی ده (یه جا گفته بودن از تنظیمات کامپایلر؟؟)
            من تازه ARM رو شروع کردم خیلی به تنظیماتش وارد نیستم
            اساتید ARM لطفا جواب بدن
            جدیدترین ویرایش توسط Mojtababm66; ۱۲:۴۰ ۱۳۹۵/۰۴/۱۲.

            دیدگاه


              #7
              پاسخ : نمایش اعداد اعشاری

              فایل main برنامه رو بده واست درستش کنماینطوری نمیشه فقط فایل اصلی رو بذار اینجابدون ارور کامپایل شد؟میتونی کاراکتر نمایش بدی رویه lcd ?

              دیدگاه


                #8
                پاسخ : نمایش اعداد اعشاری

                نوشته اصلی توسط ehsanbagheri نمایش پست ها
                فایل main برنامه رو بده واست درستش کنماینطوری نمیشه فقط فایل اصلی رو بذار اینجابدون ارور کامپایل شد؟میتونی کاراکتر نمایش بدی رویه lcd ?
                main(void)
                {
                lcd_init();
                lcd_clear();
                while (1)
                {
                char buffer_1[64], buffer_2[64];
                float out= 12.456;
                sprintf(buffer_2,"output: %f",out);
                lcd_gotoxy(0,0);
                lcd_print(buffer_2);
                }
                }

                این برنامه اصلی هست ولی هیچ چیزی روی lcd نشون نمی ده چرا آخه ؟
                هیچ اروری هم نداره فقط وقتی به جای F% و d% رو قرار می دم یه OUTPUT خالی رو LCD مینویسه

                دیدگاه


                  #9
                  پاسخ : نمایش اعداد اعشاری

                  sprintf(buffer_2,"output: %3.3f",out);
                  این رو هم تست کن ببین فرقی میکنه

                  دیدگاه


                    #10
                    پاسخ : نمایش اعداد اعشاری

                    نوشته اصلی توسط ehsanbagheri نمایش پست ها
                    sprintf(buffer_2,"output: %3.3f",out);
                    این رو هم تست کن ببین فرقی میکنه

                    نه فرقی نکرد
                    می خواستم بدونم اصلا توی ARM میشه همچین کاری کرد یا نه ؟
                    من کل نت زیر و رو کردم هیچی پیدا نشد.

                    دیدگاه


                      #11
                      پاسخ : نمایش اعداد اعشاری

                      بله میشه خیلی زیاد استفاده کردم ازش مسئله این نیست که آرم هست یا میکرو دیگه
                      این کتابخونه استاندارد هست و میشه تو هر کامپایلری که زبان c باشه ازش استفاده کرد
                      فقط باید این دستور رو بنویسی #hnclude <stdio.h>

                      دیدگاه


                        #12
                        پاسخ : نمایش اعداد اعشاری

                        نوشته اصلی توسط ehsanbagheri نمایش پست ها
                        بله میشه خیلی زیاد استفاده کردم ازش مسئله این نیست که آرم هست یا میکرو دیگه
                        این کتابخونه استاندارد هست و میشه تو هر کامپایلری که زبان c باشه ازش استفاده کرد
                        فقط باید این دستور رو بنویسی #hnclude <stdio.h>
                        من از نرم افزار keil استفاده می کنم ممکن از اون باشه

                        دیدگاه


                          #13
                          پاسخ : نمایش اعداد اعشاری

                          نه به کامپایلر ربط نداه باید کار کنه ممکنه کتابخونه مشکل داشته باشه

                          دیدگاه


                            #14
                            پاسخ : نمایش اعداد اعشاری

                            نوشته اصلی توسط ehsanbagheri نمایش پست ها
                            نه به کامپایلر ربط نداه باید کار کنه ممکنه کتابخونه مشکل داشته باشه
                            من خیلی لازم دارم می خوام یه پروژه adc بنویسم (البته نوشتم ) ولی خب مقادیر و به صورت صحیح نشون می ده نمی دونم حالا چی کار کنم؟

                            دیدگاه


                              #15
                              پاسخ : نمایش اعداد اعشاری

                              نوشته اصلی توسط Mojtababm66 نمایش پست ها
                              من خیلی لازم دارم می خوام یه پروژه adc بنویسم (البته نوشتم ) ولی خب مقادیر و به صورت صحیح نشون می ده نمی دونم حالا چی کار کنم؟
                              یعنی مشخص نیست این مشکل من از چیه؟
                              هیچی پس فکر کنم بدبخت شدم

                              دیدگاه

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