7Segmentanzeige

Gast #2696732
Lesenswert?

Hallo zusammen,

wenn ich eine 7Segmentanzeige über einen kompletten Port eines µC 
anschliesse und maskiere, werden alle 8 Segmente, also inkl. Punkt mit 
maskiert. Nun, ich würde für meine Anwendung den Punkt nicht brauchen 
und den Ausgang anderweitig verwenden. Ich weiß, dass man ihn aus der 
Maskierung weglassen kann. Mein Problem ist aber, der Punkt ist am 4. 
Bit angeschlossen, also nicht am Ausgang 0 oder 7. Somit ist die 
Maskierung wohl etwas aufwendiger, oder ?
Gast #2696774
Lesenswert?

Hi,

hab ich ja so gemacht. Nur kann ich den entsprechenden Ausgang für den 
Punkt nicht mehr ein und ausschalten, weil er als Null maskiert wurde, 
da er ja nicht gebraucht wird. Es wurden ja alle 8bits maskiert.
Gast #2696812
Lesenswert?

Hi
Du  machst es dir scon schwer. In Assemblerwürd ich so vorgehen:
Ausgabe:   .Byte 1    ; Ausgabe
Anzeige:   .Byte 1    ; für 7 Segmentcode
Matrix_0:  .Byte 1    ; Ablage für Zahlenmuster
Matrix_1:  .Byte 1
etc

Ausgabebyte wird immer dem Port übergeben, also mußt du dafür sorgen, 
das dein SChaltausgang nix mit dem 7-Segmentcode zu tun bekommt.
Ausgang war Bit 4, also
1
;*** Schaltbit  aus   ****
2
LDS   R16, Ausgabe
3
ANDI  R16, 0b11101111      ; Schaltbit auf 0, 7-Segmentcode bleibt
4
STS   Ausgabe, R16
5

6

7
;*** Schaltbit  ein   ****
8
LDS   R16, Ausgabe
9
ORI   R16, 0b00010000      ; Schaltbit auf 1, 7-Segmentcode bleibt
10
STS   Ausgabe, R16
Angenommen, du hast in einer Matrix den 7-Segmentcode hinterlegt, dann 
musst du die Matrix ja auf das Ausgabebyte übertragen, ohne das 
Schaltbit zu verändern. Also machst du bei der Variablen Ausgabe alle 
Bits bis aufs Schaltbit aus
1
LDS   R16, Ausgabe
2
ANDI  R16, 0b00010000      ; 7-Segmentcode aus, Schaltbit bleibt
3
STS   Ausgabe, R16

Nun löscht du das Bit 4 in der Mattrix, falls da was drin stehen sollte
1
LDS   R17, Matrix_x
2
ANDI  R17, 0b11101111      ; pos. Schaltbit aus, Matrix bleibt
3
OR    R16, R17             ; Matrix und Schaltbit zusammenführen
4
STS   Ausgabe, R16
5

6
; irgendwann weist du dann den Port zu
7
LDS  R16, Ausgabe
8
OUT  Portx, R16
So hast du die Ausgabe an einer Stelle, unabhängig, wo du die Bits in 
die Variable bastelst.
Gruß oldmax
Gast #2696841
Lesenswert?

Dann mach's doch mit dem Array, mensch.
1
unsigned char get7[10] = {0b10110111, 0b....., ....};
dadrin sind dann deine Segmentmuster. Das vierte Bit kannst du immer auf 
0ß oder 1 setzen, ist ja wurscht. Und dann weiter wie Peter schon 
schrieb.

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