Avatar
Filip
Člen
Avatar
Filip:

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. dubna 22:36
 
Odpovědět 8. dubna 22:36
Avatar
MrPabloz
Člen
Avatar
Odpovídá na Filip
MrPabloz:

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. dubna 23:32
Nahoru Odpovědět 8. dubna 23:31
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
B42P6
Člen
Avatar
Odpovídá na MrPabloz
B42P6:

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. dubna 23:54
Nahoru Odpovědět 8. dubna 23:53
'long long long' is too long for GCC
Avatar
Filip
Člen
Avatar
Filip:

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. dubna 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.