Hallo, ich übe mich gerade an einem Thermometer mit dem AVR mega16 in C. Hab die messdaten soweit aufbereitet das ich nun eine Variable mit einem wert zwichen 0-600 habe wobei die letzte stelle immer die hinter dem komma ist. Das minuszeichen wird "manuell" hinzugefügt. Mein ganzes Problem ist jetzt das ich die werte im LCD mit komma oder punkt ausgeben will und ich nicht genau weis wie ich das anstellen soll. Der Plan war den wert in seine einzelnen zahlen zu spalten aber da weis ich auch nicht so recht wie ich das anstellen soll... Hat jemand ein vorschlag oder ansatz für mich wie ich das anstelle? Die LCD routine ist die von Peter Fleury. Gruß Torsten
int Wert; /* Wert enthaelt deinen Messwert, zb. 534 */ int Vorkomma = Wert / 10; /* 53 */ int Nachkomma = Wert % 10; /* 4 */ /* so und jetzt gibst Du die Zahlen einfach aus und schmuggelst noch ein ',' oder '.' dazwischen */ -------------------- /* oder du baust dir zuerst einen String zusammen und gibst den dann aus */ char buffer[20]; sprintf( buffer, "%d,%d", Vorkomma, Nachkomma );
Hallo karl heinz, vielen dank für die hilfe, werde deine lösung mal testen. So wie ich das sehe wird es aber damit gehen, man muss nur erst mal drauf kommen :-) Gruß Torsten
Genau dafür habe ich im Moment Funktionen fertig bekommen / relativ gut dokumentiert. Wenn Du mit Assembler was anfangen kannst, meld dich einfach. Gruß
Oder du nimmst diese Routine - die wandelt einen signed int in einen string - und druckst bei der Ausgabe einen Punkt vor der letzten Zahl im String... const uint16_t pot10[4] ={10,100,1000,10000}; void bi2dec(const int16_t sval, char *strg, uint8_t nzero) /* convert signed int16 value to a character string stringlength has to be 7 character -32765 + the final 0 if nzero==0, no leading zeros if nzero==1, with leading zeros */ { uint8_t dec,idx=4,odx=0; uint16_t val=sval; if (sval<0) { val=-sval; strg[odx++]='-'; } else if (nzero) { strg[odx++]=' '; } do { idx--; for (dec=0; val>=pot10[idx]; val-=pot10[idx]) { dec++; } nzero+=dec; if (nzero) strg[odx++]='0'+dec; } while(idx); strg[odx++]='0'+val; strg[odx]=0; }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.