Forum: Compiler & IDEs Buchstaben auf LCD


von Lutz H. (luhe)


Angehängte Dateien:

Lesenswert?

Hallo,
ich kommen nicht weiter,
ich will einen Buchstaben  7 auf dem LCD  an der Position 80 20 
darstellen,
und hab mir das so gedacht:

 const uint16_t  Text_LCD_7="7";


    int pos_x  =80;
    int pos_y1= 20;


    LCD_DrawChar(pos_x,pos_y1,(uint16_t*)Text_LCD_7);

Es gibt zwei Probleme, Text_LCD_7 bekommt keinen Wert,
und auf dem Bildschirm wird ein Muster angezeigt.

Was mache ich falsch?

von Ralf (Gast)


Lesenswert?

> Was mache ich falsch?
Ganz einfach: du postest keine relevanten Informationen.
Welches Display? Welcher Controller? Eigene Schaltung oder Devkit? ...

Ralf

von Lutz H. (luhe)


Lesenswert?

Ich nutze GCC mit COOCOX und nutze das stm32f429i- Disco

von micha (Gast)


Lesenswert?

lutz h. schrieb:
> const uint16_t  Text_LCD_7="7";

hier solltest Du eher einfache Anführungszeichen nehmen

const uint16_t  Text_LCD_7='7';

um der (integer) Variable Text_LCD_7 den ASCII-Wert des Zeichens "7" 
zuzuweisen (=0x37). Ansonsten ist das ein String mit abschließendem "\0" 
also
0x3700 - was grade in einen int16 rein passt. Warum eigentlich uint16_t? 
Üblich wäre char oder uint8_t - aber das hängt von Deinem System ab.

Weiterhin solltest Du Dir Gedanken über den richtigen Übergabeparameter 
machen

>     LCD_DrawChar(pos_x,pos_y1,(uint16_t*)Text_LCD_7);

mit (uint16_t *) castest Du die Variable in einen Pointer auf ein 
uint16_t (in diesem Fall dann IMHO an der Address 0x3700) vermutlich 
willst Du aber einen Pointer auf die Variable übergeben, was wohl eher 
der Adresse enspricht

LCD_DrawChar(pos_x,pos_y1,&Text_LCD_7);

aber das hängt auch von Deinem System und den Libraries ab.

von Karl H. (kbuchegg)


Lesenswert?

micha schrieb:

> LCD_DrawChar(pos_x,pos_y1,&Text_LCD_7);

Das denke ich eigentlich nicht.
Es macht wenig Sinn, einer Funktion, die lediglich einen einzelnen 
Character ausgibt, einen Pointer auf diesen Character zu übergeben.

Genaueres kann man natürlich erst sagen, wenn man den Protoypen der 
Funktion sehen würde, aber ich schätze mal, dass es ein einfaches
1
  LCD_DrawChar( 80, 20, '7' );

oder eben, wenn man die ganzen Konstanten vorher in Variablen 
unterbringt
1
int pos_x = 80;
2
int pos_y1 = 20;
3
char Character = '7';
4
5
6
  LCD_DrawChar( pos_x, pos_y, Character );
die Sache erledigt.

Alles natürlich unter der Annahme, dass LCD_DrawChar die Funktion ist, 
die einen einzelnen Character ausgibt und nicht etwa einen String.

von Lutz H. (luhe)


Lesenswert?

LCD_DisplayChar(pos_x,pos_y2,'8');

Es gibt eine andere Funktion, mit der die Konstante übergeben wird.

Das geht.

von Lutz H. (luhe)


Angehängte Dateien:

Lesenswert?

Ingendwie schaffe ich es nicht,
einen String in eine Variable zu speichern  :-)

von Pia17 (Gast)


Lesenswert?

du musst ie richtige Array Grösse angeben

von Karl H. (kbuchegg)


Lesenswert?

lutz h. schrieb:
> Ingendwie schaffe ich es nicht,
> einen String in eine Variable zu speichern  :-)


Dann zeig deinen richtigen Code!

Und nein, die Funktion LCD_DisplayChar ist dann auch die falsche 
Funktion dafür.

Entweder du hast bereits eine Funktion für Strings, oder du musst dir 
eine machen
1
void LCD_DisplayString( const char* Str )
2
{
3
  while( *Str )
4
    LCD_DisplayChar( *Str++ );
5
}
6
7
8
....
9
10
  LCD_DisplayString( "Juhu" );
11
12
....
13
14
  char str[] = "Test";
15
  LCD_DisplayString( str );
16
17
....
18
19
  int i = 4711;
20
  char Buffer[20];
21
22
  itoa( i, Buffer, 10 );
23
  LCD_DisplayString( Buffer );
24
25
....
26
27
  int j = 1234;
28
  char Buff[25];
29
  sprintf( Buff, "Wert: %d Pflaumen", j );
30
  LCD_DisplayString( Buff );
31
32
....

Du musst zwischen einem einzelnen Character und einem String 
unterscheiden.
Jedes noch so banale C-Buch weiß da eine Menge darüber zu erzählen, wie 
Strings in C funktionieren.

von Lutz H. (luhe)


Angehängte Dateien:

Lesenswert?

Ja ich gebe zu mit den Zeigern verstehe ich mich nicht gut,
deshalb möchte  ich den Code von Karl Heinz umsetzen.

ich glaube aber bei mir ist irgendwo eine Einstellung fehlerhaft.

Mit der Vorlage von COOCOX habe ich

 eine Zifferneingabe auf dem  LCD realisiert, Zahlen und Rechtecke und 
Einlesen
nicht optimal, geht aber.
Tasten 0 bis 9 ,D letzte Stelle löschen.
Projekt angehängt.

Mein erstes Problem beim Debuggen:

int main(void)
{

    char str[] = "Test";
   ;
wenn ich auf str mit der Maus gehe wird  \000\000\000\000 angezeigt.


bei einem anderen C Compiler steht da  was mit Test\n .

Ich arbeite mit dem ST Link Interface, das auf dem STM32F429I Board ist.

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.