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

[C] Kasowanie zera przy liczbach jednocyfrowych

-nobile- 01 Kwi 2010 16:56 936 3
  • #1 7907699
    -nobile-
    Poziom 16  
    Program wyświetla mi zero (po liczbie) jednocyfrowej
    np. zamiast 3 jest 30 (oczywiście wartość zmiennej jest poprawna tylko tak przetwarza chyba itoa).
    Reszta liczb jest wyświetlana poprawnie.
    Nie mogłem znaleźć odp na elektrodzie.
    Co zrobić żeby była wyświetlana liczba jednocyfrowa jako pojedyncza liczba a nie 01 czy 10

    Jeśli potrzeba to kod programu daje poniżej.

    #include<avr/io.h>
    #include<delay.h>
    #include "HD44780.h"
    #include "HD44780.c"
    #include "itoa.h"
    
    int main()
    {
    	DDRB = 0x00;
    	PORTB = 0xFF;
    
    	TCCR1B |= (1 << WGM12);				//tryb CTC Timera
    	OCR1A = 15625; 							//flaga co 1Hz
    	TCCR1B |= (1 << CS10) | (1 << CS11);	//preskaler 64
    	
    	LCD_Initalize();
    	LCD_Home();
    	LCD_WriteText("PRACA:");
    	LCD_GoTo(0,1);
    	LCD_WriteText("PRZERWA:");
    	
    	int licznik = 0;
    	int praca = 0;
    	int przerwa < 0;
    	int czasy = przerwa + praca;
    	int pomocnicza = 0;
    	char bufor[16];
    	char bufor1[16];
    	
    	while(1)
    	{
    		LCD_GoTo(10,0);
    		itoa(praca, bufor,10);
    			LCD_WriteText(bufor);
    		LCD_GoTo(10,1);	
    		itoa(przerwa, bufor1,10);
    			LCD_WriteText(bufor1);
    
    		
    
       if((!(PINB & 0x01)) && (pomocnicza == 0))
       {
          praca++;
          _delay_ms(20);
       }
       else if((!(PINB & 0x02)) && (pomocnicza == 0))
       {
          praca--;
          _delay_ms(20);
       }
       else if((!(PINB & 0x01)) && (pomocnicza == 1))
       {
          przerwa++;
          _delay_ms(20);
       }
       else if((!(PINB & 0x02)) && (pomocnicza == 1))
       {
          przerwa--;
          _delay_ms(20);
       } 
    	else if(!(PINB & 0x04))
    	{
    		pomocnicza++;
    		_delay_ms(20);
    	}
    	else if(pomocnicza > 2)
    	{
    		pomocnicza = 0;
    		
    	}
    
    
    		
    
    
    	
    	if(licznik <= praca)
    	{
    	
    	
    	}
    	
    	else if((licznik > praca) && (licznik <= czasy))
    	{
    	
    	
    	}
    	
    	else if(licznik > czasy)
    	{
    		licznik = 0;
    	
    	
    	}
    	
    		if(TIFR & (1 << OCF1A))
    	
    		{
    			licznik++;
    	
    			TIFR = (1 << OCF1A);
    		}
    	}
    
    
    }
    
  • #2 7907722
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Założę się, że masz błąd w funkcji wypisującej to na LCD, no ale skoro nie podałeś odpowiedniego kodu, to nic więcej nie napiszę. Kolejny temat z serii "znalazłem błąd kompilatora", tyle że tym razem w standardowej funkcji itoa()... tia...

    Drugi typ - pewnie piszesz jednocyfrową liczbę w miejsce gdzie przed chwilą była liczba dwucyfrowa, nie zamazując drugiej cyfry.

    4\/3!!
  • #3 7908390
    -nobile-
    Poziom 16  
    To jednak była wina tego drugiego, chociaż z drugiej strony nie wiem czemu nie zostawało zero po liczbie 100 tylko zostaje zero po liczbie 10.
    poradziłem sobie wpisując biały znak za liczba, może macie inny sposób?
  • #4 7908956
    Dr.Vee
    VIP Zasłużony dla elektroda
    Nie ma innego sposobu.
    Możesz zawsze wykorzystać [s]printf() i automatycznie obsługiwać dowolną liczbę spacji/zer.

    Pozdrawiam,
    Dr.Vee
REKLAMA