Hiho an alle Helfer^^ Habe da folgendes Problem. Ich arbeite für eine Techniker Arbeit mit einem Microkontroller bord von Microelektronika easy 8051 B. Nun mein Problem: Gewünscht ist eine Ausgabe einer Variable über das GLCD Display. Folgendes hab ich Probiert: // Glcd module connections char GLCD_DataPort at P0; sbit GLCD_CS1 at P2_0_bit; sbit GLCD_CS2 at P2_1_bit; sbit GLCD_RS at P2_2_bit; sbit GLCD_RW at P2_3_bit; sbit GLCD_EN at P2_4_bit; sbit GLCD_RST at P2_5_bit; // End Glcd module connections unsigned float *Wert = 120; unsigned float *text = "Wert:1234"; void main() { WDTCN = 0xDE; WDTCN = 0xAD; OSCICN = 0x83; XBR2 = 0x40; P0MDOUT = 0x00; P2MDOUT = 0xFF; Glcd_Init(); Glcd_Fill(0x00); Glcd_Write_Text(text,0 , 2, 1); Glcd_Write_char("Hello world!", 0, 3, 1); } Nun mein Problem: 1. Um eine Korrekte ausgabe aufn Display zu erzielen ist es nötig vor der Variable "Text" ein Sternchen zu machen. Warum? 2. Nun will ich die Variable Text mit dem Inhalt einer anderen Variable füllen. Nur kriege es mit den mir bekannten C Funktionen nicht hin. 3.Um es Korrekt auf dem Display auszugeben muss der der Inhalt der Variable in Anführungstriche gesetzt werdn wie im Beispiel( Hello world!).Wie kriege ich das hin? Ich wäre ich dankbar wenn ihr mir (absoluter Programmieranfänger) unter die Arme greifen könnt.
Rückfrage: Der Code den Du gepostest hast, funktioniert der ? Die Informationen sind etwas dürftig deshalb die Frage ! Trotzdem... Zu Frage 1: an welcher Stelle soll deiner Meinung nach das Sternchen stehen ? Zu Frage 2: es gibt sogenannte standard funktionen in stdlib.lib. Da sollten z.B. eine Txt - Kopierfunktion drin sein. Sie heisst strcpy. Zu Frage 3: ????? Hallo ----> """"""""""""""" (komische Frage !) Gruß
oh Merke gerade hab beim Posten ein Fehler gemacht: Glcd_Write_char("Hello world!", 0, 3, 1); ist falsch Glcd_Write_Text("Hello world!", 0, 3, 1); sollte es heißen Also die Ausgabe des Textes "Hello world!" Funktioniert. Ist 1 zu 1 aus der Beispiel Bibliothek übernommen. Nur die Zeile darüber bereitet mir Probleme. Mein Ziel ist es über die RS232 Schnittstelle (ist hier noch nicht Einprogrammiert) eine Variable zu Befüllen und diese dann auf dem GLCD auszugeben. Char Variablenname; Variablenname = 230; (z.B / diese Variable soll über ein Lesebefehl von der RS 232 gefüllt werden) Glcd_Write_char(Variablenname, 0, 3, 1); funktioniert nicht. Das Display zeigt hier ganz Wilde Sachen an. Habs auch mal mit einem Sternchen vor der VAriable bei der deklaration versucht (mir ist nicht klar was das Sternchen bewirkt, habs nur im Beispiel gesehen). Danach zeigte das Display an der gewünschten stelle 2S2S2S2S2S2S2S2S an. Habe auch Versucht mit dem Befehl: Glcd_Write_Data(Variablenname); Natürlich hab ich davor die nötige Position gesetzt an der es Angezeigt werden soll (GLCD_Set_Side/X/Page) Nur hier zeigt er dann Punkte und Striche an der Position an.
//Variablendeklaration char GLCD_DataPort at P0; char *daten; char *Ausgabe; // Grafikdisplay Verbindungen sbit GLCD_CS1 at P2_0_bit; sbit GLCD_CS2 at P2_1_bit; sbit GLCD_RS at P2_2_bit; sbit GLCD_RW at P2_3_bit; sbit GLCD_EN at P2_4_bit; sbit GLCD_RST at P2_5_bit; void main() { // Initialisierung Grafikdisplay Glcd_Init(); // Display Nullen Glcd_Fill(0x00); // Initialisierung RS232 Schnittstelle UART1_Init(9600); Delay_ms(100); // Senden des /?! Befehls über die RS232 (Rs485 Hardware Konverter) UART1_Write_Text("/?!"); // Empfangen der Daten und Speicherung in einer Variablen UART1_Read_Text(Ausgabe, "OK", 10); // Variable im Display ausgeben Glcd_Write_Text(*Ausgabe, 60, 2, 2); // Write string Hab mal wegen der Übersicht mein Vorläufiges Programm gepostet. Das Problem mit der Korrekten Ausgabe auf dem Display ist das selbe. So wie es hier ist zeigt das display an der Stelle: 2S2S2S2S2S2S2S an und nicht den Inhalt der Variablen (zB eine Zahl)
Lies Dir bitte im C-Buch durch, was das * für ne Funktion hat und wie man es benutzt. Man schreibt es jedenfalls nicht völlig planlos irgendwo hin. Sebastian schrieb: > unsigned float *text = "Wert:1234"; Wenn ein Compiler lachen könnte, würde er Dich schallend auslachen. So aber sollte er wenigstens Warnungen ausspucken. Peter
Danke für diese Kompetente Antwort. Naja und nun zu deinem C Buch....... Dieser Kompiler kennt nicht alle C Funktionen und sogar seine Eigenen Funktionen beherrscht er auch nicht alle. Selbst die Beispielfunktionen Funktionieren nicht. Naja das ich absoluter Anfänger bin hab ich ja oben dazu geschrieben. Aber dafür finde ich das ich nach 5Std selbst beigebrachten C weit gekommen bin.
Da du ja auch sooo ein Experte bist......
> unsigned float *text = "Wert:1234";
das hat dieser Compieler ohne zu Meckern compiliert. Diese Stelle hatte
ich noch im Programm drin um Sachen auszuprobieren.
Ich will jetzt auch nicht Hochnäsig oder Assi wirken nur hab ich die
erfahrung gemacht , daß die Leute die solche Sprüche abgelassen haben an
meinem versuch und dem Compiler gescheitert sind und diese Leute haben
sich sehr lange mit Programmierung beschäftigt.
Sebastian schrieb: > unsigned float *text = "Wert:1234"; Tippe Dein Programm bitte nicht im Forum ab, sondern hänge die Originaldatei an. Ansonsten kommen schnell Tippfehler rein und potenzielle Helfer lachen sich schlapp. Ich schätze mal, dass im Originalprogramm "unsigned char *text" steht. "float" ist eine Fließkommavariable. "*float" ist ein Zeiger auf diese. "Wert:1234" ist aber eine Folge von Zeichen.
Sebastian schrieb: > das hat dieser Compieler ohne zu Meckern compiliert. Au. So etwas sollte nicht passieren. Ein Compiler, der auch Müll ohne zu murren annimmt, ist nicht zu gebrauchen.
SO seh ich das auch nur hab ich leider nix anderes zu verfügung. Anfangs fand ich dieses Board und den Compiler super (weil ich unwissend war). Nun ist es nur noch Frusttrierend. Bisher konnte mir da wirklich niemand weiter helfen :-(
Auch wenn Du jetzt angepisst bist, ich bin kein Lehrer. Ich kanns daher nicht besser erklären, als wie es im Lehrbuch steht. Zum C Lernen findet man aber auch vieles bei Google, z.B.: http://www.peacesoftware.de/ckurs12.html Sebastian schrieb: > Selbst die Beispielfunktionen > Funktionieren nicht. Das deutet darauf hin, daß der Autor geschludert hat. Beispiele enthalten leider oft kleinere Tippfehler. Da muß man sich dann die Warnungen und Errors des Compilers anschauen. Die mögen anfangs etwas unverständlich klingen, aber mit etwas Übung kann man sie gut interpretieren. Jedenfalls gibt nie ein Compiler aus: "Error, funktioniert nicht". Peter
Sebastian schrieb: > das hat dieser Compieler ohne zu Meckern compiliert. Mein C51 meint dazu:
1 | stmt level source |
2 | |
3 | 1
|
4 | 2 unsigned float *text = "Wert:1234"; |
5 | *** ERROR 141 IN LINE 2 OF MUMPITZ.C51: syntax error near 'float' |
6 | |
7 | C51 COMPILATION COMPLETE. 0 WARNING(S), 1 ERROR(S) |
Und der GCC ist etwas präziser:
1 | MUMPITZ.C:2: error: both 'unsigned' and 'float' in declaration specifiers |
2 | MUMPITZ.C:2: warning: initialization from incompatible pointer type |
Peter
Naja ich will dich nicht persönlich angreifen. Fand nur den Kommentar unpassend. Das da Rechtschreibfehler drin sind hab ich sehr früh gemerkt. Hab gewisse Funktionen auch ergoogelt. Kam zu dem Ergebniss das die Syntax richtig war und der Compiler es trotzdem nicht gesachnallt hat ;-). Selbst unser Lehrer hat über das Programm geschaut und keinen Fehler in der Programmierung gefunden. Er fands auch sehr komisch. Ich denke hier kann mir wirklich nur einer Helfen der viel Erfahrung mit genau diesen Board und diesen Compiler hat.
Um hier wieder etwas Ordnung rein zu bringen schicke ich das Programm als Dateianhang mit. Mein Problem ist immer noch das selbe. Kriege die Variable nicht richtig auf dem GLCD angezeigt. Durch Versuche hab ich rausgefunden das ich den Inhalt der VAriable wahrscheinlich in Anführungsstriche setzen muss, nur hab ich keine Ahnung wie ich das anstellen soll. Dieses Sternchen soll angeblich der VAriablen einen Festen Speicherort zuweisen kann. Dieses soll aber aus früheren Programmiersprachen stammen und Heutzutage nicht mehr üblich sei.
Um eine Variable formatiert in einen Text zu setzen gibt es keine einfache Methode. Man will schließlich aus einem binär dargestellten Zahlenwert eine Zeichenfolge erzeugen! Dazu gibt es zwei Methoden, die einfachste (für eine Integer zu Text wandlung) itoa( int ); itoa = integer to Ascii Ein float - Wert lässt sich mit vertretbarem Aufwand nur über eine sprintf-Funktion in eine Zeichenkette wandeln. sprintf = string print formatted man kann das so machen: char buf[30]; float floatvar = 4.23f; sprintf( buf, "Wert=%f", floatvar ); Glcd_Write_Text(buf, ,0 , 2, 1); Was sollen die zusätzlichen Parameter darstellen ? Das musst Du wissen.. mit Hilfe dieser Stichworte solltest Du dir die Beschreibung dieser Funktionen anlesen... gruß
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.