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?
> Was mache ich falsch?
Ganz einfach: du postest keine relevanten Informationen.
Welches Display? Welcher Controller? Eigene Schaltung oder Devkit? ...
Ralf
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.
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.
LCD_DisplayChar(pos_x,pos_y2,'8'); Es gibt eine andere Funktion, mit der die Konstante übergeben wird. Das geht.
Ingendwie schaffe ich es nicht, einen String in eine Variable zu speichern :-)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.




