7Segmentanzeige

Gast #2696732
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
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.
#2696801
segm schrieb:
> 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,

Dann hast Du ihn nicht maskiert, sondern auf 0 gesetzt.
Maskieren heißt, er bleibt auf seinem alten Zustand.
1
PORTD = PORTD & 1<<PD4 | new_ziffer & ~(1<<PD4);


Peter
Gast #2696812
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.