www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme Hex-Werte auf Display auszugeben


Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe folgendes Problem. Ich habe in einem Array mehrere Werte in HEX 
stehen.

unsigned char Data[8];

Nun möchte ich diese Daten auf einem LC-Display ausgeben. Die Ausgabe an 
sich ist kein Problem.

Mein Problem ist, die Daten in Hex auszugeben. Normale Werte (Integer) 
wandle ich mit einer Funktion in einen String um und gebe sie dann auf 
dem Display aus.
IntToString(ausg_str, Data[ii], 2,1);
LCDOuts(ausg_str);                     

Wenn ich das nun mit meinen Hex-Werten mache, werden die Werte natürlich 
nicht in Hex sondern Dezimal ausgegeben, aber ich möchte z.B. 11, 22, 
33(Hex)... usw. ausgeben, anstatt 17, 34, 51...

Wenn ich die Daten direkt ausgebe...
LCDOuts(Data[ii]); 

wird nur Mist ausgegeben.

Wäre klasse, wenn mir dabei jemand helfen könnte, die Daten auch 
wirklich in Hex auszugeben...

Gruß
Bernd

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich habe in einem Array mehrere Werte in HEX stehen.
Das ist so nicht ganz richtig. Die stehen da binär drin. Es ist egal, ob 
Du sie HEX, octal oder dezimal reinschreibst, sie werden immer binär 
reingeschrieben.

Wahrscheinlich müsstest Du so was machen wie:
 ausg_str = sprintf("%h", Data[ii]);
LCDOuts(ausg_str);                     

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit sprintf(%X) geht das, dürfte aber das Programm mächtig aufblasen.
Kannst die aber selber einen kleine Routine schreiben. Tabelle, die 
0..15 in 0..F umcodiert, nibbleweise adressieren.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich müsste es heissen:
 sprintf(ausg_str, "%h", Data[ii]);

Bin mir aber nicht sicher, ob %h richtig ist. es könnte auch %x sein.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Analog (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void PrintHex(unsigned char byte)
{
  /*~~~~~~~~~~~~~*/
  unsigned char byte1, byte2;
  /*~~~~~~~~~~~~~*/

  byte1 = (unsigned char) (byte / 16);
  byte2 = (unsigned char) (byte % 16);

  /* printf("byte1: %d byte2: %d",byte1,byte2); */
  if(byte1 <= 9)
    PUTC(byte1 + 48);
  else
    PUTC(byte1 - 10 + 65);
  if(byte2 <= 9)
    PUTC(byte2 + 48);
  else
    PUTC(byte2 - 10 + 65);
}

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,


vielen Dank.


Ich habs hinbekommen. Ich habs so gemacht, wie Analog es geschreiben 
hat.

Funktioniert prima.

Vielen Dank.

Gruß
Bernd

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.