
یکی از مشکلات رایج در استفاده از lcd های کاراکتری نمایش اعداد با فرمت های مختلف است.کاربرانی که با میکروکنترلرهای avr کار می کنند اغلب از کامپایلر کدویژن استفاده می کنند .در کدویژن نمایش اعداد float بر روی lcd به دلیل محدودیت فضای رم در این میکروکنترلرها به صورت پیش فرض غیر فعال می باشد و کاربر باید قبل از استفاده از توابع مربوط به نمایش اعداد اعشاری این امکان را در محیط کدویژن فعال کند.به منظور فعال کردن این امکان ابتدا تنظیمات زیر را در محیط کدویژن انجام دهید:


مثال :
فرض کنید قصد نمایش عدد اعشاری x با یک رقم صحیح و یک رقم اعشار را دارید.
char buf[10]; float x=3.123456; sprint(buf,"%1.1f",x); lcd_puts(buf);
خروجی : 3.1
تابع sprintf مقدار عددی شما را با فرمت مشخص به یک عبارت رشته ای تبدیل می کند.و تابع ()lcd_puts این مقدار را بر روی lcd چاپ می کند.ورودی دوم تابع ()sprint فرمت را مشخص می کند .عبارت 1.1f% به معنای تبدیل عدد x به صورت یک عبارت متنی با یک رقم صحیح و یک رقم اعشار است. اگر بخواهید عدد نمایش به صورت یک رقم صحیح و دو رقم اعشار باشد باید این عبارت را برابر 1.2f% قرار دهید .
تابع sprint() برای نمایش اعداد مختلف با فرمت های مختلف به صورت زیر است.
-نمایش عدد x به صورت عدد صحیح:
char buf[10]; int x=10; sprint(buf,"%d",x); lcd_puts(buf);
خروجی : 10
-نمایش عدد x در مبنای هگز با حروف کوچک :
char buf[10]; int x=10; sprint(buf,"%x",x); lcd_puts(buf);
خروجی : a
– نمایش عدد x در مبنای هگز با حروف بزرگ:
char buf[10]; int x=10; sprint(buf,"%X",x); lcd_puts(buf);
خروجی : A
– نمایش عدد ۳۲ بیتی از نوع long :
char buf[10]; long l=105400; sprint(buf,"%ld",L); lcd_puts(buf);
خروجی : 105400
سلام ، روی مگا۳۲۸ درست کار میکنه ولی روی مگا۸ کار نمیکنه،دلیل خاصی داره ایا؟
سلام
ارتباطی به نوع میکرو نداره. باید تنظیمات رو در کدویژن درست انجام بدید.
سلام و تشکر.برا atmega8 دوستان باید علاوه بر این کارها اون عدد RAM ر ا از 256 به 512 تغییر دهید. همین
درود و سپاس دوست عزیز درست شد
سلام
در نرم افزار atmel studio نحوه این تنظیمات چطوریه میشه راهنمایی کنید لطفا
ممنونم از شما
داداش راست میگه تو atmega 8 جواب نمیده
مشکل از چیه
من همه چی رو امتحان کردم نمیشه
نمی دونم چرا اگه دوستان راه حلی دارن بگن واقعا موندم اعصابم خود شده😡😡
سلام
درصورتی که حجم برنامه زیاد باشد . نمی توان از این امکان استفاده کرد. تابع sprintf حدود 2 کیلوبایت فضای حافظه فلش را اشغال می کند در حالی که کل فضای حافظه برای atmega8 فقط 4 کیلوبایت است.
سلام.اگه بخایم متغیر x رو در داخل برنامه کم و زیاد کنیم یعنی با یک عدد صحیح و یک عدد اعشارو با دوتا کلید کم و زیاد کنیم.
لطفا یه راهنمایی کنید.l
سلام
if(key1)
{
f+=0.1;
while(key1){}
}
if(key2)
{
f-=0.1;
while(key2){}
}
سلام.اگه بخوایم متغیر x رو که یک عدد اعشاریه مثلا 2.45 روبا استفاده از دوتا کلید کم و زیاد کنیم چطوریه؟
لطفا یه کمکی بکنید.ممنون
پاسخ در نظرات قبل