Buchstaben auf LCD

#3404246
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?
Angehängte Dateien:
Gast #3404277
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.
#3404372
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.
#3405313
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.
#3405460
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.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren