AVR LCD Display Menü (Pfeil)

Gast #2970827
Lesenswert?

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 ;)
#2970870
Lesenswert?

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
#2971013
Lesenswert?

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.
#2971017
Lesenswert?

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.
Gast #2971116
Lesenswert?

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
#2971145
Lesenswert?

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.
Gast #2973061
Lesenswert?

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 ^^
Gast #2973065
Lesenswert?

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 */
Gast #2973070
Lesenswert?

>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.
#2973149
Lesenswert?

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.
#2973158
Lesenswert?

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!
#2973182
Lesenswert?

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?
Gast #2973203
Lesenswert?

>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

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