Hallo Gibt es eine Möglichkeit, wie ich den Inhalt einer Variable zu seinem ASCII-Code umwandeln kann? (ohne printf!)
Jakob schrieb: > Gibt es eine Möglichkeit, wie ich den Inhalt einer Variable zu seinem > ASCII-Code umwandeln kann? Ja. Welchen Datentyp hat die Variable?
Probiers mal damit: http://www.mikrocontroller.net/articles/FAQ#itoa.28.29_.28utoa.28.29.2C_ltoa.28.29.2C_ultoa.28.29.2C_ftoa.28.29_.29
>>unsigned char
und was steckt drin. eine bcd oder binärzahl?
DS
Jakob schrieb: > ohne printf!) klar! mit sprintf. Sag uns doch mal, was Du machen möchtest. Was ist eine Eingabevariable (unsigned char); aber wohin möchtest Du das ausgegeben/übertragen oder sonst was bekommen. Falls Dein output wieder unsigned char sein sollte schlage ich den Identitätsoperator vor : unsigned char uc2ascii (unsigned char input){ unsigned char asciiOutput; asciiOutput=input; return asciiOutput; } (diese Code kann noch optimiert werden :-) :-) )
Ich will von einer Tastaturmatrix (0-F), über einen uC, auf ein VFD-Display herausgeben. Ich will ein einfaches Programm schreiben, wobei ich die 2 char Variablen(z.b Sammand1 und Summand2) mit der Tastaturmatrix eingebe und dann auf dem Display: "Summand1" + "Summand2" = "Resultat" ausgebe. Ps: bin ein Lehrling im 2. Lehrjahr als Elektroniker und hatte noch keine grosse Ehrfahrung mit programmieren! :-)
Jakob Hertz schrieb: > "Summand1" + "Summand2" = "Resultat" Es ist immer noch unklar. Gib doch mal ein konkretes Beispiel. Meinst Du so etwas. Ich char1 ist der Wert 10 und in char2 der Wert 11 und Du möchtest 'AB' im Display sehen? Und genauso wichtig : über welche Schnittstelle (Software/Hardware) ist das Display angeschlossen?
Ich möchte das ich nur die Werte für char1(z.B. 4) und char2(z.B. 3), das Programm das dann übersetzt und das Diplay dann : 4 + 3 = 7 anzeigt... dadada schrieb : > über welche Schnittstelle (Software/Hardware) ist > > das Display angeschlossen? über eine serielle COM Schnittstelle falls du das meinst^^
Jakob Hertz schrieb :
> Ich möchte das ich nur die Werte für char1(z.B. 4) und char2(z.B. 3),
Ich möchte das ich nur mit der Tastaturmatrix für char1(z.B. 4) und
char2(z.B. 3) eingeben kann, ***
uint8_t zahl1=3; uint8_t zahl2=4; uint8_t erg=0; erg=zahl1*zahl2; ausgabe: ...zahl1|0x30, zahl2|0x30, erg|0x30... wie auch immer die lcd ausgabe aussieht... solange die zahlen und ergebnisse zwischen 0-9 sind geht das. DS
ich meinte natürlich: erg=zahl1+zahl2; und nicht: erg=zahl1*zahl2; DS
1 | void small_utoa(uint32_t val, char* buffer, uint8_t radix) |
2 | { |
3 | char temp[10]; |
4 | uint8_t index = 0; |
5 | uint32_t val2; |
6 | uint8_t digit; |
7 | |
8 | do |
9 | { |
10 | val2 = val / radix; |
11 | digit = (uint8_t) (val - val2 * radix); |
12 | temp[index++] = (char) (digit > 9 ? digit + 'A' - 10 : digit + '0'); |
13 | val = val2; |
14 | if(index > 9) break; //safety; should never happen |
15 | } while(val > 0); |
16 | |
17 | while(index--) *(buffer++) = temp[index]; |
18 | *(buffer) = 0; //C-String termination |
19 | } |
20 | |
21 | void small_itoa(int32_t val, char* buffer, uint8_t radix) |
22 | { |
23 | if(val < 0) |
24 | { |
25 | *(buffer++) = '-'; |
26 | val = -val; |
27 | } |
28 | small_utoa((uint32_t) val, buffer, radix); |
29 | } |
Jakob Kauf dir ein C-Buch! Das ist wichtig. Deine Fragen sind von der allereinfachsten Sorte. Da warten noch 1000-ende große und kleine Probleme und Wissensbrocken auf dich, die du ALLE kennen musst, wenn du ernsthaft programmieren willst. In einem C-Buch stehen die ALLE drinnen (und noch viel mehr) und das Buch führt dich systematisch durch die Materie. Vom Einfachen zum Schwierigen. Unter Berücksichtigung und Erörterung all der kleinen Fallen, die auf dich warten. Ein Einsteiger-C-Buch für deinen µC wirst du selten finden. Das macht so gesehen aber auch nichts. Installier dir auf deinem PC ein PC-taugliches Entwicklungssystem und arbeite trotzdem das C-Buch durch (denn dafür funktioniert dein C-Buch dann perfekt). Dein C wird sich, selbst wenn es nicht µC-spezifisch ist, vom ersten Tag an, an dem du auf dem PC systematisch die C Grundlagen durcharbeitest und Übungen machst, schlagartig verbessern. Und zwar nicht nur in der PC-Programmierung sondern auch speziell in der µC Programmierung. In deinem Buch findet sich zwar nichts über Portzugriffe und Timer und dergleichen. Das macht aber nichts. Denn selbst wenn man diese µC-spezifischen Dinge ausklammert, bleibt noch genug übrig, damit du das nächste halbe Jahr mehr als beschäftigt bist. Und für den µC-spezifischen Rest sind dann wir da, bzw. mit mehr Erfahrung wird dann das Datenblatt dein bester Freund. zb:
1 | char output[30]; |
2 | |
3 | sprintf( output, "%d + %d ergibt %d\n", (int)zahl1, (int)zahl2, (int)erg ); |
4 | lcd_string( output ); |
sprintf verwendet einen String, in den Formatieranweisungen (nach dem %) eingebettet sind. sprintf setzt dann an diesen Stellen die restlichen Argumente ein, wobei man umfangreiche Möglichkeiten für die Formatierung hat. printf, sprintf, fprintf machen in dieser Hinsicht alle das gleiche. UNterschiedlich ist nur, was dann mit dem Ergebnis gemacht wird. printf gibt an der Standard Ausgabe aus fprintf schreibt das ganze in eine Datei sprintf schreibt das ganze als String in ein char-Array Auf einem AVR-µC macht nur sprintf Sinn, weil es ja so etwas wie eine Standard-Ausgabe in dem Sinne nicht gibt.
Hallo Karl wie schon gesagt ich bin ein Lehrling als Elektroniker und in der Berufsschule hatten wir diese Thema noch nicht! :-) Ich danke dir viel mal für deine Hilfe!! :-D
Wenn du sprintf nicht verwenden willst, dann musst du die Konvertierung manuell machen. Schau dir dazu zuerst den ASCII-Code an. Du wirst feststellen, dass alle Ziffern hintereinander sind und du zu einer einstelligen Zahl nur eine Konstante addieren musst, um das gewünschte ASCII-Zeichen zu erhalten. Wenn deine Zahl mehrere Stellen hat, musst du zuerst die einzelnen Ziffern isolieren (Biärzahl zu einer BCD-Zahl umwandeln), bevor du jede Ziffer einzeln in ein ASCII-Zeichen konvertieren kannst. Ein allfälliges Minuszeichen muss natürlich auch beachtet werden. EDIT: Wenn du noch nie in C programmiert hast, wird die Sache natürlich schwierig. Es gibt auch einige gute C Tutorials im Internet. Für die Berufsschule musst du früher oder später ein Buch kaufen, erkundige dich welches verwendet wird, kauf es und lerne in C programmieren.
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.