BCD-zu-7-Segment-Decoder: Von Zahlen zur Anzeige
Eine 4-Bit-BCD-Ziffer mithilfe einer Wahrheitstabelle, K-Karten-Minimierung und des klassischen 74LS47-Treiberchips auf die sieben Segmente einer Digitalanzeige abbilden.
Kurz gesagt: Ein BCD-zu-7-Segment-Decoder nimmt eine 4-Bit-Ziffer im Binary-Coded-Decimal-Format (0–9) und schaltet die passende Kombination der Segmente a–g auf einer Digitalanzeige ein. Die Zuordnung wird durch eine Wahrheitstabelle mit 10 Zeilen definiert; die Boolesche Gleichung jedes Segments wird aus der Tabelle hergeleitet und mit K-Karten minimiert, bevor sie in einem Chip wie dem 74LS47 (gemeinsamer Anodenanschluss) oder 74LS48 (gemeinsamer Kathodenanschluss) implementiert wird.
Die 7-Segment-Anzeige ist das bekannteste Ausgabegerät der digitalen Elektronik – Uhren, Mikrowellen, Taschenrechner, Anzeigetafeln und alte Zapfsäulen verwenden sie. Hinter jeder Ziffer auf dem Bildschirm steckt eine kleine kombinatorische Schaltung, die eine 4-Bit-Zahl in ein 7-Bit-Muster der einzuschaltenden LEDs umwandelt. Diese Schaltung ist der BCD-zu-7-Segment-Decoder und eine der klarsten praktischen Anwendungen von Boolescher Algebra und Karnaugh-Karten.
Dieser Artikel definiert BCD, erklärt die Konvention zur Benennung der Segmente, erstellt die Wahrheitstabelle, leitet die Booleschen Gleichungen für jedes Segment her, stellt die Verdrahtung mit gemeinsamem Anoden- und gemeinsamem Kathodenanschluss gegenüber und verweist auf die Chips 74LS47 / 74LS48, die all dies implementieren. Mit den am Ende genannten Simulatvorlagen können Sie selbst einen Decoder verdrahten.
Was ist BCD?
BCD – Binary-Coded Decimal, also binär codierte Dezimalzahl – ist eine Codierung, bei der jede Dezimalziffer von 0 bis 9 durch 4 Bits dargestellt wird. Anders als bei reiner Binärdarstellung verschwendet BCD die Codes 1010 bis 1111 (dezimal 10–15): Sie werden schlicht nicht verwendet.
| Dezimalziffer | BCD (4 Bits) | A B C D |
|---|---|---|
| 0 | 0000 | 0 0 0 0 |
| 1 | 0001 | 0 0 0 1 |
| 2 | 0010 | 0 0 1 0 |
| 3 | 0011 | 0 0 1 1 |
| 4 | 0100 | 0 1 0 0 |
| 5 | 0101 | 0 1 0 1 |
| 6 | 0110 | 0 1 1 0 |
| 7 | 0111 | 0 1 1 1 |
| 8 | 1000 | 1 0 0 0 |
| 9 | 1001 | 1 0 0 1 |
| 10–15 | 1010–1111 | nicht verwendet (Don’t-Cares) |
Die in diesem Artikel verwendete Konvention: A ist das höchstwertige Bit, D das niederwertigste. Manche Lehrbücher verwenden die umgekehrte Reihenfolge; die Gleichungen sind nach entsprechender Umbenennung identisch.
Warum BCD statt reiner Binärdarstellung? Dezimalziffern lassen sich direkt auf ziffernorientierte Anzeigen abbilden, und eine Dezimalzahl mit fester Skalierung kann gespeicherte Dezimalziffern ohne Umwandlungsfehler durch einen Binärbruch erhalten. Die Arithmetik ist nur dann exakt, wenn das mathematische Ergebnis in die gewählte Ziffernzahl und Skalierung passt; Division und andere nicht endende Ergebnisse benötigen weiterhin eine Rundungsregel.
Für den Speichervergleich braucht man einen Nenner. BCD verwendet 4 Bits pro Dezimalziffer, während der Informationsgehalt von zehn Symbolen Bits beträgt. Etwa 16,9 % des theoretischen Code-Raums jedes BCD-Nibbles bleiben ungenutzt; anders ausgedrückt sind 4 Bits etwa 20,4 % mehr als . Für einen bestimmten begrenzten Ganzzahlenbereich sollten Sie die tatsächlichen Breiten von Binär- und BCD-Darstellung vergleichen, statt blind einen Prozentsatz anzuwenden.
Die sechs ungenutzten Codes – 1010 bis 1111 – können bei der Minimierung der Segmentgleichungen zu Don’t-Care-Einträgen werden, aber nur, wenn das System garantiert, dass ihre Anzeigeausgänge irrelevant sind. Wenn ein ungültiger Code während Reset, eines Busübergangs oder eines Fehlers auftreten kann, weisen Sie stattdessen ein bewusst gewähltes Leer- oder Fehlermuster zu. Ein Don’t-Care ist eine Entwurfserlaubnis und keine Behauptung, dass Hardware den Eingang niemals anlegen kann.
Die sieben Segmente
Eine standardmäßige 7-Segment-Anzeige besitzt sieben LEDs, die wie eine 8 angeordnet und konventionell mit a bis g bezeichnet sind:
┌─── a ───┐
│ │
f b
│ │
├─── g ───┤
│ │
e c
│ │
└─── d ───┘
aist der obere horizontale Balken.bist der vertikale Balken oben rechts.cist der vertikale Balken unten rechts.dist der untere horizontale Balken.eist der vertikale Balken unten links.fist der vertikale Balken oben links.gist der mittlere horizontale Balken.
Eine Dezimalziffer schaltet eine bestimmte Teilmenge ein:
| Ziffer | Eingeschaltete Segmente |
|---|---|
| 0 | a, b, c, d, e, f |
| 1 | b, c |
| 2 | a, b, d, e, g |
| 3 | a, b, c, d, g |
| 4 | b, c, f, g |
| 5 | a, c, d, f, g |
| 6 | a, c, d, e, f, g |
| 7 | a, b, c |
| 8 | a, b, c, d, e, f, g |
| 9 | a, b, c, d, f, g |
DigiSims SEVEN_SEGMENT_DISPLAY-Komponente nimmt sieben Eingänge genau in dieser Reihenfolge. Die DIGIT_DISPLAY-Komponente ist eine höher abstrahierte Variante: Sie nimmt direkt den 4-Bit-BCD-Eingang und übernimmt die Decodierung intern.
Die vollständige Wahrheitstabelle
Wenn man die BCD-Codierung mit der Segmentzuordnung verbindet, erhält man eine Tabelle mit 16 Zeilen (10 gültige und 6 Don’t-Care-Zeilen) und 7 Segmentspalten:
| ABCD | Ziffer | a | b | c | d | e | f | g |
|---|---|---|---|---|---|---|---|---|
| 0000 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
| 0001 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
| 0010 | 2 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
| 0011 | 3 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
| 0100 | 4 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
| 0101 | 5 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
| 0110 | 6 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
| 0111 | 7 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 1000 | 8 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 1001 | 9 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
| 1010 | – | × | × | × | × | × | × | × |
| 1011 | – | × | × | × | × | × | × | × |
| 1100 | – | × | × | × | × | × | × | × |
| 1101 | – | × | × | × | × | × | × | × |
| 1110 | – | × | × | × | × | × | × | × |
| 1111 | – | × | × | × | × | × | × | × |
Die Tabelle setzt aktive High-Segmentbefehle voraus – eine 1 bedeutet „dieses Segment einschalten“. Ein Treiber mit gemeinsamem Kathodenanschluss kann diese Polarität häufig verwenden, während ein Treiber mit gemeinsamem Anodenanschluss meist active-low-Ausgänge verwendet. Auch die physischen Treiberstufen unterscheiden sich bei Stromrichtung, Spannungsabfall und Ausgangsstruktur; der Unterschied ist nicht bloß ein Inverter im Schaltplan.
Die Segmentgleichungen herleiten
Jede Segmentspalte oben ist eine Boolesche Funktion von vier Eingängen. Mit 6 Don’t-Care-Zeilen liefert die K-Karten-Minimierung deutlich kürzere Ausdrücke als eine naive Summe von Produkten. Die Technik ist die Sum-of-Products-Methode mit K-Karten-Reduktion.
Segment a
Segment a ist für die Ziffern 0, 2, 3, 5, 6, 7, 8 und 9 an – und für 1 und 4 aus. Wenn die Don’t-Cares optimal behandelt werden, ergibt die K-Karten-Minimierung:
(Hier bedeutet NICHT B; manche Bücher schreiben .) Der Term – B und D sind beide null – deckt die Fälle 0 und 2 effizient ab; – beide sind eins – deckt 3, 5, 7 und 9 ab; allein deckt 8 und 9 (sowie die Don’t-Cares 10–15) ab; allein deckt 2, 3, 6 und 7 ab.
Dieser Ausdruck verwendet ein UND-Gatter pro Produktterm und eine ODER-Reduktion. Die genaue Zahl der Zellen oder Transistoren hängt von der Logikfamilie, der Verfügbarkeit komplementierter Signale und der Syntheseabbildung ab.
Segment b
Segment b ist für 0, 1, 2, 3, 4, 7, 8 und 9 an – für 5 und 6 aus. Die K-Karte ergibt:
Segment c
Segment c ist für 0, 1, 3, 4, 5, 6, 7, 8 und 9 an – nur für 2 aus. Die K-Karte ergibt:
Dies ist das einfachste aller Segmente – nur drei Terme, weil es nur eine Zeile mit Ausgang 0 gibt und die Don’t-Cares den Rest der Karte auffüllen.
Segment d
Segment d ist für 0, 2, 3, 5, 6, 8 und 9 an – für 1, 4 und 7 aus. Die K-Karte ergibt:
Segment e
Segment e ist für 0, 2, 6 und 8 an – für 1, 3, 4, 5, 7 und 9 aus. Die K-Karte ergibt:
Beide Terme teilen sich – äquivalent zu . Gerade Ziffern benötigen unter dieser Eingangskonvention e, reichen dafür aber nicht aus: Ziffer 4 hat , während e aus bleibt. Die faktorisierte Form kann ein ODER mit nachfolgendem UND verwenden, zusätzlich zu den erforderlichen Invertern.
Segment f
Segment f ist für 0, 4, 5, 6, 8 und 9 an – für 1, 2, 3 und 7 aus. Die K-Karte ergibt:
Segment g
Segment g – der mittlere Balken – ist für 2, 3, 4, 5, 6, 8 und 9 an – für 0, 1 und 7 aus. Die K-Karte ergibt:
Diese Ausdrücke sind eine gültige Minimierung unter den genannten Annahmen für aktive High-Signale und Don’t-Cares. Äquivalente Minimalformen können anders aussehen, und das interne Netzwerk eines kommerziellen Decoders muss nicht dieser lehrbuchhaften Summe von Produkten entsprechen.
Gemeinsamer Anodenanschluss vs. gemeinsamer Kathodenanschluss
Die 7-Segment-Anzeige selbst gibt es mit zwei physischen Verdrahtungen. Sie unterscheiden sich darin, welche Seite jeder LED mit einem einzelnen gemeinsamen Pin verbunden ist.
Gemeinsamer Kathodenanschluss
Alle sieben LED-Kathoden (negative Anschlüsse) sind mit einem einzigen gemeinsamen Pin verbunden, der an Masse liegt. Jede Anode wird separat angesteuert. Um ein Segment einzuschalten, treiben Sie seine Anode auf High.
- Treiberausgang: active-high –
1schaltet das Segment ein. - Interpretation der Wahrheitstabelle: entspricht direkt der obigen Tabelle.
- Passender Chip: 74LS48 – Ausgänge sind active-high.
Gemeinsamer Anodenanschluss
Alle sieben LED-Anoden sind mit einem einzigen gemeinsamen Pin verbunden, der an V_CC liegt. Jede Kathode wird separat angesteuert. Um ein Segment einzuschalten, ziehen Sie seine Kathode auf Low.
- Treiberausgang: active-low –
0schaltet das Segment ein. - Interpretation der Wahrheitstabelle: jede Ausgangsspalte invertieren.
- Passender Chip: 74LS47 – Ausgänge sind active-low (Open-Collector).
Auf Boolescher Ebene lässt sich die Polaritätsänderung als Invertierung jedes Ausgangs darstellen. Wählen Sie bei physischer Hardware einen Treiber, der den erforderlichen Strom liefern oder aufnehmen kann, und setzen Sie in jeden leuchtenden Segmentpfad ein strombegrenzendes Element. Verbinden Sie niemals ein LED-Segment mit einer unbeschränkten Spannungsquelle.
Der 74LS47 und der 74LS48
Der 74LS47 und der 74LS48 sind TTL-BCD-zu-7-Segment-Decoder-/Treiberfunktionen. Sie sind nützliche Referenzen, doch wählen und verdrahten Sie ein genau bestellbares Bauteil anhand seines Datenblatts, statt die Namen als reine Abstraktionen mit gleicher Polarität zu behandeln.
| Chip | Ausgangspolarität | Anzeigetyp |
|---|---|---|
| 74LS47 | Active-low (Open-Collector) | Gemeinsamer Anodenanschluss |
| 74LS48 | Active-high (mit internen Pull-ups) | Gemeinsamer Kathodenanschluss |
Die klassische Bauteilnotation bezeichnet A normalerweise als niederwertigsten BCD-Eingang und D als höchstwertigsten. Dieser Artikel verwendet in seinen Gleichungen A als MSB und D als LSB. Benennen Sie die Variablen um, bevor Sie eine Gleichung in ein Design auf Pin-Ebene für 74LS47/48 übernehmen.
Beide Chips besitzen außerdem drei nützliche Hilfseingänge:
- LT (Lamp Test): Auf Low gezogen werden alle sieben Ausgänge unabhängig vom BCD-Eingang eingeschaltet. Damit lässt sich prüfen, ob jede LED funktioniert.
- RBI (Ripple Blanking Input): Zusammen mit dem BCD-Eingang
0000auf Low gezogen, wird die Anzeige ausgeblendet, statt 0 anzuzeigen. So lassen sich führende Nullen in mehrstelligen Anzeigen unterdrücken – aus00073wird73. - BI/RBO (Blanking Input / Ripple Blanking Output): Ein Pin mit zwei Funktionen, der zum Überschreiben der Ausblendung und für Ripple-Blanking-Ketten verwendet wird. Sein Verhalten hängt von den anderen Steuereingängen ab; folgen Sie der Funktionstabelle des Bauteils, statt ihn als gewöhnlichen bidirektionalen Logikpin zu behandeln.
Zusammen ermöglichen diese drei Pins die Kaskadierung mehrerer Decoder-/Anzeigenpaare zu einer mehrstelligen numerischen Anzeige, bei der führende Nullen automatisch verschwinden.
Das Verhalten bei ungültigen BCD-Eingängen (1010–1111) ist durch den Chip festgelegt und erzeugt eigenartige Nichtziffern-Segmentmuster – nützlich als Debuggingsignal, aber nicht portabel.
Anwendungen in der Praxis
BCD-zu-7-Segment-Decodierung ist in Geräten mit numerischen Anzeigen verbreitet:
- Digitale Uhren – Zähler oder gespeicherte Zeitziffern speisen die kombinatorische Segmenterzeugung, oft über einen Multiplex-Treiber. Sekunden und Minuten benötigen Modulo-60-Verhalten, das gewöhnlich in Einer- und Zehnerziffern zerlegt wird.
- Taschenrechner und Messgeräte – Mehrere Ziffern können sich die Segmentansteuerung durch Multiplexing teilen. Der Controller wählt jeweils eine Ziffer und ihr Segmentmuster aus. Aktualisierungsrate, Spitzenstrom, Tastgrad, Helligkeit und Geisterbilder müssen gemeinsam entworfen werden.
- Mehrstellige Voltmeter und Frequenzzähler – Ein Zähler speist ein BCD-codiertes Register, das Register speist den Decoder, und der Decoder schaltet die Segmente ein.
- Anzeigetafeln und Kilometerzähler – Dasselbe Multiplexing-Verfahren, oft mit helleren LED-Arrays.
In DigiSim bauen
Öffnen Sie die DECODER-Komponente, um den Decoderbaustein für allgemeine Zwecke zu sehen. Für den speziellen Fall BCD zu 7-Segment verwenden Sie eine DIGIT_DISPLAY, bei der die Umwandlung integriert ist, oder bauen Sie den Decoder von Hand und führen Sie die sieben Ausgänge einer SEVEN_SEGMENT_DISPLAY zu.
Verdrahten Sie vier Eingangsschalter als A, B, C und D (vom höchstwertigen zum niederwertigsten Bit). Implementieren Sie zuerst Segment a anhand der obigen Gleichung:
- Zwei UND-Gatter: eines für , eines für .
- Ein 4-Eingangs-ODER, das , und die beiden UND-Ausgänge zusammenführt.
Schalten Sie die Eingänge durch die BCD-Codes 0–9 und prüfen Sie, dass Segment a in den richtigen Fällen leuchtet. Fügen Sie anschließend die Segmente b bis g nach den obigen Gleichungen hinzu.
Testen Sie zuletzt die Codes 10–15. Wenn diese als Don’t-Cares verwendet wurden, dokumentieren Sie die tatsächlichen Muster und bestätigen Sie, dass die vorgelagerte Logik sie verhindert, wann immer die Anzeige sichtbar ist. Für ein fehleranzeigendes Design ersetzen Sie die Don’t-Cares durch ein definiertes Leer- oder Fehlersymbol und minimieren Sie erneut.
Der nächste Artikel der Reihe zur kombinatorischen Logik – BCD: Grundlagen der binär codierten Dezimalzahl – behandelt BCD-Addition, die Add-6-Korrektur nach einer ungültigen Ziffer oder einem Dezimalübertrag sowie gepackte gegenüber ungepackter BCD-Speicherung. Lesen Sie ihn zusammen mit Decoder und Encoder zur Ansteuerung einer 7-Segment-Anzeige, um nachzuvollziehen, wie einige Binäreingänge eines von vielen Anzeigemustern auswählen.



