www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik lcd_string funktioniert nicht wenn ich eine Variabel ausgeben möchte


Autor: michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich versuche immer noch eine Variable mit der Funktion lcd_string 
auf ein Display zugeben aber es geht immer noch nicht. Wenn ich Speicher 
in "" setze kann ich speicher auch dem Display sehen aber ich dann nicht 
0b00011100 über die Variabel speicher ausgeben. Kann mir jemand sagen 
was ich Falsch mache?

#include <util/delay.h>
#include <avr/io.h>
#include "lcd.h"

int speicher;
int speicher2;
int main(void)
{
lcd_init();

while(speicher2!=1)
{
speicher2 = 1;
speicher = 0b00011100;

lcd_string ("Test");
lcd_string (speicher);


}
return 0;
}

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

Bewertung
0 lesenswert
nicht lesenswert
lcd_string will als Argument einen String haben, also ein char Array.
Die Variable 'speicher' ist aber was ganz anderes. Da steht kein Text 
drinnen, sondern einen Zahl.

Also musst du zunächst mal aus der Zahl einen String machen, der die 
Zahl textuell repäsentiert.

http://www.mikrocontroller.net/articles/FAQ#Wie_ka...

Autor: michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier habe ich mal die Funktion lcd string was mich so verwiert ist das 
das früher funktioniert hat ich bin mir aber nicht mehr sicher.

void lcd_string(char *data)  {
    int z=0;
  while(*data) {
        lcd_data(*data);

      if (z == 15) {
      lcd_home_2nd_line();}
    data++;
    z++;
    }


void lcd_data(unsigned char temp) {

  unsigned char lsn,msn;

  msn = temp >> 4;
  msn = msn & 0b00001111;
  msn = msn | 0b00010000;
  lcd_port = msn;
  lcd_enable();

  _delay_us(47);

  lsn = temp & 0b00001111;
  lsn = lsn | 0b00010000;
  lcd_port = lsn;
  lcd_enable();

  _delay_us(47);

}

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

Bewertung
0 lesenswert
nicht lesenswert
michi wrote:
> Hier habe ich mal die Funktion lcd string was mich so verwiert ist das
> das früher funktioniert hat ich bin mir aber nicht mehr sicher.
>
> void lcd_string(char *data)  {
>     int z=0;
>   while(*data) {
>         lcd_data(*data);
>
>       if (z == 15) {
>       lcd_home_2nd_line();}
>     data++;
>     z++;
>     }
>

Ja, das ist eine Funktion, welche einen String auf dem LCD ausgibt.
String, nicht Integer

Also sowas:
int main()
{
  char Test[20];

  strcpy( Test, "20" );
  lcd_string( Test );
}

Aber den Fall hast du ja nicht. Du hast einen Integer. Meinetwegen mit 
dem Inhalt 20
int main()
{
  int i;

  i = 2 * 10;
}

Damit du den über lcd_string ausgeben kannst, musst du erst mal aus der 
Zahl 20 den String "20" generieren.

Schau dir doch einfach mal den Link aus der FAQ an.

Autor: michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke das geht schon mal aber ich möchte auf mein Display sehen wie oft 
eine Zählschleife burchgelaufen ist darum möchte ich eine Variable aus 
lesen.

int main()
{
  char Test[20];

  strcpy( Test, "20" );
  lcd_string( Test );
}

so kann ich die Zahl 20 ausgeben aber wie kann ich die Variable z.B. 
Zählwert ausgeben?

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

Bewertung
0 lesenswert
nicht lesenswert
michi wrote:
> Danke das geht schon mal aber ich möchte auf mein Display sehen wie oft
> eine Zählschleife burchgelaufen ist darum möchte ich eine Variable aus
> lesen.
>
> int main()
> {
>   char Test[20];
>
>   strcpy( Test, "20" );
>   lcd_string( Test );
> }
>
> so kann ich die Zahl 20 ausgeben aber wie kann ich die Variable z.B.
> Zählwert ausgeben?



Grrrrrrrr


Was bitte ist so schwer auf den Link den ich dir oben gegeben habe, 
einfach mal draufdzudrücken. Dort sind 3 Möglichkeiten angegeben, wie du 
die Aufbereitung machen kannst, damit du lcd_string einsetzen kannst.

Autor: Mathias B. (matthiasbuerkle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Michi,

das gleiche Problem hatte ich auch, als ich angefangen habe mit einem 
LCD zu arbeiten.

Hab mal zwei kleine Änderungen eingefügt. Bei meinem Programm hats 
danach funktioniert.
#include <util/delay.h>
#include <avr/io.h>
#include "lcd.h"

int speicher;
int speicher2;
int main(void)
char c_speicher[20];               //!   Char die ans Disp gesendet wird
{
lcd_init();

while(speicher2!=1)
{
speicher2 = 1;
speicher = 0b00011100;

lcd_string ("Test");
itoa (speicher,c_speicher,10);     //!   Wandelt Integer in Char um
lcd_string (c_speicher);           //!   Hier muss dann das Char übergeben werden


}
return 0;
}

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.