Ja also ich hab folgendes Problem bei dem ich nicht weiterkomme: Ich will bei einem µC vom Typ 80C535 und will Werte die ich vom A/D-C bekomme auf ein Display ausgeben... das Problem ist nun, das ich nicht weis wie ich die Zahl (Integer, immer 3 stellig) in die einzelnen Ziffern Zerlegen soll. Ich hatte 2 Ideen, die aber der µC scheinbar nicht unterstützt, bzw ich nicht weis in welcher Header ich diese Funktionen finde. 1) Char array char Zahl[4] Zahl[]= AD-Zahl SO nun meckert der Compiler weil in der Klammer keine Zahl steht. Deshalb wollte ich das Problem mit der Modulo Funktion Lösen: 2) x=(xyz - mod(xyz,100)) / 100 = Einstellige Zahl der 100er Stelle und so weiter bis ich alle 3 Stellen habe, jedoch find ich die mod Funktion nicht einmal in der hilfe (Ich verwende Keil) Währe über Hilfe erfreut ^^
Bzw wenn ich die Funktionen finden würde, steh ich vor noch einem Problem: Wenn ich schreibe Port1='A' gibt mein Display auch ein A aus. Wenn ich schreibe Port1=0x.. also in Hexa-Zahlen dann gehts. Aber solbald ich eine Zahl bzw Buchstaben in einer Char-Variable speicher gibte r irgendwas aus.... und deshalb glaub ich, dass ich die Integers zuerst in Hex umwandeln muss, aber hab leider keine Ahnung wie ich das machen soll... also wenns jemand weis bitte sagen danke ^^
Der Modulooperator ist %. Probier mal deine Zahl mit sprintf auf einen String zu kopieren. Damit würdest du dir das mit dem Modulo-Operator auch ersparen. mfg schoasch
Ich weiß nicht was Du machen willst: 'A' ist der Character 'A' d.h. die Zahl = 0x41 (65d) 0xA ist die Zahl A (oder 10d) und das ist ein Linefeed. 0x0 ist die Zahl 0 = 0x0 (0d) 0x1 ist die Zahl 1 = 0x1 (1d) '0' ist der Character '0' d.h. die Zahl 0x30 (48d) '1' ist der Character '1' d.h. die Zahl 0x31 (49d) Will ich die Zahl 1 in den Character '1' umwandeln dann hilft 1 + 0x30 Beispiel: int a = 1; char x; x = a + 0x30 oder x = a + '0' Hex oder Dezimal sind eine Schreibweise. Integers sind in Hex!! Gruß Reiner
Ich hab da was in der Codesammlung gefunden: http://www.mikrocontroller.net/forum/read-4-46127.html#new Peter
@Reiner: Ich versteh nicht ganz warum ich, wenn ich meine '1' als Integer gespiechert habe, 0x30 dazuzählen muss, um es in einer char variable speichern zu können? wenn ich schreibe cahr x=1, dann steht ja im x ne '1' drinnen? Oder ist das was du schreibst eine umwandlung, so dass dann in meiner char Variable ein hex wert steht?
@blawa: Man benutzt chars für zwei Dinge: a) Als kleine Zahlenvariable. Sowas wie int oder long, hat aber nur 8Bit. b) Um Buchstaben bzw. Texte (Array) zu speichern. Nun ist es leider so, dass die beiden Anwendungen nicht kompatibel sind. Bei Texten hat die Ziffer 1 den Wert 0x31, die Ziffer 2 den Wert 0x32 usw. Will Du von einer Anwendung zur anderen, dann mußt Du die Ziffern konvertieren. Dann macht man z.B. so wie Reiner beschrieben hat. Wenn Du char x = 1 schreibst, dann steht dort die Zahl 1 drin. Wenn Du dagegen char x = '1' schreibst, dann ist dort die (Text-)Ziffer 1 drin, die hat den Zahlenwert 0x31.
Ok danke erstmal an alle für die schnellen Antworten... ich mach erst am Do mit meinem Projekt weiter, werd dann alles ausprobieren und hoffe das alles klappt ^^
Ok habs mal ausprobiert, jedoch ist mir was merkwürdiges aufgefallen: wenn ich mache: for(;;) { int x[5]; char y[5]; n++; x[n]=n; y[n]=x[n]+0x30; P1=y[n]; if n==4 break; } funktioniert das ganze wunderbar, ausser wenn n=0 ist, da krieg ich auf meinem Port 1 0x60 raus... kann mir jemand erklären, wieso dass so ist?
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.