NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Přidání desetinných čísel do aplikace čerpací stanice - ATMEL

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Filip
Člen
Avatar
Filip:8.4.2016 22:36

Ahoj, přikládám zdroják čerpací stanice - programováno v Keilu. Nevím si rady s tím, jak přidat desetinná čísla. Mám stanovené ceny pohonných hmot jako desetinná, ale nevím, jak je zobrazit a použít ve výpočtu koncové ceny za natankování. Dále mi to tankuje pouze do 9l, pak odmítá zobrazovat 10,11 atd... Ve výpočtu koncové ceny ale počítá dále, takže je problém pouze se zobrazením. Děkuju za každou pomoc, jde mi totiž skoro o život :D

#include <REG8252.H>
#include <ATMEL_LCD.h>


void cekej (BYTE);
void natural ();
void diesel ();
void display();

BYTE stav=0,pockej=0,j,d,s;
int nadrz=0;



BYTE text1[] = "Diesel  27.3Kc/l  Natural 29.8Kc/l    ";
BYTE text2[] = "Vybran diesel";
BYTE text3[] = "Vybran natural";
BYTE text4[] = "Natankovano l: ";
BYTE text5[] = "Cena v Kc: ";


void int0 ()
interrupt 0{
stav=0;
  }
void int1 ()
interrupt 2{
if(nadrz==0)
stav=1;
  }


void ct1 ()
interrupt 3{
if(stav==1||stav==2)
{
if(pockej==0)pockej=1;
else pockej=0;
}
if(nadrz==0)stav=2;
}



void main ()
{
 P2=0;
 TMOD=0x61;
 TH1=TL1=0xFF;
 IE=0x8D;
 TR0=1;
 TR1=1;
 initLCD();
 setLCD(LCD_CUR_OFF);
 setLCD(LCD_CLR);

   while (1)
   {
                          while (stav==0)
                                {
                                display();
                                }

 while (stav==1&&pockej==0)
                                {
                                diesel();
                                }

while (stav==2&&pockej==0)
                                {
                        natural();
                                }
 }
 }

void display()
{
    pockej=0;



         textLCD(text1);
         while(stav==0);

}

void diesel()
{
  lineLCD(1, text2);
  lineLCD(2, text4);

    symbolLCD('0'+(nadrz%100/10));//desitky
    symbolLCD('0'+(nadrz%10));//jednotky
  nadrz+=1;
  cekej(2);


  if(nadrz>=6000||stav==0)
  {


        lineLCD(1, text4);
      symbolLCD('0'+(nadrz%100/10));//desitky
      symbolLCD('0'+(nadrz%10));//jednotky
        lineLCD(2, text5);
        nadrz=nadrz*3;
          symbolLCD('0'+(nadrz/100));//stovky
      symbolLCD('0'+(nadrz%100/10));//desitky
      symbolLCD('0'+(nadrz%10));//jednotky
        cekej(600);
        nadrz=0;
        stav=0;
  }

}

void natural()
{
  lineLCD(1, text3);
  lineLCD(2, text4);

    symbolLCD('0'+(nadrz%100/10));//desitky
    symbolLCD('0'+(nadrz%10));//jednotky
  nadrz+=1;
  cekej(2);

  if(nadrz>=6000||stav==0)
  {




        lineLCD(1, text4);
      symbolLCD('0'+(nadrz%100/10));//desitky
      symbolLCD('0'+(nadrz%10));//jednotky
        lineLCD(2, text5);
        nadrz=nadrz*3;
          symbolLCD('0'+(nadrz/100));//stovky
      symbolLCD('0'+(nadrz%100/10));//desitky
      symbolLCD('0'+(nadrz%10));//jednotky
        cekej(600);
        nadrz=0;
        stav=0;
  }

}

void cekej (BYTE x)
{
 TR0=1;
  while(x>0)
  {
     TF0=0;
    while(!TF0);
   x--;
  }
 TR0= 0;
}
Editováno 8.4.2016 22:36
 
Odpovědět
8.4.2016 22:36
Avatar
MrPabloz
Člen
Avatar
Odpovídá na Filip
MrPabloz:8.4.2016 23:31

Viz např. http://www.keil.com/…e_double.htm :)

Takže použít double místo int a mělo by to pak jet :)

Editováno 8.4.2016 23:32
Nahoru Odpovědět
8.4.2016 23:31
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
B42P6
Člen
Avatar
Odpovídá na MrPabloz
B42P6:8.4.2016 23:53

Niesu float a double pre takéto využitie nebezpečné ? (V tom zmysle že tam je nejaká odchylka od skutočnej hodnoty).

Editováno 8.4.2016 23:54
Nahoru Odpovědět
8.4.2016 23:53
'long long long' is too long for GCC
Avatar
Filip
Člen
Avatar
Filip:9.4.2016 11:41

Ok, díky, vyzkouším. S oběma problémy pomůže double místo int? Nemám u sebe přípravek, tak nemohu vyzkoušet.

 
Nahoru Odpovědět
9.4.2016 11:41
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.