Hallo ich will eine Variable (unsigned char zeitH) die größer ist als 127 am LCD Display ausgeben. Ich verwende dafür folgenden Code: hundert=zeitH/100; zehn=(zeitH-hundert*100)/10; einser=(zeitH-hundert*100-zehn*10); Dazu wird immer 48 addiert für ascii. Wenn die Zahl kleiner als 127 ist, dann ist es kein Problem Ist Sie größer werden z.B für 128 /.( ausgegeben. => vermutlich ein Problem mit dem Vorzeichen. Wie kann ich das einfach umgehen?
Hallo, könnte man das ganze nicht auch mit Subtraktionen machen? So z.B.: 1. Solange 100 abziehen, wie zeitH >= 100 und hundert inkrementieren 2. Solange 10 abziehen, wie zeitH >= 10 und zehn inkrementieren 3. einser = Rest Das ganze ist denke ich auch schneller als die Lösung mit Divisionen und Multiplikationen. Aber vielleicht gibt es auch noch elegantere Lösungen. Viele Grüße, Ralf www.ralf-hochhausen.de
hundert=zeitH/100 | 0x30; zeitH=zeitH%100; zehner=zeitH/10 | 0x30; einer=zeitH%10 | 0x30;
Hallo danke für die Beiträge aber jetzt kommen nur noch komische Zeichen wenn ich die Variablen als integer verwende dann funktionierts! Ist allerdings nicht gerade elegant!
divisionen sind zumindest bei x86 richtige zeitfresser, modulos um ein vielfaches mehr. wie das aber beim avr ist weiss ich nicht... ich persönlich favorisiere ralf's lösung. vorzeichen: teste das MSb und bilde das 2erkomplement falls MSb gesetzt. also: hunderter=zehner=0; if( zeitH > 127 ) { //male hier das '-'Zeichen zeitH ^= 0xFF; //zweierkomplement zeitH++; //weil 0 hier -1 bedeutet } while( zeitH >= 100 ) zeitH -= (++hunderter)*100; while( zeitH >= 10) zeitH -= (++zehner)*10; einser=zeitH;
axo, damit das ganze funktioniert musst du vermutlich deine variablen als unsigned byte (!) (also unsigned char) definieren !!!
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.