999.999 runterzählen mit ATMega16

OP #911406
Lesenswert?

Hallo Leute,

ich möchte eine Zahl --> 999.999 (neunhundert99tausendend999) 
runterzählen. Die Zahl habe ich vorher per Tastendruck (jede Stelle 
hoch/runter ok --> nächste Stelle) in ein char-Array eingelesen. Nun ist 
meine Frage wie ich diese Zahl runterzählen kann... Eine Möglichkeit 
wäre mit verschachtelten Schleifen zu arbeiten... z.B.

do{

    Cycles[5] = Cycles[5] - 1;
    set_cursor(5,1);
    lcd_data(Cycles[5]);

    long_delay(100);

  }while(Cycles[5]!=48);

    if(Cycles[4]!=48){

      Cycles[4] = Cycles[4] - 1;
      set_cursor(4,1);
      lcd_data(Cycles[4]);

      Cycles[5] = Cycles[5] + 9;
      set_cursor(5,1);
      lcd_data(Cycles[5]);
    }

Dies auf alle 6 Stelle anzuwenden würde jedoch viel zu lange dauern. 
Gibt es eine Möglichkeit das Array in eine long Zahl zu wandeln und 
diese dann einfach per -- Befehl runterzuzählen????

Vielen Dank schonmal für die Antworten!
Gast #911411
Lesenswert?

Ja. Die Möglichkeit gibts, genauso wie es hier im Forum [ c ] gibt, um 
C-Code farblich hervorzuheben.
1
char digits[4];
2
uint16_t counter = 0;
3
uint8_t i;
4

5
for (i = 0; i < 4; i++) {
6
  counter *= 10;
7
  counter += digits[i];
8
}

Sowas in dem Dreh.
OP #911469
Lesenswert?

super! Es funktioniert anscheinend... Aber leider kann die LCD_Display 
Funktion so große Zahlen nicht anzeigen. Ich verwende die Funktion 
lcd_string() aus dem gcc Tuturial --> oder geht das bei euch?

char Buffer[20];

zyklen_einlesen();

set_cursor(0,2);

lcd_data(Cycles[0]);
lcd_data(Cycles[1]);
lcd_data(Cycles[2]);
lcd_data(Cycles[3]);
lcd_data(Cycles[4]);
lcd_data(Cycles[5]);

uint32_t cycles_neu = 999999; // zum Test der LCD fkt
itoa( cycles_neu , Buffer, 10 );
set_cursor(0,1);
lcd_string(Buffer);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren