Forum: PC-Programmierung 7 Segment Anzeige mit taster anhalten


von Kleißle M. (eod666)


Lesenswert?

als erstes mal hallo.
ich soll für die schule ein programm in assembler schreiben mit dem man 
4 7-Segmentanzeigen nacheinander anhalten kann. das programm soll also 
so aussehen das die erste 7 seg anzeige immer von 0 bis 9 hochzählen 
soll bis ich einen taster drücke. dabei soll dann die zahl stehen 
bleiben die gerade angezeigt wurde und die nächste 7-seg anzeige soll 
starten. dies soll dann mit allen 4 anzeigen so passieren, damit ich am 
ende sozusagen 4 zufallszahlen durch den jeweiligen tasterdruck erhalten 
hab. so jetzt zu meiner eigentlichen frage. da ich eigentlich so  gut 
wie ein neuling auf dem gebiet bin, hab ich eigentlich keine ahnung wie 
ich überhaupt anfangen soll. also wie man die 7-seg anzeige ansteuert 
ist schon klar, aber wie man des so hinbekommt das die nach jedem taster 
drücken stehen bleiben und dann die nächste anzeige los läuft, ist mir 
ein rätsel. wäre echt super wenn ihr mir ein bissel helfen könntet 
dabei. danke schon mal im voraus

von juppi (Gast)


Lesenswert?

@hallo

Es findet sich sicher noch heute Einer ,welcher dir hilft.#
Ich kann nicht.
Habe nur in der Kneipe bis 9 gezählt(Bier)

Morgen weiter!

MfG

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

@Juppi: prost, ich hab mein Bier (aber nur 1) grad zuhause getrunken

@Markus

Programmieren ist gar nicht so schwer wie es aussieht, und man muß auch 
nicht erst einmal "asseblerisch" denken um einen Algorithmus formulieren 
zu können.

versuche, das ganze erst einmal in einem "Pseudocode" zu beschreiben was 
du vorhast. Und dann schreibst du das ganze um auf Assembler. Hier wäre 
mal ein Anfang:



Initialisiere Prozessor
speichere einen initial-Wert aus-aus-aus-aus für die 4 Segmente im 
Hauptspeicher ab.
Gebe den gespeicherten Anzeigewert des HAuptspeichers auf der Anzeige 
aus
Warte, bis Taste gedrückt


# mache folgendes für das "erste" Segment:

Warte bis Taste losgelassen wird
speichere einen Start-Zählerstartwert "0" zwischen in einem 
Prozessor-Register

solange Taste nicht gedrückt ist
  lese wert des Prozessorregisters aus und speichere diesen Wert für das 
"erste" Segemnt im Hauptspeicher ab.
  Gebe den gespeicherten Anzeigewert des HAuptspeichers auf der Anzeige 
aus
  erhöhe den Prozessor-Register-Wert um 1. Falls der Wert = 10 ist dann 
setze ihn zu 0
  warte eine kleine Zeit (1/10 Sekunde?)
  prüfe, ob Taste gedrückt ist
falls nein, mache wieder oben weiter beim "solange ..:"


# mache folgendes für das "zweite" Segment:
wie zuvor, jedoch "erste" durch "zweite" ersetzen


# mache folgendes für das "dritte" Segment:
wie zuvor, jedoch "zweite" durch "dritte" ersetzen


# mache folgendes für das "vierte" Segment:
wie zuvor, jedoch "dritte" durch "vierte" ersetzen


Jetzt sind alle 4 Anzeigen vollständig, und nun mußt du dir überlegen 
was weiter passiert. Möglicherweise soll es wieder wie am Anfang 
losgehen, dann warte halt nochmal auf einen Tastendruck (Taste drücken - 
taste loslassen) und fange halt dort weider an mit der 
Programm-Abarbeitung.

---------


jetzt wird dire direkt auffallen, daß  ja eigentlich 4 mal etwas sehr 
ähnliches passiert, und du wirst dich vielleicht fragen, ob man das 
nicht "eleganter" machen kann. Ja, man kann, man könnte das nämlich in 
einer Schleife laufen lassen! Der wiederholende Block wird dann halt 
noch eine Schleifenvariable (erste zweite dritte vierte) benötigen

In der konkreten Programm-Umsetzung werden folgende Randbedingungen und 
Fragestellungen auftreten:

Eingabe:
Die Tastenansteuerung ist hier nur recht simpel beschrieben. Jetzt ist 
es in Realität so, daß Tasten prellen können und werden. Wenn du also 
eine Taste gedrückt hast, werden in Wirklichkeit ein paar mal die 
Kontakte betätigt sein (auch wenn es nur tausendsdel Sekunden sind. Da 
die Programm-Abarbeitung recht flott ist, könnte es passieren, daß du 
schon beim 2. oder 3. Segment angekommen bist, obwohl du scheinbar nur 1 
* die Taste gedrückt hast. --> Du brauchst also eine 
"Eingabe-Subroutine", welche das Tastenprellen abfängt.

Ausgabe:
wie steuerst du denn eigentlich deine Segment-Anzeige an? vermutlich 
wirst du ja keine 7 * 4 = 28 einzelne LED ansteuern, sondern "irgendwie 
anders". Du brauchst also vermutlich eine Art "Ausgabe-Subroutine", 
welche die Sache irgendwie passend für deine vorhandene Hardware 
aufbereitet

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
Noch kein Account? Hier anmelden.