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


von michi (Gast)


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;
}

von Karl H. (kbuchegg)


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_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F

von michi (Gast)


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);

}

von Karl H. (kbuchegg)


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:
1
int main()
2
{
3
  char Test[20];
4
5
  strcpy( Test, "20" );
6
  lcd_string( Test );
7
}

Aber den Fall hast du ja nicht. Du hast einen Integer. Meinetwegen mit 
dem Inhalt 20
1
int main()
2
{
3
  int i;
4
5
  i = 2 * 10;
6
}

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.

von michi (Gast)


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?

von Karl H. (kbuchegg)


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.

von Mathias B. (matthiasbuerkle)


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.
1
#include <util/delay.h>
2
#include <avr/io.h>
3
#include "lcd.h"
4
5
int speicher;
6
int speicher2;
7
int main(void)
8
char c_speicher[20];               //!   Char die ans Disp gesendet wird
9
{
10
lcd_init();
11
12
while(speicher2!=1)
13
{
14
speicher2 = 1;
15
speicher = 0b00011100;
16
17
lcd_string ("Test");
18
itoa (speicher,c_speicher,10);     //!   Wandelt Integer in Char um
19
lcd_string (c_speicher);           //!   Hier muss dann das Char übergeben werden
20
21
22
}
23
return 0;
24
}

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
Noch kein Account? Hier anmelden.