Hallo Bitte nicht gleich erschlagen für die x-Nachfrage zu dem Thema. Habe im Netz gesucht und einiges gefunden. Leider sind teilweise die Links tot. Zum Problem (alles in C) 0x30 bis 0x39 sind die Zahlen 0 bis 9 0x41 bis 0x46 sind A bis F Zur Ansteuerung eines Graphigdisplays muss ich den Wert von 0x00 bis 0xFF übertragen (bis zu 3 mal). Zur Eingabe der Werte kann ich nur 0 bis 255 nutzen. Wie kann ich die Werte in C umrechnen und gleizeitig die Eingabewerte kontrollieren (Begrenzung der Hexzahlen)? LG Paul
:
Verschoben durch Moderator
Es gibt sprintf() und sscanf(). Oder bei manchen itoa() kann man auch die Basis angeben. Bei strtol() sowieso Man kann das aber auch selber schreiben. Mit etwas Bitoperationen geht das recht einfach. Mit Division und Modula aber auch (etwas langsamer)
Was möchtest du denn umrechnen? Eine Dezimalzahl in einen Hex Wert? Wenn du char als Datentypp verwendest gibt es nichts umzurechnen. Das ist beides Mal das gleiche in einer anderen Schreibweise. Oder brauchst du die hex Zahlen als Zeichenkette? Was meinst du mit Begrenzung der Hexzahlen? Eine Sättigunng dr Zahlen?
Hallo Dirk ich möchte nicht den Wert auf dem Display ausgeben. Das mit itoa kenne ich. Möchte den Wert übertragen um die Helligkeit einzustellen. Danach erfolgt erst die Ausgeb eines Textes. Gleizeitig möchte ich auf die korrekte Eingabe achten und wenn nötig begrenzen. Beispiel: Eingabe ist 255 übertrage FF Eingabe ist 256 übertrage FF (Kontrolle eingabe Wert) Eingabe ist 378 übertrage FF (Kontrolle eingabe Wert) paul
Wo ist das Problem? if eingabe > 255 return 255; else return eingabe;
Die Begrenzung ist klar und wie kann ich vorher die Umrechnung von Dezi auf Hex machen?
Paul schrieb: > Die Begrenzung ist klar und wie kann ich vorher die Umrechnung von Dezi > auf Hex machen? Hex oder Dezimal sind nur andere Schreibweisen. Wenn es um Text geht: sprintf oder itoa Wenn nicht, ist es egal, dann kannst du das Byte direkt übertragen.
Tut mir leid. Ich verstehe echt nicht, was du vorhast. Du willst wirklich den String "FF" übertragen? Falls ja, da hat Dirk dir doch schon eine Antwort gegeben: sprintf oder Bitoperationen (die Zuordnung hast du ja schon in deiner Frage stehen).
Mmhhh, wie kommst du darauf, dass 0x30 der Zahl 0 entspricht? 0x30 entspricht einer dezimalen 48. Du meinst das ASCII Zeichen '0'. Also nochmal aufräumen: was möchtest du genau tun? Zeichen darstellen, Steuerzeichen senden? Zeichen sind vom 8 Bit Typ char. Damit gibt es keinen Überlauf. ;-)
Paul schrieb: > Die Begrenzung ist klar und wie kann ich vorher die Umrechnung von Dezi > auf Hex machen? Du musst überhaupt nichts umrechnen. Das Zeichen 'A' kann hexadezimal 0x41, 65 dezimal oder 1000001 binär geschrieben werden. Das sind aber nur Schreibweisen für den Menschen. Gespeichert wird der Wert im µC nämlich immer gleich. An das Graphikdisplay musst Du diesen internen Wert schicken, dabei ist es egal, wie Du das schreibst, z.B.
1 | send_character ('A'); |
2 | send_character (0x41); |
3 | send_character (65); |
4 | send_character (0b1000001); |
Das Resultat ist immer dasselbe: Es wird das Zeichen 'A' übertragen. P.S. Dass da im Handbuch des Displays etwas von Hex-Werten steht, ist für nur Dich als Leser relevant. Damit Du die Zahlenbereiche auch verstehst. Es wäre zwar theoretisch denkbar, dass tatsächlich Hex-Zeichenketten übertragen werden müssen, also zunächst das Zeichen '4' und dann '1' (also 2 Bytes statt einem!) für 0x41, aber das ist höchst unwahrscheinlich. Warum sollte man die Kommunikationsschnittstelle bei einem Graphikdisplay derart aufblähen, dass für den Menschen(!) lesbare Zeichen übertragen werden müssen? Diese müssten ja auf dem µC erst in Zeichenketten umgestaltet werden und anschließend auf dem Graphiksdisplay wieder zurückgerechnet werden. Das wäre nicht nur ein unnötiger, sondern auch komplett unnützer Aufwand. Dabei verdoppelt sich nicht nur der nötige Datenstrom, auch die Rechenleistung wäre auf beiden Seiten höher. Desweiteren ist es kompletter Unsinn, sich bei einer Kommunikation nur auf die Zeichen 0-9A-F zu beschränken. Hier werden komplette Bytes verschickt und nicht nur 16 verschiedene Werte, für die eine 4-Bit-Übertragung ausgereicht hätte. Man kann daher allein durch logische Überlegungen darauf schließen, dass Du auf dem falschen Dampfer bist. Dabei brauche ich den Typ Deines Displays gar nicht zu kennen.
:
Bearbeitet durch Moderator
Paul schrieb: >Die Begrenzung ist klar und wie kann ich vorher die Umrechnung von Dezi >auf Hex machen? Du möchtest das eine Dezimalzahl auf dem Display in Hex dargestellt wird? >Eingabe ist 255 übertrage FF >Eingabe ist 256 übertrage FF (Kontrolle eingabe Wert) >Eingabe ist 378 übertrage FF (Kontrolle eingabe Wert) Eine Dezimalzahl größer als 255 passt in ein Byte nicht mehr rein.
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.