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


von Andre P. (stax)


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

von Matthias L. (Gast)


Lesenswert?

Schaltplan?

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

von Andre P. (stax)


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.

von Matthias L. (Gast)


Lesenswert?

ok. Das hilft

Und wie sind die Taster angeschlossen?

von Andre P. (stax)


Lesenswert?

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

von Matthias L. (Gast)


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... ?

von Andre P. (stax)


Lesenswert?

genau

von Matthias L. (Gast)


Lesenswert?

Na das ist doch ideal.

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

könnte man in einem Array abspeichern:
1
uint8_t   au8SegData[] = { 0b00111111, 0b00110000, 0b01011011, 0b01111001,
2
                           0b01110100, 0b01101101, 0b01101111, 0b00111000,
3
                           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??

von Andre P. (stax)


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?

von Matthias L. (Gast)


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?
1
PORT_X = au8SegData[variable];

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

von Andre P. (stax)


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?

von Matthias L. (Gast)


Lesenswert?

>Dezimal ist das dann 5...

Geht dir ein Licht auf?

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

von Andre P. (stax)


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

von Matthias L. (Gast)


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.

von Andre P. (stax)


Lesenswert?

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

von Matthias L. (Gast)


Lesenswert?

Fällt dir was auf? bzgl. der Schalterstellung und der Dezimalzahl?

von Andre P. (stax)


Lesenswert?

Das jeder mit jedem irgendwann mal in Verbindung steht. Oder was meinst 
du?

von Matthias L. (Gast)


Lesenswert?

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

von Andre P. (stax)


Lesenswert?

Was meinst du mit Eingangsregister?

Hast du vielleicht ein Beispiel in Assembler?

von Matthias L. (Gast)


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.

von Andre P. (stax)


Lesenswert?

ein 80535

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

von Matthias L. (Gast)


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?

von Andre P. (stax)


Lesenswert?

Ich weiß nicht ob du das meinst aber
auf dieses Bild bezogen 
http://upload.wikimedia.org/wikipedia/commons/1/18/7Segment_24.svg
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

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.