Hey, wie lautet der Code um eine LCD Anzeige zu stoppen, indem man den ESC-Button drückt und wie kehrt man wieder zurück in den Hauptmenü? LG
Beitrag #5186440 wurde von einem Moderator gelöscht.
Pseudocode: If(esc-knopf) stoplcd() ; Für echten Code solltest du vlt. Die ganze Fragestellung deiner Hausaufgabe posten.
Ich möchte nach Berlin, muss ich jetzt Links oder Rechts abbiegen? Sorry Yin-yin Lo, aber merkst du etwas? Du kannst mir die Frage nicht beantworten, weil du gar nicht weißt wo ich mich befinde - und genau so wenig wissen wir: - welches LCD - welche Steuerung - welches Menü - welches System - usw. Aber versuch mal das: ON/OFF Schalter, der sollte ein Rücksprung ins Hauptmenü bewirken. Kopfschüttel
Also meine ganze Aufgabe lautet dass ich eine Zeichenkette auf dem LCD Display in 500ms Abständen ausgeben, solange bis der ESC-Button gedrückt worden ist.
Y. L. schrieb: > Also meine ganze Aufgabe lautet Nun, erstens sind wir hier nicht das Wer-macht-mir-meine-Hausaufgaben Forum, folglich solltest du etwas vorweisen können, was du schon an Eigenleistung zur Lösung deiner Aufgabe getan hast. Falls es dann mal an einer Ecke hakt, weil du vielleicht den Wald vor lauter Bäumen nicht siehst, wirst du sicher Hilfe im Forum finden. Zweitens hat natürlich außer dir keiner hier eine Idee, auf welcher Hardware und mit welcher Softwareumgebung du überhaupt arbeitest. Netiquette lässt grüßen: alle relevanten Informationen gehören in das Eingangsposting.
Ich entschuldige mich dafür dass es so rüberkam als wollte ich dass einer hier meine Aufgaben erledigt. Es war nicht meine Intention. Bin Anfänger und deswegen auch noch bisschen ahnungslos bei Rückfragen. Habe die Headerdatei delay.h inkludiert und soweit alles im Code womit die Aufgabe erfüllt ist. Ich weiß nur nicht wie ich Anzeige auf dem LCD stoppen kann indem ich den ESC-Button drücke (welches mit den Button 4 von PORTB verbunden sein sollte). (Ich entschuldige mich jetzt schonmal wenn ich mich vielleicht falsch ausgedrückt habe in einigen Punkten). LG
Y. L. schrieb: > welches mit den Button 4 von PORTB verbunden sein sollte Da ist nun die erste Frage: wie ist der Button denn verbunden? Ist es ein Taster nach Vcc, ein Taster nach GND? Gibt es in der Hardware schon Widerstände, die den Pin ohne gedrückten Button in eine der beiden Spannungslagen ziehen? Macht die Software schon irgendwas, um diesen Button zu bedienen, oder musst du das alles selbst machen (also ist das Teil deiner Aufgabe)? Prinzipiell fragt man beim AVR (um den es ja offensichtlich geht) die Eingänge eines Ports über das IO-Register PINx ab, hier also PINB (x = Name des Ports). Damit bekommt man den Zustand aller acht Eingänge dieses Ports, man muss sich dann in einer logischen Operation den heraussuchen, der der gewünschten Bitnummer (hier also offenbar 4) entspricht. Ob das Bit dann bei gedrücktem Button 0 oder 1 wird, das hängt von den Antworten auf obige Fragen ab. ;-)
Hi Ich habe Da noch ein ganz anderes Problem: Wie stoppt man eine LCD-Ausgabe? Sofern wir hier über ein 'normales' LCD-Modul reden und nicht über das eigentliche LCD - also nur das Glas-Dingens. Das Modul zeigt bis in alle Ewigkeiten Das an, was zuletzt zum Display geschickt wurde. Wenn Das ein 'Lösche das Display, schalte die Beleuchtung aus, schiebe den Cursor nach 0' war, dann ist das Display leer, dunkel und der Cursor steht ganz vorne. Was wird bei 'nicht gestopptem Display' ausgegeben? Vll. wirst Du ja einen aufsteigenden Counter anzeigen und beim Druck auf den 'ESC'-Knopf soll diese Anzeige (nur die Anzeige, oder auch der Counter selber?) stehen bleiben? Bei Ersterem quasi eine Art Zwischen-Zeit, wie bei den alten Stop-Uhren möglich hüstel ... ja, ich kenne so Dinger noch ;). MfG
„Hi Ich habe Da noch ein ganz anderes Problem:“ Das glauben wir Dir gern!
Und schreibe das delay besser vor das clear, sonst siehst Du nichts.
Christian S. schrieb: > Und schreibe das delay besser vor das clear, Egal wie, das wird so oder so ein Flackerdisplay. Es werden zwei delays benötigt: Schreiben - Pause - Löschen - Pause. Da eine Taste abgefragt werden soll, wird das delay durch eine sinnvollere Funktion ersetzt werden müssen.
Du hast da ja mit while() eine Endlosschleife vorliegen, die fortlaufend etwas auf dem Display ausgibt. Ich denke, die Aufgabe besteht darin, dass ein Druck auf die ESC Taste diese Schleife verlassen soll. Also das PIN Register lesen und mit break() die Schleife verlassen. Ich könnte die eine Zeile Code jetzt hier hinschreiben, aber leider > sind wir hier nicht das Wer-macht-mir-meine-Hausaufgaben Forum > Da eine Taste abgefragt werden soll, wird das delay durch eine > sinnvollere Funktion ersetzt werden müssen. Das kommt dann sicher später im Kurs für Fortgeschrittene :-)
:
Bearbeitet durch Moderator
Y. L. schrieb: > Bildschirmfoto_2017-10-24_um_22.39.33.png Du hättest besser den Quellcode umrahmt von den [c] Tags hier her kopiert. Dann hätte man den Code für diese ESC-Taste kurz einfügen können. BTW: wenn nicht selber ein wenig über die Aufgabe nachdenkst, recherchierst und du es nicht selber probierst, dann lernst du nichts und wirst in der Prüfung auflaufen. Ich denke, das ist dir klar?
Das mit den 500ms ergibt für mich irgendwie gar kein sinn. Falls es so sein sollte:
1 | while
|
2 | {
|
3 | lcd_writeString("Foo"); |
4 | _delay_ms(500); |
5 | lcd_clear(); |
6 | }
|
...dann wirst du die Ausgabe immer sehen, mit einem Flakern alle 500ms. Um der Aufgabe gerecht zu werden, wäre ich für 500ms die Ausgabe anzeigen, dann löschen und 500ms warten (nichts anzeigen) und dann wieder von vorne...somit hast du eine blinkende Ausgabe und falls dann ESC gedrückt wurde, springst aus der while rauß und löscht die Ausgabe - ENDE. Aber wenn du das mit _delay_ms() machst, und dein ESC Pin nicht mit einem Interrupt verbunden ist, dann sollte dir klar sein, dass du mindestens 500ms ESC gedrückt halten musst, da dein Prog. im "delay" hängt. Weiterhin wissen wir nicht ob ESC den Pin auf HIGH oder LOW zieht. Das ist kein optimaler Code, aber ich wills dir nicht unnötig kompliziert machen. - evtl. muss den PIN von PORTB noch anpassen.
1 | bool esc = false; |
2 | |
3 | do
|
4 | {
|
5 | lcd_writeString("Foo"); |
6 | _delay_ms(500); |
7 | |
8 | /* ESC zieht PIN gegen LOW - Entprellung fehlt! */
|
9 | if( !(PINB & (1<<PINB4)) ) |
10 | {
|
11 | esc = true; |
12 | }
|
13 | |
14 | lcd_clear(); |
15 | _delay_ms(500); |
16 | |
17 | /* ESC zieht PIN gegen LOW - Entprellung fehlt! */
|
18 | if( !(PINB & (1<<PINB4)) ) |
19 | {
|
20 | esc = true; |
21 | }
|
22 | |
23 | } while(esc == false); |
24 | |
25 | lcd_clear(); |
26 | lcd_writeString("ENDE"); |
27 | |
28 | while(1) |
29 | {
|
30 | }
|
edit: Hast du das an der FH/Uni? Kommt mir vor wie Aufgabe 1 in Systemarchitektur / Technische Info. :-D Wobei das bei uns Assembler war und kein LCD.
:
Bearbeitet durch User
Adam P. schrieb: > ...dann wirst du die Ausgabe immer sehen, mit einem Flakern alle 500ms. Flakern - das Display schießt? Aber das hatten wir schon: Manfred schrieb: > Flackerdisplay.
Manfred schrieb: > Adam P. schrieb: >> ...dann wirst du die Ausgabe immer sehen, mit einem Flakern alle 500ms. > Flakern - das Display schießt? JA, hab ich einen Buchstaben vergessen ;-) sorry...
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.