Ausgabe 3-stelliger Zahlen auf Display

Gast #87426
Lesenswert?
• ▲
▼
hallo zusammen,
ich möchte mit dem ATMega8535 3-stellige zahlen auf dem Display
ausgeben. sobald ich aber irgendeine zahl ausgeben möchte, erhalte ich
eine komplett andere zahl.  es handelt sich hierbei um ein 4x40 zeichen
display

die funktionen sind alle deklariert und im anhang beigefügt.

der funktionsaufruf lautet:

lcd_byte(345);


in der funktion asc_out(unsigned char daten) wird dann jede einzelne
ziffer berechnet und nacheinander ausgegeben.

vielleicht hat mir ja einer ne lösung

danke für eure hilfe

gruß manuwar
Angehängte Dateien:
Gast #87427
Lesenswert?
• ▲
▼
Die Funktion lcd_byte() erwartet als Paramter 'unsigned char',
also ein 8Bit breiter Parameter.
Somit funktioniert es nur mit Zahlen von 0-255.
Du musst die Funktion auf 16Bit aufbohren,
dann gehen Zahlen von 0-65535 ;).

Gruß,
Maddin
Gast #87428
Lesenswert?
• ▲
▼
Hallo Manuwar

Vielleicht heißt die Funktion lcd_byte so, weil sie nur eine Byte
ausgeben kann. Du übergibst aber ein int mit 345.

Was gibt die Funktion denn mit Zahlen < 256 aus ?


MFG
Dieter
Gast #87430
Lesenswert?
• ▲
▼
Hallo

Schön

Aber meinst es reicht char gegen int zu tauschen, oder hast du noch
mehr geändert.

unsigned int geht ja bis 65535.

Was kommt denn bei 1245 raus ?

Naja, wenn du nur bis 999 brauchst geht es schon, aber der "feine"
Weg ist das nicht.

MFG
Dieter
Gast #87431
Lesenswert?
• ▲
▼
hallo dieter b,

hab meine funktion lcd_byte noch um eine zusätzliche zeile erweitert.
damit sind jetzt zahlen bis 9999 abgedeckt.

wenn du zeit und lust hast, könntest du dir ja vielleicht mal die
funktion lcd_string() anschauen. wenn ich nämlich
lcd_string('test');
aufrufe, bekomme ich die fehlermeldung: character constant too long
hat dann das auch mit unsigned char zu tun das das nur 8 bit sind? kann
ich da auch einfach int dafür einsetzen?

vielen dank schon mal im voraus

manuwar
Angehängte Dateien:
Gast #87432
Lesenswert?
• ▲
▼
hier nochmal der erweiterte lcd_byte() code:

void lcd_byte (unsigned int wert)
{
         asc_out(wert/1000+0x30);  //Tausender Ausgabe
         asc_out(wert/100%10+0x30);  //Hunderter Ausgabe
  asc_out(wert%100/10+0x30);  //Zehner Ausgabe
  asc_out(wert%10+0x30);    //Einer Ausgabe
}
Gast #87434
Lesenswert?
• ▲
▼
hallo dieter,

hat leider nicht funktioniert. erhalte jetzt die fehlermeldung:
function parameter #1 incompatible with its declaration

hab dir hier mal den prototypen:

void lcd_string (unsigned char *);


und die deklaration:

void lcd_string (unsigned char * ptr)
{
  while(*ptr!='\0')  //Schleife wird ausgeführt, so lange Endekennung
nicht erreicht
  {
    asc_out(*ptr);  //Ausgabe des Wertes des Zeigers
    ptr++;    //erhöhen des Zeigers --> zeigt auf höhere Adresse
  }
}


aufgerufen hab ich das ganze jetzt mit lcd_string("hallo welt");


gruß manuwar
Gast #87437
Lesenswert?
• ▲
▼
Hallo

Hier darf kein Leerzeichen stehen

void lcd_string (unsigned char * ptr)
                               ---
{
  while(*ptr!='\0')  //Schleife wird ausgeführt, so lange
Endekennung
nicht erreicht
  {
    asc_out(*ptr);  //Ausgabe des Wertes des Zeigers
    ptr++;    //erhöhen des Zeigers --> zeigt auf höhere Adresse
  }
}


also so
void lcd_string (unsigned char *ptr)

MFG
Dieter
Gast #87441
Lesenswert?
• ▲
▼
Hallo

Habe den Code gerade getestet. Läuft soweit ohne Probleme.

Habe aber Winavr im Einsatz und mußte die Port Zugriffe ändern.

Bekomme aber keine Fehlermeldung angezeigt.

Lcd_string läuft im Simulator auch so, wie es soll.

Kann dir leider nicht weiter helfen.

Was benutzt du denn für einen Compiler ?

MFG
Dieter

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.