logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[atmega8515][AVR GCC] Duże liczby wyświetlane na LCD

czopas 01 Paź 2008 10:31 1967 2
REKLAMA
  • #1 5587749
    czopas
    Poziom 12  
    Witam.

    Mam taką zagwostkę. Muszę w moim programie pracować na dużych liczbach. Te duże liczby również muszą być wyświetlane na wyświetlaczu LCD. Dla liczb do wartości 32767 wszystko jest OK. Schody zaczynają się gdy zaczynam operować na większych liczbach. Próbowałem zmieniać rozmiary liczb tak, żeby mieściły się w odpowiednich granicach ale nic to nie daje.

    Próbuje wywołać np. takie wartości liczb:
    
    	uint8_t a=100, b=200, e;
    	uint16_t c=200, d=600, f;
    	uint32_t g;
    	
    		lcd_cls();
    		lcd_xy(1,1);
    		g=(uint32_t)c*d;
    		lcd_dec(g);	


    Zamieszczam procedury obsługi wyświetlacza LCD, bo prawdopodobnie gdzieś tam umieszczony jest błąd. Bardzo proszę o pomoc.
  • REKLAMA
  • #2 5587832
    szelus
    Poziom 34  
    Cytat:
    
    void lcd_dec(float val)
    {
    	float bufor[7];
    	lcd_str(itoa(val, bufor, 10));
    }
    



    Co to ma być, to powyżej? Dlaczego bufor zadeklarowny jest jako float[], a nie char[]? Po co Ci konwersja na float i z powrotem na integer? Masz za dużo wolnej pamięci? :wink:
    Bufor na stosie to też taki sobie pomysł.

    Główny jednak problem w tym, że itoa() przyjmuje tylko 16 bitowy integer. Sugeruję to wszystko przerobić:

    
    void lcd_dec(long val)
    {
    	char  bufor[12];
    	lcd_str(ltoa(val, bufor, 10));
    }
    
    
  • #3 5587868
    czopas
    Poziom 12  
    Cytat:
    Co to ma być, to powyżej? Dlaczego bufor zadeklarowny jest jako float[], a nie char[]? Po co Ci konwersja na float i z powrotem na integer? Masz za dużo wolnej pamięci? Wink
    Bufor na stosie to też taki sobie pomysł.


    No to co tam znalazłeś to pozostałości po moich bezskutecznych próbach rozwiązania tego problemu. Oczywiście były to skrajne nieporozumienia :)

    Ale faktycznie zastosowanie ltoa zamiast itoa rozwiązało problem.

    Dzięki wielkie i pozdrawiam !
REKLAMA