کدویژن آموزش نرم افزار

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

نمایش اعداد اعشاری در کدویژن
5 (100%) 4 votes

نوشتن عدد اعشاری روی LCD در کدویژن

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

در بسیاری از پروژه ها نیاز است تا یک یا چند عدد را به صورت اعشاری بر روی LCD نمایش دهیم. همانطور که می دانید در codevision اعداد اعشاری با نوع float ذخیره می شوند. اما ممکن است هنگام نمایش اعداد اعشاری روی lcd با مشکلاتی مواجه شده باشید. برای نمایش اعداد اعشاری در avr به زبان C چندین راه وجود دارد. یکی از راه های پیش رو که استفاده از آن بسیار ساده است ، استفاده از تابع sprintf برای تبدیل اعداد اعشاری به رشته است.

برای استفاده از تابع sprintf کافیست تا هدر فایل stdio.h را با دستور زیر به برنامه اضافه نمایید.

#include <stdio.h>

حالا می توانید در هر جای برنامه از این تابع استفاده کنید. پیشنهاد من اینست که اگر قصد نمایش عدد اعشاری روی lcd متنی را دارید یک متغیر بافر برای lcd ایجاد کنید. فرض کنید lcd 16 کارکتری در اختیار دارید. یک متغیر آرایه ای از نوع unsigned char با طول بیش از ۱۶ مثلا ۱۸ ( ۲ کارکتر برای overflow در نظر میگیریم ) ایجاد می کنیم.

unsigned char lcd_buff[18];

حالا با دستور sprintf می توانیم محتوای هر خط lcd را تولید و درون متغیر lcd_buff بریزیم و سپس محتوای این متغیر را با دستور lcd_puts روی lcd قرار دهیم.

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

Standard C Input/Output Functions

int sprintf(char *str, char flash *fmtstr [ , arg1, arg2, …])
همانطور که می بینید اولین پارامتر این تابع ، نام متغیری است که میخواهید خروجی در آن ذخیره شود. سپس یک متغیر فلش که محتوای دلخواه درون این متغیر قرار داشته باشد ، این متغیر می تواند دارای قسمت هایی باشد که با سایر متغیر ها تکمیل شود ( arg1 , arg 2 و … ) . اگر کمی پیچیده شد ، سخت نگیرید در ادامه متوجه منظورم خواهید شد.
فکر کنید یک متغیر به نام temp و از نوع float داریم که مقدار دما را درون آن ذخیره کرده ایم. فرض کنید مقدار دما دارای ۲ رقم صحیح و ۲ رقم اعشار است و مقدار آن برابر ۳۰٫۴۴ درجه سانتی گراد است. حالا میخواهیم این متغیر را بر روی lcd و به صورت اعشاری با استفاده از تابع sprintf نمایش دهیم.
فرض کنید میخواهیم روی LCD دما با فرمت زیر نمایش داده شود :
Temp: 30.44 °C
برای اینکه خروجی به شکل بالا باشه ، از دستورات زیر استفاده می کنیم.
sprintf(lcd_buff,”Temp: %4.2f \xdfC”,temp);
پارامتر اول ( lcd_buff ) محل ذخیره خروجی تابع sprintf رو مشخص می کنه . پارامتر دوم ، خروجی تابع رو مشخص میکنه ، در این قسمت این امکان هست که یک رشته شامل مقادیر ثابت و مقدار متغیر ها ایجاد کرد. \xdfCC برای نمایش °C هست و کارکتر درجه با کد \xdf روی lcd متنی قابل نمایش است. برای نمایش عدد اعشاری که شامل ۲ رقم صحیح و ۲ رقم اعشاری باشد باید از دستور %۴٫۲f استفاده نمود که فرمت استفاده از این دستور به شکل زیر است:
%[width].[precision]f
در فرمت بالا width طول کل عدد و precision تعداد ارقام اعشاری را مشخص می کند. برای مثال عدد مد نظر ما که دارای ۲ رقم صحیح و ۲ رقم اعشار است ، دارای طول ۴ و تعداد ارقام اعشاری ۲ است که به صورت زیر در می آید.
%۴٫۲f
دستور sprintf می تواند فرمت های دیگری مانند %u  اعداد صحیح بدون علامت ، %d و %i اعداد صحیح علامت دار ، %e اعداد علمی ، %x اعداد به فرمت هگزادسیمال ، %c کارکتر ، %s پوینتر رشته در رم و %p برای پوینتر رشته در فلش را در دومین پارامتر قبول کند. در حقیقت این علامت ها مانند یک جای خالی در پارامتر دوم است که پارامتر سوم و پارامتر های بعدی به ترتیب این جاهای خالی را پر میکنند.
در مثال بالا نیز یک جا خالی از نوع float با %f ایجاد شده است که پارامتر سوم یعنی temp آن را پر می کند.
حالا با دستور lcd_puts می توانیم خروجی را بر روی LCD نمایش دهیم .
lcd_puts(lcd_buff);
اما صبر کنید . ممکن است مشکلی در نمایش اعداد اعشاری روی LCD روی دهد و شما به جای %۴٫۲f تنها جای خالی روی LCD مشاهده کنید!
شاید بپرسید چرا این مشکل اتفاق می افتد اما پاسخ آن ساده و به تنظیمات کدویژن باز می گردد . زمانی که بخواهید اعداد اعشاری را از طریق sprintf به صورت متنی تبدیل کنید باید تنظیمات کدویژن را به صورت زیر تنظیم نمایید.
ابتدا از منوی project ، بر روی Configure کلیک کنید.
منوی Project کدویژن
حالا در پنچره ای که باز شده با تب C Compiler بروید ، در این تب به صورت پیشفرض قسمت Code Generation را مشاهده می نمایید که در قسمت سمت چپ پنجره یکی از لیبل ها عبارت sprintf Features را نمایش می دهد و یک جعبه کشویی در زیر آن قرار دارد که مقدار پیشفرض آن int , width می باشد اما برای تبدیل اعداد اعشاری به متن توسط sprintf باید از جعبه کشویی گزینه float , width , precision را انتخاب کنیم.
تنظیمات پروژه در کدویژن
با انجام این تنظیمات ، حالا پروژه شما آماده کامپایل و تست هست و به سادگی میتونید اعداد اعشاری رو در محیط کدویژن بر روی LCD نمایش بدید.
اگر بخواهید تنها عدد اعشاری رو به متن تبدیل کنید ، کافیه به شکل زیر عمل کنید.
sprintf(lcd_buff,”%4.2″,temp);
با انجام این کار عدد اعشاری temp به صورت متن در خواهد آمد و در قالب یک عدد ۴ رقمی شامل ۲ رقم صحیح و ۲ رقم اعشار داخل متغیر lcd_buff ( آرایه کارکتری ) ذخیره خواهد شد.
این مطلب را از دست ندهید  آموزش بسکام : جدول Lookup

درباره نویسنده

محمد حمیدی

علاقه مند به الکترونیک دیجیتال ، برنامه نویسی میکرو کنترلر ، طراحی و ساخت دستگاه های جدید ، کارآفرینی و سیستم سازی ;)

20 دیدگاه

دیدگاهتان را بنویسید