Hallo zusammen, Ich brauche einen kleinen Lehrgang. #define LCD_DATA_PIN PINC #define LCD_DATA_PORT PORTC #define LCD_DATA_DDR DDRC #define CD 0x07 #define RW 0x06 #define EN 0x02 #define CS1 0x05 #define CS2 0x04 #define RES 0x03 CD, RW, EN,... hat einen Pin. Quasi 0x01 = 0b00000001 = PC0 Was stelle ich mir da jetzt unter 0x07 = 0b00000111 = PC??? vor.? Kann mir das einer erklären.? :) Danke MfG
Das sieht nach den Definition für Schiebeoperationen aus, wie z.B.
1 | LCD_CONTROL_PORT = (1 << CD) | (1 << EN); |
jossen schrieb: > pin defines von einer ks0108 ansteuerung Du musst dir ansehen, wie diese Makros verwendet werden. Das bestimmt, 'was du dir darunter vorstellen musst'. #defines sind wie Textersetzungen in deinem Editor. Nur automatisiert. Wenn im Suchen&Ersetzen Dialog der Text 'der' gegen den Text 'das' ausgetauscht wird, dann hängt es vom Text ab, auf den du die Ersetzung loslässt, was da der tiefere Sinn dahinter ist.
Liest sich manchmal auch jemand die gestellte Frage richtig durch??? #define CD 0x07 #define RW 0x06 #define EN 0x02 #define CS1 0x05 #define CS2 0x04 #define RES 0x03 sind die Zuweisungen zu den PINs am µC. würd ich persönlich so machen: #define CD PC0 bwz. 0 #define RW PC1 bzw. 1 #define EN PC2 ... #define CS1 PC3 ... #define CS2 PC4 ... #define RES PC5 bzw. 5 lg
Hallo, ich habe auch eine Frage zu der #define "Geschichte".... :) Folgendes: ..ich gebe den Ausgängen des Ports C Namen => #define LED0_ON PORTC |= (1<<PC0); #define LED0_OFF PORTC &= ~(1<<PC0); #define LED1_ON PORTC |= (1<<PC1); #define LED1_OFF PORTC &= ~(1<<PC1); #define LED2_ON PORTC |= (1<<PC2); #define LED2_OFF PORTC &= ~(1<<PC2); #define LED3_ON PORTC |= (1<<PC3); #define LED3_OFF PORTC &= ~(1<<PC3); #define LED4_ON PORTC |= (1<<PC4); #define LED4_OFF PORTC &= ~(1<<PC4); Somit verwende ich im Programm nur das LED1_ON zB. Frage : wie mache ich es mit den Eingängen, an den Taster sind. Habs so versucht, bekomme jedoch den Fehler "expected ")" before ";" token. #define taster1 PIND & (1<<PD2); #define taster2 PIND & (1<<PD3); Gruß Rafael
Rafael S. schrieb: > #define taster1 PIND & (1<<PD2); > #define taster2 PIND & (1<<PD3); Das Semikolon ist dann Teil des #define - sicher nicht das, was du beabsichtigst. Es wäre vermutlich auch sinnvoll, den 'PIND & (1<<PD2)' Teil noch in Klammern zu schreiben.
:
Bearbeitet durch User
Hallo, das habe ich soeben ausprobiert... Was ich festgestellt habe ist, dass dieses Problem mit der Abfrage des Tasgers1 in der If Anweisung zu tun hat. Denn wenn ich die Abfrage in der If- Anweisung weg lasse bzw mit if (!(PIND&(1<<PD2))) mache dann kommt die Fehlermeldung nicht. Wie müsste ich den Taster1 abfragen?? ....wenn "taster1" betätigt, dann.... if ( !taster1) {....} oder if (!(taster1)) {...} Habe beides ausprobiert.. leider kommt dann immer die Fehlermeldung "expected ")" before ";" Gruß Rafael
Das ist Dir bereits von Matze beantwortet worden. Alles nähere findest Du in einem C-Buch erklärt.
Rafael S. schrieb: > Denn wenn ich die Abfrage in > der If- Anweisung weg lasse bzw mit if (!(PIND&(1<<PD2))) mache dann > kommt die Fehlermeldung nicht. Ja, da steht eben auch kein Semikolon drin. Stell dir einfach vor, das das #define dir im jetzigen Zustand folgendes in den Code schreibt:
1 | #define taster1 PIND & (1<<PD2);
|
2 | |
3 | // aus if ( !taster1) wird dann:
|
4 | if (!PIND & (1<<PD2);); |
und das ist eben Blödsinn. Funktionieren wird also eher
1 | #define taster1 (PIND & (1<<PD2))
|
2 | // so wird aus if ( !taster1)
|
3 | if (!(PIND & (1<<PD2)) { |
4 | // do stuff
|
5 | }
|
Jetzt klarer?
Hallo Matthias, jetzt ist es super klar!! :) Matthias S. schrieb: > Das Semikolon ist dann Teil des #define Diese Aussage hat mich ein wenig auf den falschen Gedankenpfad geschickt! Ich dachte mir, na klar ist das Semikolon ein Teil des "#define". Steht doch am Ende jeder Zeile.. aber dass das Semikolon ein Teil des "Namen", hier "taster1" ist, habe ich ausgeblendet! :( Sorry!! Das Erlernen des C- programmierens ist nicht einfach... gebe mir Mühe :-) Und tausend Dank für die ausführliche Erläuterung!! :) 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.