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





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









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





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

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 11
  1. #1
    2011/08/03
    193
    50

    نمايش عدد اعشاري روي lcd توسط MPLABE

    سلام دوستان

    يه مدتي گرفتار بودم نرسيدم سر بزنم

    دوتا سوال داشتم

    1- چه طوري ميشه اعداد عشاري رو روي LCD نشون داد منظورم اينه که دستوري داره که بشه اونومستقيم نشون داد ؟؟؟ نخوايم خودمون برنامه بنويسيم

    2- يه مشکل ديگه مثلا وقتي يه عدد 4 رقمي رو داخل سطر 1 نشون بديم بعد همون جا يه عدد دو رقمي نشون بديم دوتا از رقماي عدد چهار رقمي باقي

    ميمونه که نبايد باشه داخل CODE VISION وقتي ميخواستيم اين کارو بکنيم اين دستورو مينوشتيم sprintf(buff,"20%C",0) 3

    اينجا جواب نميده بايد چي کار کرد ؟؟؟
    عامل کليدي تمام موفقيتها " عمل کردن" است
  2. #2
    2009/02/18
    تهران
    270
    1

    پاسخ : نمايش عدد اعشاري روي lcd توسط MPLABE

    با سلام خدمت جناب alimohammad_sh


    پاسخ دو سوال شما در فراگیری کامل دستور sprintf میباشد
    به وسیکه این دستور میتوانید تمامی این مشکلات را حل کنید


    فرض کنید یک شمارنده دو بایتی به نام cont دارید و اعداد بین 0 تا 50000 تغییر میکنند , پس تعداد کاراکتر های اعداد بین 1 تا 5 عدد هست

    حال به دستور زیر دقت کنید


    sprintf(buf,"cont = %5d ", cont);

    شناسه %5d پنج کاراکتر را برای شمارنده شما رزرو میکند

    در دستورالعمل این دستور آمده است که شما میتوانید اعدادی با ممیز شناور را نیز به کاراکتر تبدیل کنید , که برای اطلاعات بیشتر دستور sprintf را در هلپ mplab سرچ کنید

    :-B
    نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
    تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه
  3. #3
    2011/08/03
    193
    50

    پاسخ : نمايش عدد اعشاري روي lcd توسط MPLABE

    با سلام
    با تشکر از قاي رمضاني

    اقا من توضيحات sprintf رو نگاه کردم ولي عدد اعشاري نتونستم روي lcd نشون بدم

    بايد از دستوري ديگه اي هم استفاده کنم ؟؟
    عامل کليدي تمام موفقيتها " عمل کردن" است
  4. #4
    2011/01/21
    ساری - ایران
    150
    7

    پاسخ : نمايش عدد اعشاري روي lcd توسط MPLABE

    نقل قول نوشته اصلی توسط alimohammad_sh
    سلام دوستان

    يه مدتي گرفتار بودم نرسيدم سر بزنم

    دوتا سوال داشتم

    1- چه طوري ميشه اعداد عشاري رو روي LCD نشون داد منظورم اينه که دستوري داره که بشه اونومستقيم نشون داد ؟؟؟ نخوايم خودمون برنامه بنويسيم

    2- يه مشکل ديگه مثلا وقتي يه عدد 4 رقمي رو داخل سطر 1 نشون بديم بعد همون جا يه عدد دو رقمي نشون بديم دوتا از رقماي عدد چهار رقمي باقي

    ميمونه که نبايد باشه داخل CODE VISION وقتي ميخواستيم اين کارو بکنيم اين دستورو مينوشتيم sprintf(buff,"20%C",0) 3

    اينجا جواب نميده بايد چي کار کرد ؟؟؟
    1-طول میدان مقادیر اعشاری به صورت w.df% بیان میشه که در اون w طول کل میدان و d طول قسمت اعشاره.
    به عنوان مثال وقتی میدان رو به صورت 4.1f% بیان میکنیم یعنی دو رقم صحیح و یک رقم برای کاراکتر"." و یک رقم برای اعشار داریم. توجه کنید که برای رقم اعشار حتما باید از کارکتر کنترلی F استفاده کنید نه C.

    2- برای حل مشکل اعداد باقیمانده راحت ترین کار اینه که به تعداد کل ارقام حد اکثر عددی که میخواهیم نمایش بدیم منهای یک رقم از کارکتر space ( خالی) استفاده کنیم. مثلا چنانچه عدد شما عدد صحیح باشه و از 0 الی 9999 تغییر میکنه باید بعد از کارکتر کنترلی، 3 بار space قرار بدید، این عمل معادل تعیین طول میدان( تعداد حداکثر ارقام ) است:

    کد:
    sprintf(buff,"%d  ",var1)
    راه حل دیگه اینه که قبل از نمایش رقم جدید ابتدا صفحه LCD رو پاک کنید ، ولی چنانچه سرعت تغییرات عدد زیاد باشه صفحه LCD هم باید مکررا پاک بشه که به صورت چشمک زن در میاد.
  5. #5
    2011/08/03
    193
    50

    پاسخ : نمايش عدد اعشاري روي lcd توسط MPLABE

    نقل قول نوشته اصلی توسط Perfect
    1-طول ميدان مقادير اعشاري به صورت w.df% بيان ميشه که در اون w طول کل ميدان و d طول قسمت اعشاره.
    به عنوان مثال وقتي ميدان رو به صورت 4.1f% بيان ميکنيم يعني دو رقم صحيح و يک رقم براي کاراکتر"." و يک رقم براي اعشار داريم. توجه کنيد که براي رقم اعشار حتما بايد از کارکتر کنترلي F استفاده کنيد نه C.

    2- براي حل مشکل اعداد باقيمانده راحت ترين کار اينه که به تعداد کل ارقام حد اکثر عددي که ميخواهيم نمايش بديم منهاي يک رقم از کارکتر space ( خالي) استفاده کنيم. مثلا چنانچه عدد شما عدد صحيح باشه و از 0 الي 9999 تغيير ميکنه بايد بعد از کارکتر کنترلي، 3 بار space قرار بديد، اين عمل معادل تعيين طول ميدان( تعداد حداکثر ارقام ) است:

    کد:
    sprintf(buff,"%d  ",var1)
    راه حل ديگه اينه که قبل از نمايش رقم جديد ابتدا صفحه LCD رو پاک کنيد ، ولي چنانچه سرعت تغييرات عدد زياد باشه صفحه LCD هم بايد مکررا پاک بشه که به صورت چشمک زن در مياد.
    با تشکر

    من اين رو نوشتم ولي جواب نگرفتم

    cont=45.2;
    while( BusyXLCD() );
    sprintf(buf,"%4.1f",cont);
    putsXLCD(buf);
    عامل کليدي تمام موفقيتها " عمل کردن" است
  6. #6
    2009/02/18
    تهران
    270
    1

    پاسخ : نمايش عدد اعشاري روي lcd توسط MPLABE

    سلام

    ببخشید که دیر پاسخ میدم , بدجوری سرم شلوغه :redface:

    طبق کتاب خانه های C استاندارد این دستور باید بدون مشکل این کار رو انجام بده

    http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

    اما مشکلی وجود داره

    mplab c18 با دستور sprintf مشکل داره :surprised:

    تا انجا که من متوجه شدم کلا متغیر های بیش از 16 بیت رو نمیتونه به کاراکتر تبدیل کنه :sad: من نمیدونم این مشکل یک باگ نرم افزاری هست یا اینکه چاره ی خاصی داره ؟!

    با استفاده از کتاب خانه stdlib.h مشکل کامل حل میشه , اما C18 به صورت کامل از این کتاب خانه پشتیبانی نمیکنه
    با استفاده از دستور ftoa در کتاب خانه stdlib.h میتوان این کار رو انجام داد , اما ظاهرا فقط کامپایلر HI-TECH از این دستور پشتیبانی میکنه

    دستور ftoa را در هلپ mplab سرچ کنید

    به لینک زیر دقت کنید

    http://www.cplusplus.com/reference/clibrary/cstdlib/


    البته ممکنه ابن مشکل در سری XC کامپایلر های میکروچیپ حل شده باشه

    من فرصت نکردم این موضوع رو در فروم میکروچیپ سرچ کنم , اما فکر میکنم باید راه حل خاصی داشته باشه , و درکل نوشتن این چنین کتاب خانه ای کار مشکلی نیست

    نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
    تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه
  7. #7
    2011/01/21
    ساری - ایران
    150
    7

    پاسخ : نمايش عدد اعشاري روي lcd توسط MPLABE

    نقل قول نوشته اصلی توسط ramezani.t


    mplab c18 با دستور sprintf مشکل داره :surprised:

    تا انجا که من متوجه شدم کلا متغیر های بیش از 16 بیت رو نمیتونه به کاراکتر تبدیل کنه :sad: من نمیدونم این مشکل یک باگ نرم افزاری هست یا اینکه چاره ی خاصی داره ؟!
    البته ممکنه ابن مشکل در سری XC کامپایلر های میکروچیپ حل شده باشه
    یک نکته اساسی رو باید مورد توجه قرار بدید: تقریبا در همه کامپایلر های C به صورت پیشفرض فرمت دستور sprintf و printf رو به صورت integer ( در بعضی دیگه به صورت small یا medium هست) تعریف شده. به دلیل اینکه استفاده از دستور sprintf حجم زیادی از رم و حافظه کد رو اشغال میکنه و اگر برای اعداد اعشاری ممیز شناور استفاده بشه این حجم اشغالی چند برابر میشه. بنا بر این با این تنظیمات پیشفرض کامپایلر نمیتونه عدد اعشاری رو به درستی به صورت کارکتر در بیاره. در این مورد باید در قسمت Options کامپایلر اولا تنظیمات مربوط به فرمت دستور sprintf رو به صورت float ( یا Large و یا Auto ) قرار بدید. و ثانیاً مقدار حافظه های CSTACK و RSTACK و همینطور Heap Size رو حد اقل دو برابر کنید.
  8. #8
    2011/08/03
    193
    50

    پاسخ : نمايش عدد اعشاري روي lcd توسط MPLABE

    نقل قول نوشته اصلی توسط Perfect
    يک نکته اساسي رو بايد مورد توجه قرار بديد: تقريبا در همه کامپايلر هاي C به صورت پيشفرض فرمت دستور sprintf و printf رو به صورت integer ( در بعضي ديگه به صورت small يا medium هست) تعريف شده. به دليل اينکه استفاده از دستور sprintf حجم زيادي از رم و حافظه کد رو اشغال ميکنه و اگر براي اعداد اعشاري مميز شناور استفاده بشه اين حجم اشغالي چند برابر ميشه. بنا بر اين با اين تنظيمات پيشفرض کامپايلر نميتونه عدد اعشاري رو به درستي به صورت کارکتر در بياره. در اين مورد بايد در قسمت Options کامپايلر اولا تنظيمات مربوط به فرمت دستور sprintf رو به صورت float ( يا Large و يا Auto ) قرار بديد. و ثانياً مقدار حافظه هاي CSTACK و RSTACK و همينطور Heap Size رو حد اقل دو برابر کنيد.

    ميشه بگيد از کجا بايد اين تنظيماتو تغيير بدم پيدا نکردم ؟؟
    عامل کليدي تمام موفقيتها " عمل کردن" است
  9. #9
    2008/10/29
    2,098
    219

    پاسخ : نمايش عدد اعشاري روي lcd توسط MPLABE

    سلام
    من قبلا با این دستور گیر افتادم و از چندین تن از اشخاص اصلی میکروچیپ این سوال رو مطرح کردن جوابشون کامل رد پشتیبانی sprintf از دستورات اعشاری بوده هست و همشون از این دستور به عنوان با تاخیرترین و کندترین دستور یاد کردن ، پس کلی بگم از طرف غول های برنامه نویسی میکروچیپ رد شده و امکان پذیر نیست و استفاده از این دستور برای جاهایی با به چشم اوردن تاخیر این تابع قابل استفاده هست
    حتی در سایت اثبات شده است برای تبدیل یک عدد به کد اسکی تابع نوشته شده ریاضی با کلی شرط از این دستور 190 بار سریعتر عمل کرده است(80 سیکل در مقابل 15156 برای تبدیل یک عدد دو رقمی)

    برای این کار تابع رو به صورت زیر می تونین اصلاح کنین (در صورت تمایل)
    sprintf(msg, "%ld.%ld", (long) i, (long) fabs((i - (long) i)*100));
    که متغییر i متغییر اعشاریتون و عدد 100 بیانگر دو رقم بعد از اعشار هست که تبدیل رو براتون در متغییر آرایه ای msg می نویسد.
    و برای این منظور می تونین از تابع ftoa استفاده کنین
    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.
  10. #10
    2011/08/03
    193
    50

    پاسخ : نمايش عدد اعشاري روي lcd توسط MPLABE

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

    براي اين کار تابع رو به صورت زير مي تونين اصلاح کنين (در صورت تمايل)
    sprintf(msg, "%ld.%ld", (long) i, (long) fabs((i - (long) i)*100));
    که متغيير i متغيير اعشاريتون و عدد 100 بيانگر دو رقم بعد از اعشار هست که تبديل رو براتون در متغيير آرايه اي msg مي نويسد.
    و براي اين منظور مي تونين از تابع ftoa استفاده کنين
    ميشه يه توضيحي در موردش بديد ؟؟

    ممنون
    عامل کليدي تمام موفقيتها " عمل کردن" است
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 11

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

  1. مشکل نمايش اعداد اعشاري در lcd کدويژن
    توسط M_Cover در انجمن میکروکنترلرهای AVR
    پاسخ: 3
    آخرين نوشته: 2015/11/20, 19:16
  2. پاسخ: 2
    آخرين نوشته: 2013/08/28, 10:50
  3. نمايش عدد اعشاري در atmelstudio
    توسط aseok در انجمن میکروکنترلرهای AVR
    پاسخ: 3
    آخرين نوشته: 2013/07/23, 08:17
  4. نمايش عدد اعشاري روي lcd n96
    توسط msf@msf در انجمن ATMEL
    پاسخ: 2
    آخرين نوشته: 2011/07/06, 19:34
  5. برنامه نمونه نمايش اعداد اعشاري ( منفي و مثبت) در PIC Basic
    توسط arvinfx در انجمن میکروکنترلرهای PIC
    پاسخ: 0
    آخرين نوشته: 2008/12/17, 18:46

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

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

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

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

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