Hallo ich bastle gerade an nem Programm für ne 7Segment anzeige Um deine Zahl in ihre Ziffern zu zerlegen. Dazu hab ich Dei ZAhl in nen char Aray geschrieben und lese jetzt die enstsprechende stelle wieder aus. Aber wie wandel ich die jetzt gelesene ZAhl wieder in en int wert um um sie dan anzuzeigen?? Danke Felix
Gast
#3049037
Felix Geerkens schrieb: > Dazu hab ich Dei ZAhl in nen char Aray geschrieben und lese jetzt die > enstsprechende stelle wieder aus. und warum? 456 / 100 = 4 (456 % 100) / 10 = 5 (456 % 10 ) = 6
Gast
#3049044
Felix Geerkens schrieb: > Aber wie wandel ich die jetzt gelesene > ZAhl wieder in en int wert um um sie dan anzuzeigen?? Für eine Siebensegmentanzeige brauchst du die Segmentcodes und die passen in ein Byte rein.
Tag danke für die schnellen antworten. @Peter geht des Wirklich kommt da dann nicht 4,56 raus?? @Michael danke für den Hinweis ich hatte oben blos int gschreiben um nicht weiter zu verwirren Vielen Danke Felix
Gast
#3049051
Felix Geerkens schrieb: > @Peter geht des Wirklich kommt da dann nicht 4,56 raus?? ja, weil es ja int's sind, dort kann kein Komma rauskommen.
des heist bei unsigned char auch??
Gast
#3049056
Felix Geerkens schrieb: > des heist bei unsigned char auch?? klar. Aber das sind wirklich Grundlagen von C.
Jep ich weis danke für die Hilfe es ist peinlich das ich nicht selbst auf diese lösung gekommen bin und die frage mit char war auch nur zur absicherung
So AHbs jetzt Reingeschrieben es geht soweit einziges Problem ist wenn ich eine zahl größer 10 anzeige kommt am der einser Stelle nurnoch sch.. raus woran könte das liegen hier mal mein code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
Gast
#3049110
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Das ist jetzt aber nicht die Funktion mit der du die Stelle berechnen willst oder? Spielen wir das mal durch mit 213 und Stelle 1 213 / 1 = 213 mit Stelle 2 213 / 2 = 106 (die ,5 wird abgeschnitten) mit Stelle 3 213 / 3 = auch falsch. Denk doch mal nach. Du kannst die Stelle ja nicht einfach so berechnen. Wenndann muss du alle stellen berechnen. Also 213 / 100 = 2 = hunderter 213 - (2(hunderter)*100) = 13 13 / 10 = 1 = zehner 13 - (1(zehner)*10) = 3 3 = einer so geht das. Alternativ sind itoa oder sprinft: 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 Klar ?
ops daran hab ich garnicht gedacht dei sache ist die das ich die zentrale berechnung wenn möglich vrmeiden will und auch nicht wissen muss wie vile stellen meien anzeige bzw meien zahl hat ich. ich werde also nochmal darüber nachdenken müssen felix fals ihr ne ide habt wie ich des lösen kann schreibt es
So jetzt die überarbeiter version mit atoi
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
leider zeigt meine 7segm nur noch 0 an was mache ich falsch
Gast
#3049254
Ja sagmal klickst du das Zeug nur zusammen? Lies mal ein C Buch oder zumindest die Referenz zu atoi und itao
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Was soll das sein? Zuerst machst du aus dem Integer einen String und dann wieder einen Integer? itoa ist richtig, macht dir aus dem Integer einen String aber der steht natürlich im ASCII Format in dem Array: http://www.asciitable.com/index/asciifull.gif 213 = 2,1,3,0 (binäre Null (\0) am Schluss immer bei Strings!) abgelegt wird es also: 50,49,51,0 Diese Werte findest du in der Tabelle s.o. 49='1', 50='2', 51='3', ... Wie kommt man von 49 auf 1? -> 48 Abziehen Wie kommt man von 50 auf 2? -> 48 Abziehen Wie kommt man von 51 auf 3? -> 48 Abziehen .... blüht dir was ? Zahl = ASCII Char - 48 Buffer[3] ist natürlich zu klein weil die binäre Null immer mit muss. Also Buffer[4] ist richtig. Mach mal ein C Tutorial - das sind absolute Basics. itoa und atoi sind brutalst Speicher- und Geschwindigkeitsfressend. Darum realisiere lieber die Umrechnung wie ich sie dir oben vorgeschlagen habe. Die Divisionen brauchen schon lange genug.
Gast
#3049256
Felix Geerkens schrieb: > leider zeigt meine 7segm nur noch 0 an was mache ich falsch Geh das Programm mal manuell mit Papier und Stift schrittweise durch. Dann kommst du bestimmt drauf.
Gast
#3049337
Zum Thema Modulo einVIDEO: http://et-tutorials.de/1218/variablenzuweisung-und-modulo-funktion/
Gast
#3049383
Hier mal ein Programmbeispiel, wo eine größere Hexadezimalzahl ausgegeben wird:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
Einfach zur Ansicht.
Das Programmbeispiel ist nur dafür gedacht, Rekursion zu erklären. In einer realen Mikrocontroller-Anwendung will man sich den Stack nicht so vollmüllen ...
Gast
#3049485
Wer nicht iterativ programmieren kann kann es rekursiv schon gleich dreimal nicht :-D Also jetzt mal im Ernst - jetzt kann ich echt nicht mehr zuschauen.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Gast
#3049505
Fabian O. schrieb: > Das Programmbeispiel ist nur dafür gedacht, Rekursion zu erklären. In > einer realen Mikrocontroller-Anwendung will man sich den Stack nicht so > vollmüllen ... Da hast du Recht, wenn der Stack nur klein ist.
Michael schrieb: > Also jetzt mal im Ernst - jetzt kann ich echt nicht mehr zuschauen. das mag ja vielleicht funktionieren, schön ist aber was anderes
Walter S. schrieb: > Michael schrieb: >> Also jetzt mal im Ernst - jetzt kann ich echt nicht mehr zuschauen. > > das mag ja vielleicht funktionieren, schön ist aber was anderes Ausserdem ziemlich sicher nicht das was er will. Denn die fehlenden führenden 0-en machen ihm zu schaffen. Das ist bei LCD schon 'ein Problem', bei 7-Segment Anzeigen will man aber üblicherweise haben, dass die Einerstelle immer an derselben Stelle steht. Allerdings stellt Felix sich auch wirklich an. Man zerlegt nicht die Zahl während der eigentlichen Ausgabe. Die Ausgabe (in einer ISR) zeigt vorgefertigte Bitmuster an. Wo immer die auch herkommen. Zb. aus einer Funktion, die eine Zahl in die 3 Stellen zerlegt und die entsprechend anzuzeigenden Bitmuster in den globalen Variablen hinterlässt, auf dass die Anzeige-ISR sie regelmässig an die 7-Segment ausgibt.
Gast
#3049830
Karl Heinz Buchegger schrieb: > Das ist bei LCD schon 'ein > Problem', bei 7-Segment Anzeigen will man aber üblicherweise haben, dass > die Einerstelle immer an derselben Stelle steht. Dann muss er sprintf nehmen oder programmieren lernen ...
Michael schrieb: > Karl Heinz Buchegger schrieb: >> Das ist bei LCD schon 'ein >> Problem', bei 7-Segment Anzeigen will man aber üblicherweise haben, dass >> die Einerstelle immer an derselben Stelle steht. > > Dann muss er sprintf nehmen oder programmieren lernen ... :-) Er muss nur durch 10 dividieren lernen und lernen was es mit Modulo auf sich hat.
Karl Heinz Buchegger schrieb: > Er muss nur durch 10 dividieren lernen und lernen was es mit Modulo auf > sich hat. *Mathe lernen *C lernen *Und Rechtschreibung wären auch noch schön Da hat er ja noch was zu tun.
Gast
#3050085
Karl Heinz Buchegger schrieb: > Michael schrieb: >> Karl Heinz Buchegger schrieb: >>> Das ist bei LCD schon 'ein >>> Problem', bei 7-Segment Anzeigen will man aber üblicherweise haben, dass >>> die Einerstelle immer an derselben Stelle steht. >> >> Dann muss er sprintf nehmen oder programmieren lernen ... > > :-) > Er muss nur durch 10 dividieren lernen und lernen was es mit Modulo auf > sich hat. Das hab ich ihm oben auch schon vorgekaut aber das nimmt er ja auch nicht an. Michael schrieb: > Also 213 / 100 = 2 = hunderter > 213 - (2(hunderter)*100) = 13 > 13 / 10 = 1 = zehner > 13 - (1(zehner)*10) = 3 > 3 = einer Ich weiß echt nicht was daran so schwer ist. Modulo braucht man da ja nicht mal. Und mit ein paar schnellen if-Abfragen kann man sich die führenden Nullen oder Vorzeichen spielend holen.
Michael schrieb: > Ich weiß echt nicht was daran so schwer ist. Na ja.. Er hat sich da in eine dämliche Funktion "Anzeige" verrannt. Das ist a) schon mal der grundsätzlich falsche Weg b) bringt ihn das bei der Zerlegung nicht weiter. (Man kann schon so eine Funktion benutzen. Aber eigentlich braucht die kein Mensch.) Erst mal muss er verstehen, dass er eine Zahl als ganzes auf seine 7_Seg ausgibt. Dann wird alles ganz einfach. Sein eigentliches Problem ist das Multiplexen. Wenn er das richtig ansetzt ist der Rest nur noch Pipifax.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.