Datum: 30.06.2008 11:02
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!
Datum: 30.06.2008 11:05
die Stellen entsprechen ihrer Wertigkeit addieren und das Ergebnisregister (bzw. die Variable) runterzählen. bye Frank
Datum: 30.06.2008 11:06
Ja. Die Möglichkeit gibts, genauso wie es hier im Forum [ c ] gibt, um C-Code farblich hervorzuheben.
char digits[4]; uint16_t counter = 0; uint8_t i; for (i = 0; i < 4; i++) { counter *= 10; counter += digits[i]; } |
Sowas in dem Dreh.
Datum: 30.06.2008 11:14
Okay aber uint16_t --> 16Bit 2hoch16 = 65.536 Meine Zahl ist aber 999.999 Ich brächte mindestens 17 Bit (-: für das Ergebnisregister
Datum: 30.06.2008 11:23
Stefan Z. wrote: > Okay aber uint16_t --> 16Bit 2hoch16 = 65.536 Meine Zahl ist aber > 999.999 Ich brächte mindestens 17 Bit (-: für das Ergebnisregister Und? nimm halt uint32_t ...
Datum: 30.06.2008 12:03
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);
Datum: 30.06.2008 12:05
Das Problem liegt vermutlich eher in "itoa". Probier dein Glück mal mit "ultoa".
Datum: 30.06.2008 12:11
ich danke dir --> ultoa hat funktioniert! echt klasse wie schnell man hier im Forum hilfe bekommt! DANKE!!!!
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel