Für ein Projekt mit meinem ATMega 128 hab ich die klassischen vier Taster angeschlossen: - RECHTS - LINKS - HOCH - RUNTER Funktionswunsch: Wenn ich eine Auswahl mit den Tasten treffen möchte, starte ich automatisch in Ebene1, d.h. ich kann von Pos. 1 bis z.B. 8 mit RECHTS oder LINKS auswählen. Wenn ich dann auf einem "Thema" stehe, kann ich mit RUNTER in die nächste Benutzerebene springen, und dort mit RECHTS / LINKS weitere, genauer spezifizierte Funktionen (z.B. Optionen) ausführen, usw. Insgesamt stehen 3-4 Ebenen zur Verfügung. Was mir fehlt ist das Prinzip, WIE ich das Ganze proggen kann, damit ich nachher über eine Kombination der einzelnen Positionen meiner Auswahl das entspr. Unterprogramm auswählen kann. Z.B. Ebene1 = 3. Thema, Unterthema dann Nummer 6 und Option dann 8 = ergibt Funktion 368. Allerdings möchte ich auch, das wenn ich das nächste Mal auf das 2. Thema gehe, das was ich zuvor mit Unterthemen etc eingestellt hatte wieder angezeigt wird. Any Ideas ? Danke vorab, Micha
Hi... Ich bin gerade dabei, Ähnliches in ASM zu programmieren. Dabei halte ich die Variable 'mp' (Menüpunkt) in einem Register. Für jeden Menüpunkt gibt es eine kleine Routine, wobei die Auswahl über eine Sprungtabelle mit indirektem Sprung (über Z-Pointer) erfolgt. Diese kleinen Routinen ändern je nach Tastendruck die Parameter bzw. den Menüpunkt. Sie setzen auch die Position und Anzahl der Zeichen, die im Dialog blinken sollen. Die gesamte Menüroutine wird nur nach einem von der Entprellroutine (frei nach PeDa) erkannen Tastendruck aufgerufen. Dabei wird nicht auf Drücken der Tasten getriggert, sondern auf Loslassen. Es wird auch zwischen kurzem und langem Tastendruck unterschieden. Die Textausgabe auf LCD (4x20) erfolgt in einer separaten Routine, die alle volle Sekunde aufgerufen wird. Der betreffende Text wird anhand der Menüpunktnummer ausgewählt (Ausgaberoutine mit indizierter Adressierung von Strings). Jeweils zur halben Sekunde (also im Gegentakt zur vollen Sekunde) wird eine Routine aufgerufen, die den Bereich des LCDs mit Leerzeichen überschreibt, der von der Menüpunktroutine definiert wurde. Dies täuscht ein Blinken des gerade änderbaren Parameters vor, was einen eindeutigen Dialog ermöglicht. Die gesamte Steuerung erfolgt durch Timer-Interrupt. Das Programm läuft auf dem Mega32. Für den Programmcode würde bisher (ist noch nicht fertig) ein Mega8535 reichen, aber ich brauchte mehr EEPROM, deshalb der Mega32. Neben dem LCD und den klassischen 4 Tasten sind über SPI noch 8 Schieberegister für weitere 32 Taster und 32 Relais angeschlossen. Auch diese Taster werden kugelsicher entprellt, wobei für Drücken und Loslassen separate Flags zur Verfügung gestellt werden und beim Loslassen auch noch zwischen kurzem und langem Tastendruck unterschieden wird. Die LCD-Ausgabe erfolgt im Timer-Interrupt über einen Ringbuffer von 256 Bytes, der auch Steuerzeichen für Ausgabeposition und Umschaltung auf UART enthält. Somit wird für die LCD-Ausgabe keinerlei Wartezeit vergeudet. Da die Ausgabe auf UART umgeleitet werden kann, können die Routinen zur Umwandlung von Zahlen in ASCII sowie zur Ausgabe von Strings für LCD und UART genutzt werden. Man setzt nur statt der Locate-Position das UART-ON-Steuerzeichen, und schon wird der folgende Text bis zum nächsten Locate-Befehl über UART an PC gesendet. Das ist aber in ASM. In BASCOM hätte ich Probleme, das zu realisieren... ...
Es gibt irgendwo ein Beispiel fpr ein solches Menu, ( in Bascom) ich weiß nur nicht gerade, ob in der Codesammlung, oder bei MCS Electronic Grüsse Steffen
>Es gibt irgendwo ein Beispiel fpr ein solches Menu, ( in Bascom) ich >weiß nur nicht gerade, ob in der Codesammlung, oder bei MCS >Electronic >Grüsse Steffen Weißt du Genaueres? Hab glaub ich alles mit Betreff "Menue" gelesen, allerdings nichts in BASCOM gefunden... Aber vielleicht such ich ja falsch... :-/
@HanneS. Auch ich habe ein Menu in ASM entwickelt wobei Flexibilität das Hauptkriterium war. Das Menu sollte nicht nur in eine Anwendung implementiert werden sondern jederzeit abänderbar in einer anderen Anwendung funktionieren. Ist der Menüaufbau bekannt(auf dem Papier) sollte innerhalb von 20min das komplette Menu in der Anwendung sein, natürlich ohne viel Schreibarbeit. Nach vielen schlaflosen Nächten und Unmengen von Alkohol habe ich eine akzeptable Lösung gefunden. Natürlich braucht man da ein Helferlein, hier Excel, welches die Tipparbeit erledigt. Habe im Anhang mal ein älteres Muster. Die Menuform ist eine Matrix. Hier im Beispiel aus 3Spalten und 10 Zeilen. Aber das ist variabel also es können auch 10Spalten und 40 Zeilen sein, ist dann natürlich völlig unübersichtlich. Oben Links steht der erste Menupunkt:"Tele-Contr". Dann kommt die Länge des Eintrages, hier 10Char berechnet von Ecxel. Die Länge der Einträge kann vorgegeben werden und Execl kürzt dann oder füllt automatisch mit Leerzeichen auf. Als nächtes kommt kommt die Sprungrichtung, sprich wohin kann ich mich mit dem Tasten: Auf Links Enter Rechts Ab bewegen. In diesem Fall nach Rechts zu "Controll" oder nach "Unten" zu "Datenbank". 1=Sprung möglich / 0=Sprung gesperrt Nächtes Feld ist der Hex-Wert des Tastenfeldes. Das Menuprogramm reagiert nur wenn eine der Beiden Tasten gedrückt wird. Bei Menupunkten wo auch Enter möglich ist, wird nach Druck auf die Entertaste über den Z-Pointer eine rjmp-Tabelle angesprungen in der dann das Unterprogramm aufgerufen wird. Nach Beendigung des Unterprogrammes wird wieder automatisch das Menu angezeigt. Es muß also nichts im Unterprogramm stehen was auf das Menu verweist. Natürlich kann das Menu auch mit einem bestimmten Menupunkt aufgerufen werden. Die "$$$$$$$$$$$" sind Leerzeilen welche nicht angesprungen werden. Drücke ich z.B bei Setup nach unten kommen nicht die Zeilen mit "§§§§§§" sondern gleich "Utils". Habe ich das Menu in Excel eingegeben wird auf das Button "Schreibe in Datei" gedrückt und den Rest hat Excel zu erledigen. Es generiert automatisch den ASM-Text sowie die dazugehörigen Parameter. Wenn es bei Dir das Laufwerk C: gibt steht dann dort eine "TAL_Menu.txt". Das ist der ASM-Text. Gibt es bei Dir noch das Verzeichnis "C:\Windows" wird gleichzeitig das Notepad geöffnet und Du kannst den ASM-Text bequem in Deine Anwendung kopieren. Funktioniert eigentlich sehr gut und in 20min habe ich das Menu komplett in der Anwendung. Gruß Stevko
Hallo Stevko... Open-Office scheint damit nicht zurecht zu kommen. M$-Excel benutze ich nicht. Ist mir zu teuer, und geklaute Software nutze ich aus Prinzip nicht. Ich kann es also nicht nachvollziehen... Trotzdem danke... ...
Hi Micha, Deinen Ansatz finde ich cool. Leider kann ichs nicht probieren, da Du wohl eine Funktion DezinHex (?) verwendest? Ansonsten würde ich das gerne mal an meiner Applikation ausprobieren. Danke und Gruß Wolfram
@Wolfram: Aus der Excel-Hilfe: DEZINHEX: Wandelt eine dezimale Zahl in eine hexadezimale Zahl um. Ist diese Funktion nicht verfügbar, müssen Sie das Setup-Programm ausführen, um die Analyse-Funktionen zu installieren. Nachdem Sie die Analyse-Funktionen installiert haben, müssen Sie diese mit Hilfe des Befehls Add-In-Manager im Menü Extras aktivieren. Gruß Stevko
Hallo Micha Ich mache das so daß ich eine Variable definiere in der jedes Bit einer gedrückten oder nicht gedrückten Taste entspricht (0 oder 1). Zusätzlich in Deinem Fall kommt noch für jede Ebene ein bit dazu. In Deinem Fall also 4+3 Bits. Mit der Bascom Tastenabfrage springe ich in eine Routine in der jeweils geprüft wird welche Taste gerade gedrückt wurde und entsprechend werden die Bits gesetzt bzw andere gelöscht. Der Zahlenwert der Variable sagt Dir dann welche Taste in welcher Ebene gedrückt wurde. Diesen Zahlenwert kannst an anderen Stellen des Programms verwenden denn er enthält den letzten Tastenbefehl und die gewuenschte Ebene. Gruß Michael
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.