Hallo, da mir die letzten Denkanstöße hier sehr geholfen haben möchte ich es natürlich hier auch weiter versuchen. Wie gesagt ich versuche im Selbststudium die Ausgabe auf LCD´s in Assembler auf die Reihe zu bekommen. Zur Problemstellung: ich möchte auf dem LCD einen Sollwert schreiben den ich dann verändern möchte. Den Sollwert schreiben ist nicht das Problem, das funktioniert. Wenn ich den jetzt ändern will muß ich, nach meinen Vorstellungen, mit dem Curser auf die entsprechende LCD Adresse und dort hin schreiben was ich möchte? mit Text geht das ja, aber einfach mit Tastendruck habe ich hier ein Wissensloch, mangels Erfahrung. Also z.B. an einer Position (welche 2rangig) in Zeile 2 des Display steht "123" nun möchte ich die dritte Stelle, also die "3" mit drei Tastendrücken auf "6" stellen, genau da stoße ich an meine Grenzen, wahrscheinlich ist das Problem überhaupt keins aber mit wenig Erfahrung halt schon, vor allem deshalb weil der gespeicherte Wert, der ja für was gut sein soll, auch entsprechend verändert werden muss. Es wäre toll wenn mir hier jemand eine verständliche Erklärung oder einen kleinen Codeschnippsel geben könnte. Gruß Harry
J. S. schrieb: > funktioniert. Wenn ich den jetzt ändern will muß > ich, nach meinen Vorstellungen, mit dem Curser auf > die entsprechende LCD Adresse und dort hin schreiben > was ich möchte? mit Text geht das ja, aber einfach mit > Tastendruck habe ich hier ein Wissensloch, mangels Erfahrung. > Also z.B. an einer Position (welche 2rangig) in Zeile 2 > des Display steht "123" nun möchte ich die dritte Stelle, > also die "3" mit drei Tastendrücken auf "6" stellen, Du konzentrierst du dich zusehr auf das LCD. Das LCD zeigt nur einen Wert an, den du im Programm in einem Register oder einem Speicher hast. Dort manipulierst du den Wert und zeigst dann den veränderten Wert erneut an. D.h. deine 3 Tastendrucke verändern nicht am LCD die Anzeige "3" zu "6" sondern sie erhöhen im Register den Wert von 123 auf 126 und die nachfolgende Ausgabe sorgt dann dafür, dass am LCD 126 steht, mit deiner zur "6" geänderten "3"
Du legst eine Variable im SRAM an. Bei jeden Tastendruck wird die Variable geändert und komplett neu auf das LCD ausgegeben. Peter
Hallo Karl Heinz, das war auch mein erster Gedanke, was mich allerdings zum zweifeln gebracht hat ist, wie geht das dann wenn ich anstelle der einer Stelle "3" die hunderter Stelle die "1" um drei erhöhen will, da funktioniert das so nicht mehr.
J. S. schrieb: > Hallo Karl Heinz, > > das war auch mein erster Gedanke, was mich allerdings > zum zweifeln gebracht hat ist, wie geht das dann wenn > ich anstelle der einer Stelle "3" die hunderter Stelle > die "1" um drei erhöhen will, da funktioniert das so > nicht mehr. Das Prinzip ist nach wie vor dasselbe. Du musst nur Buch führen, wo dein Cursor gerade ist. Ist er über der Hunderterstelle dann zählst du eben nicht 1 dazu oder weg, sondern 100 dazu oder weg. Geht dein Benutzer mit der Taste nach rechts von den Hundertern zu den Zehnern über (das registrierst du in einem anderen Register), dann eben nur noch Zehn dazu oder weg. D.h. in dem Fall hast du 2 Register. Das eine, "Stelle", sagt dir, welche Stelle dein Benutzer gerade verändert (zb 1 -> Hunderter verändern, 2 -> Zehner verändern, 3 -> Einer verändern) und im anderen Register hast du deine Zahl selber. Drückt dein Benutzer die Taste "nach Rechts", dann erhöhst du Stelle um 1. Drückt er "nach Links", dann verinngerst du Stelle um 1. Natürlich nur wenn das geht, d.h. wenn Stelle danach nicht 0 oder 4 werden würde. Und beim eigentlichen Erhöhen fragst du dann nach einem Tastendruck das Register Stelle ab: ist es 1 dann zählst du 100 dazu/weg. Ist es 2 dann 10 dazu oder weg oder aber wenn es 3 ist, dann eben nur 1 dazu oder weg. Denk dir was aus! Solange du dir vorstellen kannst was funktioniert, kann man das auch programmieren. Und manchmal müssen eben mehrere Mechanismen zusammenarbeiten, damit ein bestimmter Effekt entsteht. Was ich damit sagen will: Das beschrieben ist nicht die einzige Möglichkeit wie man eine mehrstellige Eingabe machen kann. Ich machs zb gerne so, wie du es von deiner PC-Tatstur kennst: drückst du die Taste einmal schreibst du nur 1 Buchstaben. Drückst du sie aber und hältst sie gedrückt, dann werden immer weiter Buchstaben geschrieben. Dasselbe kann man auch bei Zahleneingaben machen. Einmal drücken - einmal erhöhen. Drücken und gedrückt halten - 'Dauerfeuer' beim Erhöhen.
Hallo Karl Heinz, in fast die selbe Richtung ging meine Vorstellung auch aber ich dachte, eventuell gibt es da was einfacheres. Ich werde es dann einfach mal so machen. Vielleicht erreicht uns ja hier doch noch ein Vorschlag der uns beide überrascht. Vielen Dank noch.
Schau mal hier http://www.loetstelle.net/projekte/belichtungs_timer/belichtungs_timer.php In dieser Software wird genau das gemacht, der Cursor wird an geeigneter Stelle positionoert und Variablen im Speicher werden erhöht/Erniedrigt. Zwar eine etwas umfangreichere Anwendung und das ganze nocht über Taster sondern Drehencoder, aber im Prinzip genau so ein Code wie Du sucht.
Hallo, ist auch eine Alternative, wirklich weniger Aufwand ist das allerdings auch nicht. Aber darum alleine geht es ja auch nicht, wie gesagt bei mir mangelt es noch an der Erfahrung und da ist man auch froh alleine mehrere Lösungsmöglichkeiten zu sehen für ein und das selbe Problem.
Ist zwar schon ewig her, daß ich noch in Assembler programmiert habe. Hier mal ein Beispiel: Beitrag "DCF77-Uhr mit ATTINY12" Gerade in Assembler ist es wichtig, sich erstmal ein Konzept zu machen und nicht wild drauflos zu programmieren. Die einzelnen Aufgaben werden dann einzeln für sich implementiert und dann im Main nur noch includiert und aufgerufen. Wichtig ist auch, den Code zu kommentieren. Sonst weiß man später selber nicht mehr, was man sich dabei gedacht hatte. Durch das Funktionskonzept mit Parametern und Returnwerten, ist es in C einfacher, modular und übersichtlich zu programmieren. In Assembler muß man sich erstmal Regeln aufstellen (welche Register enthalten Parameter, welche kann die aufgerufene Funtion zerstören, welche Register sind für Interrupts reserviert usw.). Ohne diese Regeln artet Assembler in Push/Pop-Orgien aus, viele Register werden umsonst gesichert. Peter
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.