www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ASCII Zeichen auf Display ausgeben


Autor: ben.pu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ihr da draußen,

Ich bin grad dabei mit einem ATMEGA8 im 4bit-Modus Texte auf dem 
2zeiligen Display von Displaytech auszugeben. Das ist mir dann auch mit 
der übergabe von Hexadezimalzahlen gelungen und das Display hat das 
angezeigt was es anzeigen sollte. Jedoch bin ich jetzt dabei die Hexas 
in normale Buchstaben umzutauchen um später auch Zeichenketten bzw auch 
nur einzelne Zeichen verarbeiten zu können damit man nicht immer im der 
Tabelle nachschauen muss.

Also hab ich zum Beispiel den Befehl...

lcd_data(0x41);

mit dem Befehl...

lcd_data("A");

ersetzt.

Jetzt habe ich ab er das Problem dass nur noch total wirres Zeug 
angezeigt wird. Kann mir jemand sagen wo das Problem ist?

Infos:
-benutze das AVR-Studio mit dem GCC Compiler
-die Zechentabelle des Displays stimmt genau mit der ASCII Tabelle 
überein
-im Disamsambler hab ich gesehen dass jetzt eine andere Hexa an die 
Routine übereben wird

MFG Benny

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuchs mal mit lcd_data('A');

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ben.pu wrote:

> Also hab ich zum Beispiel den Befehl...
>
> lcd_data(0x41);
>
> mit dem Befehl...
>
> lcd_data("A");
>
> ersetzt.

Und dein Compiler hat dazu nichts zu sagen?

> angezeigt wird. Kann mir jemand sagen wo das Problem ist?

Deine mangelnden C-Kentnisse.
"A" ist ein String, der in Summe aus 2 chars besteht. Aus dem 'A' und 
einem abschliessendem '\0' Zeichen, welches bei Strings obligatorisch 
ist.

'A' hingegen ist das Zeichen, dessen ASCII-Code 0x41 ist.

Man beachte die Unterschiede in den Anführungsstrichen:
doppelte Anführungszeichen - String
einfache Anführungszeichen - ein einzelner Character

Um Strings auszugeben kannst du zb diese Funktion benutzen
void lcd_puts( const char* String )
{
  while( *String )
    lcd_data( *String++ );
}

Da kannst du jetzt dein "A" ausgeben.
    lcd_puts( "A" );

aber auch
    lcd_puts( "Hallo World" );

Autor: ben.pu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke euch allen für die schnelle Hilfe!!!!!!
Es funktioniert und ich bin total HAPPY.
Hab meine C-Kentnisse aus nem Mikrocontrollerbuch und da wird das nich 
so ausgeweitet. Man lernt nie aus und zum Glück gibts ja auch ;-) Werd 
die Funktionen gleich einbauen...

Danke nochma!!!
Benny

PS: Der Compiler hatte kein Wort gesagt.

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.