ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 20
  1. #1
    2016/06/26
    26
    4

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

    سلام من این برنامه رو توی 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 : 2016/07/01 در ساعت 13:13
  2. #2
    2011/11/30
    75
    46

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

    سلام
    ابتدا باید عدد اعشاری (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. #3
    2016/06/26
    26
    4

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

    نقل قول نوشته اصلی توسط 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. #4
    2016/06/26
    26
    4

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

    نقل قول نوشته اصلی توسط Mojtababm66

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    دوست عزیز شما خودت این برنامه رو اجرا کردی ؟ چون من که اجرا کردم اون buffer_1 و buffer_2 رو ارور داد.
    اینم عکسش:

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    آقا یکی کمک کنه من یه عدد ساده اعشاری رو نمی تونم نمایش بدم
    هرچی دستور زدم جواب نداده
    من چی کار کنم آخه؟
  5. #5
    2011/08/07
    اصفهان
    977
    70

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

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


    sprintf(buffer,"value=%f",val); m
    قبلش حتما این فایل رو اینکلاد کن stdio.h
    ویرایش توسط ehsanbagheri : 2016/07/02 در ساعت 10:49
  6. #6
    2016/06/26
    26
    4

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

    نقل قول نوشته اصلی توسط ehsanbagheri

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

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


    sprintf(buffer,"value=%f",val); m
    قبلش حتما این فایل رو اینکلاد کن stdio.h
    این دستور رو زدم ولی روی ال سی دی هیچی نشون نمی ده (یه جا گفته بودن از تنظیمات کامپایلر؟؟)
    من تازه ARM رو شروع کردم خیلی به تنظیماتش وارد نیستم
    اساتید ARM لطفا جواب بدن
    ویرایش توسط Mojtababm66 : 2016/07/02 در ساعت 11:40
  7. #7
    2011/08/07
    اصفهان
    977
    70

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

    فایل main برنامه رو بده واست درستش کنماینطوری نمیشه فقط فایل اصلی رو بذار اینجابدون ارور کامپایل شد؟میتونی کاراکتر نمایش بدی رویه lcd ?
  8. #8
    2016/06/26
    26
    4

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

    نقل قول نوشته اصلی توسط 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. #9
    2011/08/07
    اصفهان
    977
    70

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

    sprintf(buffer_2,"output: %3.3f",out);
    این رو هم تست کن ببین فرقی میکنه
  10. #10
    2016/06/26
    26
    4

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

    نقل قول نوشته اصلی توسط ehsanbagheri

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

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

    نه فرقی نکرد
    می خواستم بدونم اصلا توی ARM میشه همچین کاری کرد یا نه ؟
    من کل نت زیر و رو کردم هیچی پیدا نشد.
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 20

موضوعات مشابه

  1. نمایش اعداد خیلی بزرگ و اعشاری
    توسط shabahang در انجمن میکروکنترلرهای AVR
    پاسخ: 10
    آخرين نوشته: 2018/09/04, 13:51
  2. پاسخ: 10
    آخرين نوشته: 2016/03/28, 22:50
  3. اعداد اعشاری
    توسط samaneh.r در انجمن Matlab
    پاسخ: 1
    آخرين نوشته: 2013/10/30, 07:20
  4. نمایش اعداد اعشاری با چند آی سی 7448
    توسط singleboy در انجمن مفاهیم پایه برق و الکترونیک
    پاسخ: 2
    آخرين نوشته: 2011/03/17, 16:16
  5. نمایش اعداد اعشاری روی ال سی دی با میکروسی
    توسط BABR در انجمن میکروکنترلرهای PIC
    پاسخ: 1
    آخرين نوشته: 2011/01/14, 01:18

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •