2x7 Segment Anzeige mit Schaltern

#1046388
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
#1046447
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.
Gast #1046474
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??
Gast #1046490
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.
Gast #1046513
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.
#1046526
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
Gast #1046569
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.
Gast #1046585
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren