www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2x7 Segment Anzeige mit Schaltern


Autor: Andre P. (stax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich stehe gerade vor dem Problem, dass ich nicht weiß, wie ich die 
darzustellende Zahl einer 7-Segment Anzeige mit Schaltern beeinflussen 
kann.

Situation:
zwei 7 Segment Anzeige
4 Schalter
Mikrocontroller 80535

Jeder Schalter hat einen Wert. Der erste 1, der zweite 2, der dritte 4 
und der vierte 8.
sodass maximal die Ziffer 15 mit den Schaltern bestimmt werden kann.

Nur ich weiß nicht wie ich anhand der Schalterstellung eine Zahl auf 
eines der Anzeigen bringen kann. Erstmal ist nur wichtig das die erste 
der beiden Anzeigen geht.
In C würde ich das so schreiben:
if(Schalter1 == 1 && Schalter2 == 0 && Schalter3 == 0 && Schalter4 == 0) 
{
    ersteAnzeige = 00110000; // für die eins Binär
} else if(Schalter....

usw.
Hoffe es ist klar geworden.

Irgendwie muss ich warscheinlich für jede Zahl eine Bitkette 
irgendwo(wo?) irgendwie(wie?) speichern und dann anhand einer IF 
ähnlichen Abfrage in die Anzeige schieben?!

Ich habe schon den Befehl cmp ausprobiert, nur funktioniert der wohl 
nicht bei diesem uC.

Gibt es noch eine andere Möglichkeiten. Mit addieren und subtrahieren 
und so?

Wäre echt dankbar über Hilfe...
Auch wenn es nur ein Lösungsansatz ist

PS: Bin Anfänger in Sachen Assembler und es muss in Assembler sein. Kein 
C

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaltplan?

Folgendes musst du dir bedenken: Was muss ich wo ausgeben, um welche 
Zahl darzustellen?

Autor: Andre P. (stax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einen Schaltplan hab ich nicht. Welche Eingänge ich auf 1 bzw auf 0 
stellen muss weiß ich.
0 = 00111111
1 = 00110000
2 = 01011011
3 = 01111001
4 = 01110100
5 = 01101101
6 = 01101111
7 = 00111000
8 = 01111111
9 = 01111101

Hoffe das hat weitergeholfen.
Die 2. Anzeige wird angeschaltet wenn das höchste Bit auf 1 ist.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok. Das hilft

Und wie sind die Taster angeschlossen?

Autor: Andre P. (stax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Taster kann ich mit P5.0 - P5.3 ansteuern.
Wenn das bit von p5.0 gesetzt ist ist der Schalter betätigt

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Die Taster kann ich mit P5.0 - P5.3 ansteuern.

Wie genau?

P5.0  => Schalter für 1
P5.1  => Schalter für 2
P5.2  => Schalter für 4
P5.3  => Schalter für 8

So wäre es ideal... ?

Autor: Andre P. (stax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na das ist doch ideal.

Folgende Denkansätze:
>0 = 00111111
>...
>9 = 01111101

könnte man in einem Array abspeichern:
uint8_t   au8SegData[] = { 0b00111111, 0b00110000, 0b01011011, 0b01111001,
                           0b01110100, 0b01101101, 0b01101111, 0b00111000,
                           0b01111111, 0b01111101           };

Weiterhin folgende Überlegung:
>P5.0  => Schalter für 1
>P5.1  => Schalter für 2
>P5.2  => Schalter für 4
>P5.3  => Schalter für 8

Wenn du dir diese vier Bits des Ports als binäre Zahl vorstellst, und zB 
mit den Schaltern eine 5 einstellst, wie sieht dann das Bitmuster, resp. 
die (4bit gropße) Zahl aus??

Autor: Andre P. (stax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß nicht ob du das meinst, aber wenn ich eine 5 mit den Schaltern 
darstelle, dann steht in P5
00000101

Wenn ich so ein Array habe, wie greife ich dann darauf zu und schieben 
dann den Inhalt in meinen anderen Port?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>00000101

Ja das ist korrekt. und jetzt wandel das mal in eine Dezimalzahl um!


>Wenn ich so ein Array habe, wie greife ich dann darauf zu und schieben
>dann den Inhalt in meinen anderen Port?
PORT_X = au8SegData[variable];

Der Platzhalter variable steht für eine Ziffer zwische 0..9, weil das 
Array oben 10 Elemente hat.

Autor: Andre P. (stax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dezimal ist das dann 5...


ist das nicht C Code was da steht?
Sowas wie = oder ; (außer für Kommentare) gibt es doch nicht in 
Assembler oder?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Dezimal ist das dann 5...

Geht dir ein Licht auf?

>ist das nicht C Code was da steht?
Ja. Das ist C.

Autor: Andre P. (stax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
öhm ne^^

ich brauche Assembler Code. Mit C Code kann ich nichts anfangen

Edit:
Oder meinst du das ich den inhalt von dem Port als Index für das Array 
verwenden kann?
Jedoch ist dies ja nur in C so.

Assembler ist aber gefordert

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>öhm ne^^


>aber wenn ich eine 5 mit den Schaltern
>darstelle, dann steht in P5 eine 00000101

>Dezimal ist das dann 5...

Ok. Jetzt mach das mal für alle anderen Schalterstellungen!
Schalterstellung => Bitmuster => Dezimal



>Mit C Code kann ich nichts anfangen

Warum hast du dann mit C angefangen?
>>if(Schalter1 == 1 && Schalter2 == 0 && Schalter3 == 0 && Schalter4 == 0)

EDIT:
>Oder meinst du das ich den inhalt von dem Port als Index für das Array
>verwenden kann?

So ist das gemeint.
>ich brauche Assembler Code
Dann halt in asm.

Autor: Andre P. (stax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Beispiel
Anders wusste ich nicht wie ich es einfach darstellen kann.
P5.0               = 1 = 00000001
P5.1               = 2 = 00000010
P5.1 + P5.0        = 3 = 00000011
P5.2               = 4 = 00000100
P5.2 + P5.0        = 5 = 00000101
P5.2 + P5.1        = 6 = 00000110
P5.2 + P5.1 + P5.0 = 7 = 00000111
P5.3               = 8 = 00001000
P5.3 + P5.0        = 9 = 00001001

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fällt dir was auf? bzgl. der Schalterstellung und der Dezimalzahl?

Autor: Andre P. (stax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das jeder mit jedem irgendwann mal in Verbindung steht. Oder was meinst 
du?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein. Das die Zahl, die du mit den Schaltern einstellst, auch als 
Dezimalzahl, also im Eingangsregister steht.

Autor: Andre P. (stax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was meinst du mit Eingangsregister?

Hast du vielleicht ein Beispiel in Assembler?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welcher Prozessor?

Na über irgendein Register muss man doch die Eingänge einlesen können.
Genauso wie du Port5 als Ausgang nutzen möchtest, gibt es ein Register 
(wahrscheinlich heißt das sogar Port5) was du beschreibst, um die 
Ausgänge auch wirklich zu setzen.

Autor: Andre P. (stax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ein 80535

wenn ich einen schalter setzen möchte verwende ich
setb P5.0
oder mov p5,#00000001B

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>80535
Iiiiiiiih...


>wenn ich einen schalter setzen möchte verwende ich
>setb P5.0
>oder mov p5,#00000001B

Du meinst, wenn du einen Ausgang schalten willst.

Und wie werden Eingänge abgefragt?

Autor: Andre P. (stax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß nicht ob du das meinst aber
auf dieses Bild bezogen 
http://upload.wikimedia.org/wikipedia/commons/1/18...
ist
P4.0 = d
P4.1 = e
P4.2 = f
P4.3 = a
P4.4 = b
P4.5 = c
P4.6 = g

und als Bitmuster ist P4 dann #0gcbafedB

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.