اطلاعیه

Collapse
No announcement yet.

نمایش عدد اعشاری روی سون سگمنت

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

    نمایش عدد اعشاری روی سون سگمنت

    سلام بر دوستان عزیز
    من میخوام یه عدد اعشاری رو(با یه رقم اعشار) روی یه سون سگمنت 3 یا 4 تایی نمایش بدم،برا اینکار یه تابع نوشتم که تک تک رقمهای عدد مورد نظر رو جدا میکنه که به صورت زیر هستش:
    void cal(float input) {
    input*=10;
    a=(int)input%10;
    b=(int)input/10%10;
    c=(int)input/100%10;
    d=(int)input/1000;
    }
    اما مشکلی که هست اینه که یک رقم کمتر محاسبه میشه،مثلا اگه عددمون 20.3 باشه 20.2 نشون میده یعنی a به جای 3 ، 2 حساب میشه!
    ممنون میشم کمک کنین

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

    همین الان تابعتون رو تو اتمل استادیو دیباگ کردم . مشکلی نداره که با همون 20.3 متغییر a=3 میشه

    تابعتون مشکلی نداره ولی بنظرم خواناییش پایینه. اینجوری بهتر نیست؟(درضمن خیلی بهتره تو تابع متغییر سراسری مقداردهی نکنید و مثلا 3 تا int به صورت فراخوانی با ارجاع( Call by Refrence ) به تابع بدید یا اینکه مقدار خروجی تابع را توی یک استراکچر return کنید. )

    کد:
    void cal(float input) {
    	int i=input*10;
    	a=i%10;
    	i/=10;
    	b=i%10;
    	i/=10;
    	c=i%10;
    	i/=10;
    	d=i%10;
    }
    راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
    کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
    نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
    http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
    انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

    دیدگاه


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

      تابعی که نوشتینا امتحان کردم فرقی نکرد باز هم همون مشکل هست،هر دو تا تابع درستن اما نمیدونم چرا اینجوری میشه!!!

      دیدگاه


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

        نوشته اصلی توسط halford
        تابعی که نوشتینا امتحان کردم فرقی نکرد باز هم همون مشکل هست،هر دو تا تابع درستن اما نمیدونم چرا اینجوری میشه!!!
        داخل چه IDE و با چه کامپایلری کامپایل میکنید؟
        راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
        کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
        نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
        http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
        انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

        دیدگاه


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

          IDE چیه؟
          من تو codevision مینویسم.

          دیدگاه


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

            نوشته اصلی توسط halford
            IDE چیه؟
            من تو codevision مینویسم.
            IDE = Integrated Development Enviroment همون محیط برنامه نویسیتونه

            تو کدویژن هم امتحان کردم درسته : مقدار a=3 است. (تو برنامه تون صد در صد یه مشکلی هست ، بزارید بتون میگم اشکال کار کجاست)
            بفرمایید برنامه + شبیه سازی
            مقدار a به صورت باینری روی پورت A قرار میگیره. که خروجی رو پورت A میشه 0b00000011 که همون 3 دسیمال است.
            http://mortazavi91.persiangig.com/projects/0.rar

            راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
            کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
            نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
            http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
            انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

            دیدگاه


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

              آقا فهمیدم گیره کار کجاس! :biggrin:
              من برنامه را با avrstudio چک کردم و متوجه شدم زمانی که بطور مثال میگیم 20+0.1 ، حاصل 20.1 نمیشه!!! بلکه میشه 20.099998 !!!! و به خاطر همین بود که وقتی من این عدد رو در 10 ضرب میکردم و روی 7seg نشون میدادم یه رقم کمتر نمایش داده میشد!!
              نمیدونم تو C اینجوریه یا...!!؟؟ oo:

              دیدگاه

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