Hallo Leute!! Ich hab ein Problem mit dem programmieren eines atmega8 LCD Displays 4x16. Ich schaffe es Texte per Tasten druck erscheinen zu lassen^^. Ich habe 4 Taster und möchte ein Menü erstellen. 2 Tasten sollen RAUF und RUNTER fahren. Auf der ersten Spalte hab ich Platz gelassen weil ich dort einen Pfeil haben will welches mir zeigt, welches Programm ich wähle. Könnt ihr mir bitte helfen den Pfeil so zu programmieren das es beim RUNTER_taste nach unten geht und anders rum. Bitte!! Danke im Voraus ;)
Speichere die momentane Pfeilposition doch in einer (modul-)globalen Variable. Pseudocode:
1 | uint8_t pfeil; |
2 | #define PFEIL_MAX 3
|
3 | |
4 | void init(void) |
5 | {
|
6 | pfeil = 0; |
7 | pfeil_setze(pfeil); |
8 | //...andere init-sachen
|
9 | }
|
10 | |
11 | void taste_runter(void) |
12 | {
|
13 | pfeil_lösche(pfeil); |
14 | pfeil++; |
15 | pfeil = (pfeil > PFEIL_MAX) ? 0 : pfeil; |
16 | pfeil_setze(pfeil); |
17 | // tue dieses
|
18 | }
|
19 | |
20 | void taste_hoch(void) |
21 | {
|
22 | pfeil_lösche(pfeil); |
23 | pfeil--; |
24 | pfeil = (pfeil = 255) ? PFEIL_MAX : pfeil; // 255 wegen überlauf |
25 | pfeil_setze(pfeil); |
26 | // tue jenes
|
27 | }
|
mfg mf
WOW dankee für die schnelle Antwort!!^^ Was meinst du den mit "andere init-sachen" -> bin voll der Anfänger :P
Hallo, was sollen den die _delay_ms(20); alle da ? Ich kann C seit >30 Jahren programmieren, aber denn Sinn verstehe ich nicht.
hy ja ich weiss eig voll unnötig!! aba ich weiss nicht weiter. an troll sryy !!
Tony schrieb: > hy ja ich weiss eig voll unnötig!! aba ich weiss nicht weiter. Wurde doch schon gesagt. Dein Menü ist in Zeilen aufgeteilt. Wenn du in die 3. Zeile einen > haben willst, dann musst du eben den Cursor in die 3. Zeile schicken und dort den > hinmalen (und von der Stelle wegnehmen, an der er vorher war). Woher weißt du, in welche Zeile du den > brauchst? Indem du eine Variable hast, die dir genau das festhält. Bei jedem Tastendruck 'runter' erhöhst du diese Variable um 1, bei jedem Tastendruck 'rauf' verringerst du ihn. D.h. der Inhalt dieser Variablen sagt dir zu jedem Zeitpunkt, welche Zeile (die Nummer der Zeile) die gerade 'aktive' ist. D.h. das ist die, welche ausgewählt wird, wenn der Benutzer auf 'jetzt machen' drückt. Und lern erst mal ein bischen C. Ohne sich die Funktionalität in Funktionen aufzuteilen, macht das alles wenig Sinn.
Und nochwas: Verabschiede dich von der Technik, das LCD ständig zu löschen und neu zu bechreiben. Genau das willst du nicht, weil sonst alles flackert. Du malst EINMAL deine 4 Menüpunkte aufs LCD und dann veränderst du nur noch, wo der > hinkommt, abhängig davon, welche Taste gedrückt wurde.
Da fällt mir noch was ein. Du brauchst als aller erstes erst mal eine vernünftige Tastenauswertung! Entprellung Mit deiner Technik wertest du aus, ob eine Taste gedrückt ist! Das hilft dir aber nicht weiter. Du musst einen einzelnen Tastendruck sauber erkennen können.
Tony schrieb: > Danke für die Erklärung. :D > aber wie lösche ich den Pfeil? :-) Indem du ein Leerzeichen 'darüber' malst. Jede LCD-Position zeigt immer irgendetwas an. Und wenn diese Position 'nichts' anzeigt, dann zeigt sie eben ein Leerzeichen an.
Aber wie schon gesagt: Ehe du ans Menü gehen kannst, brauchst du erst mal eine ordentliche Erkennung eines Tastendrucks. Ehe du das nicht hast, geht gar nichts mit dem Menü, so wie du dir das vorstellst.
Voll dankee :D Ich hab jetzt ein anderes Problem wie kann ich den hier ">" als "pfeil" defienieren?
Tony schrieb: > Voll dankee :D > > Ich hab jetzt ein anderes Problem wie kann ich den hier ">" als "pfeil" > defienieren? Was meinst du mit 'hier'? Du schreibst das in deinem Programm einfach hin. lcd_move_cursor( actLine, 0 ); LOG_str(" "); actLine++; lcd_move_cursor( actLine, 0 ); LOG_str(">");
lcd_move_cursor(LCD_LINE_2,0); LOG_str(" "); LCD_LINE_2++; lcd_move_cursor(LCD_LINE_2,0); LOG_str(">"); ich habs so hingeschrieben aber es zeigt mir einen ERROR bei der 3 Zeile ^^ ERROR: error: lvalue required as increment operand
Tony schrieb: > lcd_move_cursor(LCD_LINE_2,0); LCD_LINE_2 ist wahrscheinlich bei dir eine KONSTANTE. Die kannst du nicht verändern! Kann es sein, dass dir das Konzept einer Variablen überhaupt nicht sagt? Wenn ja, dann solltest du erst mal ein C-Buch von Anfang an studieren. Das sind Grundlagen. Sozusagen: erste Klasse, erste Stunde. Ohne gewisse Grundkentnisse in C geht es nunmal nicht.
Ja tschuldigung ich sollte mir wirklich das alles nochmal anschauen, nur hab ich jez meine Matura und hab keine Zeit das alles neu zu lernen. Das Display ist ein Teil der Matura bei mir. Desshalb bräuchte ich eure Hilfe!! Wenn es jetzt eine Konstante ist wie könnte ich es dann machen? Ich komm irgendwie nicht drauf :D Danke im Voraus ^^
So ist es vordefiniert: #define LCD_LINE_1 0x80 /* bit 7 is always set: 0x80 = 0x00 */ #define LCD_LINE_2 0xC0 /* 2nd line at position 40 */ #define LCD_LINE_3 0x90 /* 3nd line at position 20 */ #define LCD_LINE_4 0xD0 /* 4nd line at position 40 */
>Wenn es jetzt eine Konstante ist wie könnte ich es dann machen? Indem Du es machst, wie Karl Heinz angeregt hat. (Mach' immer das was Karl Heinz sagt :-) ) >Kann es sein, dass dir das Konzept einer Variablen überhaupt nicht sagt? >Wenn ja, dann solltest du erst mal ein C-Buch von Anfang an studieren. Das Du mit der Matura (ich will 'nen Almdudler) zu tun hast, ersetzt keine Kenntnisse über Variablen. Eines von beiden musst Du jetzt vorziehen.
Tony schrieb: > Ja tschuldigung ich sollte mir wirklich das alles nochmal anschauen, nur > hab ich jez meine Matura und hab keine Zeit das alles neu zu lernen. Das > Display ist ein Teil der Matura bei mir. In dem Fall bin ich raus. Ich will nicht, dass jemand mit 0 Ahnung einen Abschluss bekommt (egal in was) > Desshalb bräuchte ich eure Hilfe!! > Wenn es jetzt eine Konstante ist wie könnte ich es dann machen? > Ich komm irgendwie nicht drauf :D Du brauchst keine Hilfe, du brauchst einen Dummen, der deine Maturaarbeit für dich macht. Interessant wird es allerdings dann, wenn du vor der Kommission stehst und der Vorsitzende ein paar Fragen dazu hat.
Mist. Jetzt habe ich erst verstanden das das für das Abitur gebraucht wird.
Hmm schrieb: >>Wenn es jetzt eine Konstante ist wie könnte ich es dann machen? > Indem Du es machst, wie Karl Heinz angeregt hat. (Mach' immer das was > Karl Heinz sagt :-) ) In dem Fall nicht ganz. Seine Zeilenkonstanten sind so (wie ich jetzt weiß), dass man erst mal eine Zwischenfunktion brauchen würde um eine ordentliche, bei 0 beginnende Nummerierung der Zeilen zu erreichen. Allerdings ist auch das nichts, was jemanden mit Grundkentnissen vor unüberwindliche Probleme stellen sollte. Und vor allen Dingen sollte er alleine drauf kommen, dass er sowas braucht!
>In dem Fall nicht ganz.
Richtig.
Uups. Gut das ich meine Hochschulreife schon in der Tasche habe. ;-)
Hmm schrieb: > Mist. Jetzt habe ich erst verstanden das das für das Abitur gebraucht > wird. Genau. Matura ist der österreichische Begriff für Abitur. Die einzige Schule, die ich kenne, in der auch praktisch gearbeitet werden muss, ist eine HTL (Höhere Technische Lehranstalt). Daher vermute ich mal, dass es sich um genau so eine Schule handelt. Da aber mit dem Abschluss dieser Schule gewisse Rechte verbunden sind (unter anderem darf man sich nach 3 Praxisjahren 'Ingenieur' nennen) lehne ich es ab, unter einem gewissen Niveau zu helfen. Dass sich mal wer verrennt ist schon ok. Passiert uns allen mal. Aber ein gewisses Niveau verlange ich von einem angehenden Ingenieur. Und wenns keine HTL ist: Wie kommt man dazu, sich eine Maturaarbeit selbst auszusuchen, von der man keine Ahnung hat?
>Matura ist der österreichische Begriff für Abitur.
Das wusste ich schon. Deswegen die Piefke-Anspielung mit dem Almdudler.
Nur, das unser Thema hier für die Arbeit notwendig war, das hatte ich
nicht verstanden. Ich dachte, er müsste sich zwischen Matura und Hobby
entscheiden.
Na gut. Lassen wir das. Ich wollte nur das Du weisst das ich weiss...
LOL
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.