7-Segment-Anzeige verwenden: Zahlen anzeigen mit Arduino, gemeinsame Anode oder Kathode
Wie funktioniert eine 7-Segment-Anzeige? Segmentbuchstaben (a–g, dp), gemeinsame Kathode und Anode, Pinbelegung und Widerstände, Code zum Zählen von 0–9, 4-stellige Anzeigen und Multiplexing, TM1637, ESP32 und Pico.
Eine 7-Segment-Anzeige ist eine einfache Anzeige aus sieben balkenförmigen LEDs, die wie die Ziffer "8" angeordnet sind, plus einem kleinen Punkt. Digitaluhren, Mikrowellen-Timer, Anzeigetafeln und Zapfsäulen nutzen sie. Sie ist günstig, sehr hell und auch aus der Entfernung gut lesbar. In Arduino-Projekten ist sie eine der klassischen Ausgaben für Zähler, Würfel, Stoppuhren und Uhren.

Wie funktioniert eine 7-Segment-Anzeige?
Die Segmente werden mit Buchstaben bezeichnet: Oben beginnt a, dann folgen im Uhrzeigersinn b (oben rechts), c (unten rechts), d (unten), e (unten links) und f (oben links); der mittlere Balken ist g, der Punkt dp. Jedes Segment ist eigentlich eine eigene LED, und je nachdem, welche leuchten, entstehen verschiedene Ziffern. Für die "1" leuchten zum Beispiel nur b und c, für die "8" alle sieben.
| Ziffer | Leuchtende 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 |
Gemeinsame Kathode oder gemeinsame Anode?
Wie bei einer RGB-LED ist ein Ende aller Segmente an einem gemeinsamen Pin verbunden. Bei einer Anzeige mit gemeinsamer Kathode kommt der gemeinsame Pin an GND, und ein Segment leuchtet bei HIGH. Bei gemeinsamer Anode kommt der gemeinsame Pin an 5V, und ein Segment leuchtet bei LOW. Von außen sehen beide gleich aus; welche du hast, findest du heraus, indem du den gemeinsamen Pin mit GND verbindest und einen Segmentpin über 220 Ω an 5V hältst. Leuchtet das Segment, ist es eine gemeinsame Kathode; wenn nicht, dreh die Verbindung um und versuch es erneut.
| Merkmal | Gemeinsame Kathode (CC) | Gemeinsame Anode (CA) |
|---|---|---|
| Gemeinsamer Pin (3 und 8) | GND | 5V |
| Um ein Segment einzuschalten | HIGH | LOW |
| Im Code | digitalWrite(pin, an) | digitalWrite(pin, !an) |
Pinbelegung und Anschluss am Arduino
Bei gängigen einstelligen Anzeigen mit 10 Pins werden die Pins – mit der Vorderseite zu dir – unten links beginnend gegen den Uhrzeigersinn nummeriert. Die beiden mittleren Pins (3 und 8) sind der gemeinsame Anschluss und intern verbunden. Die Tabelle zeigt die Pins der Anzeige und die Arduino-Pins, die der Code in diesem Beitrag verwendet:
| Anzeige-Pin | Segment | Arduino-Pin |
|---|---|---|
| 7 | a | D2 |
| 6 | b | D3 |
| 4 | c | D4 |
| 2 | d | D5 |
| 1 | e | D6 |
| 9 | f | D7 |
| 10 | g | D8 |
| 5 | dp | D9 |
| 3 und 8 | Gemeinsam | GND (gemeinsame Kathode) oder 5V (gemeinsame Anode) |
Mit dem Arduino von 0 bis 9 zählen
Speicherst du als Bits in einem Array, welche Segmente jede Ziffer einschaltet, bleibt der Code kurz. Im Beispiel unten ist das linke Bit jedes Bytes Segment a, das rechte Segment g. Die Funktion showDigit() liest die Bits einzeln und schreibt sie auf die Pins; bei einer Anzeige mit gemeinsamer Anode setzt du einfach COMMON_ANODE auf true.
1const int SEG_PINS[7] = {2, 3, 4, 5, 6, 7, 8}; // a, b, c, d, e, f, g
2const bool COMMON_ANODE = false; // ortak anotsa true / true for common anode
3
4// her rakam için a–g segmentleri (1 = yanar) / a–g segments per digit (1 = on)
5const byte DIGITS[10] = {
6 0b1111110, // 0
7 0b0110000, // 1
8 0b1101101, // 2
9 0b1111001, // 3
10 0b0110011, // 4
11 0b1011011, // 5
12 0b1011111, // 6
13 0b1110000, // 7
14 0b1111111, // 8
15 0b1111011 // 9
16};
17
18void showDigit(int n) {
19 for (int i = 0; i < 7; i++) {
20 bool on = DIGITS[n] & (1 << (6 - i)); // a en soldaki bit / a is the leftmost bit
21 digitalWrite(SEG_PINS[i], COMMON_ANODE ? !on : on);
22 }
23}
24
25void setup() {
26 for (int i = 0; i < 7; i++) pinMode(SEG_PINS[i], OUTPUT);
27}
28
29void loop() {
30 for (int n = 0; n <= 9; n++) {
31 showDigit(n);
32 delay(1000);
33 }
34}4-stellige Anzeige und Multiplexing

Eine vierstellige Anzeige hat nicht 32 einzelne Segmentpins, sondern nur 12 Pins: 8 Segmentleitungen (a–g und dp), die alle Stellen gemeinsam nutzen, und 4 Pins, die auswählen, welche Stelle leuchtet. Weil die Segmentleitungen geteilt sind, kannst du nicht gleichzeitig verschiedene Ziffern auf verschiedenen Stellen anzeigen. Die Lösung heißt Multiplexing: Du lässt einige Millisekunden nur die 1. Stelle leuchten, dann die 2., die 3. und die 4. Wiederholt sich dieser Zyklus öfter als 50-mal pro Sekunde, sieht das Auge alle vier Stellen gleichzeitig. Statt das Scannen selbst zu schreiben, ist die Bibliothek SevSeg viel bequemer:
1#include "SevSeg.h"
2
3SevSeg sevseg;
4
5void setup() {
6 byte digitPins[] = {2, 3, 4, 5}; // hane seçme pinleri / digit select pins
7 byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; // a, b, c, d, e, f, g, dp
8 sevseg.begin(COMMON_CATHODE, 4, digitPins, segmentPins, true); // dirençler segmentlerde / resistors on segments
9 sevseg.setBrightness(90);
10}
11
12void loop() {
13 sevseg.setNumber(millis() / 1000); // geçen saniye / elapsed seconds
14 sevseg.refreshDisplay(); // sürekli çağrılmalı / must be called continuously
15}Das TM1637-Modul: 4 Stellen über nur 2 Leitungen

Wenn dir 12 Kabel und ständiges Scannen zu mühsam sind, ist das TM1637-Modul genau richtig. Sein Treiberchip übernimmt das Multiplexing selbst; der Arduino teilt ihm über die Pins CLK und DIO nur mit, welche Zahl er zeigen soll. Die meisten Versionen haben in der Mitte zusätzlich einen Doppelpunkt (:) für Uhren. Installiere im Bibliotheksverwalter die Bibliothek TM1637 von Avishay Orpaz; der folgende Code zeigt Minuten und Sekunden mit Doppelpunkt:
1#include <TM1637Display.h>
2
3TM1637Display display(2, 3); // CLK, DIO
4
5void setup() {
6 display.setBrightness(5); // 0–7
7}
8
9void loop() {
10 int minutes = (millis() / 60000) % 60;
11 int seconds = (millis() / 1000) % 60;
12 // ortadaki iki noktayla dakika:saniye / minutes:seconds with the colon
13 display.showNumberDecEx(minutes * 100 + seconds, 0b01000000, true);
14 delay(200);
15}7-Segment-Anzeige mit ESP32 und Raspberry Pi Pico
Eine einstellige Anzeige kannst du direkt an ESP32 oder Pico anschließen; da die Pins 3,3 V liefern, leuchten die Segmente etwas schwächer, nimm also kleinere Widerstände wie 100–150 Ω. Das TM1637-Modul läuft auch mit 3,3 V und wird am ESP32 mit derselben Arduino-Bibliothek genutzt. Für MicroPython auf dem Pico kopierst du einfach die Datei tm1637.py (die Bibliothek von mcauser) auf den Pico:
1import tm1637
2from machine import Pin
3import time
4
5tm = tm1637.TM1637(clk=Pin(16), dio=Pin(17)) # tm1637.py Pico'da olmalı / tm1637.py must be on the Pico
6tm.brightness(4) # 0–7
7
8count = 0
9while True:
10 tm.number(count) # -999 … 9999
11 count += 1
12 time.sleep(1)7-Segment, LCD oder OLED?
| Merkmal | 7-Segment | 16x2-LCD | OLED |
|---|---|---|---|
| Was es zeigen kann | Ziffern und einige Buchstaben | Buchstaben, Ziffern, eigene Zeichen | Text, Grafik, Symbole |
| Lesbarkeit | Sehr hell, aus der Ferne lesbar | Gut mit Hintergrundbeleuchtung | Kontrastreich, aber klein |
| Benötigte Pins | 8 und mehr (mit TM1637: 2) | 2 (I2C) | 2 (I2C) |
| Geeignet für | Uhren, Zähler, Anzeigetafeln | Menüs, Messwerttext | Grafiken, Icons, kleine Geräte |
Musst du nur Zahlen zeigen und kommt es auf Lesbarkeit aus der Ferne an, ist die 7-Segment-Anzeige unschlagbar. Brauchst du Text, Einheiten und Menüs, lies I2C-LCD-Display verwenden.
Projektideen mit der 7-Segment-Anzeige
- Elektronischer Würfel: auf Tastendruck eine Zufallszahl von 1 bis 6 zeigen.
- Tasterzähler: ein Zähler, der mit einem Taster hochzählt und mit einem anderen zurücksetzt.
- Digitaluhr: eine Uhr mit TM1637 und RTC-Modul, die auch bei Stromausfall die Zeit behält.
- Countdown: ein einstellbarer Timer für Brettspiele oder Experimente.
- Temperaturanzeige: die mit einem DHT11 gemessene Temperatur in großen Ziffern anzeigen.
- Reaktionstest: in Millisekunden zeigen, wie schnell du nach dem Aufleuchten einer LED den Taster drückst.
Typische Fehler und ihre Lösungen
- Kein Segment leuchtet: Der gemeinsame Pin hängt am falschen Potenzial; vielleicht hast du eine Anzeige mit gemeinsamer Anode an GND angeschlossen.
- Ziffern sehen wirr aus: Die Zuordnung von Segmenten zu Arduino-Pins stimmt nicht; prüfe jedes Segment einzeln.
- Manche Ziffern sind dunkel: Ein einzelner Widerstand sitzt am gemeinsamen Pin; nimm für jedes Segment einen eigenen.
- Bei 4 Stellen leuchtet nur eine oder alles flackert: In loop() steht ein delay() oder es wird nicht oft genug gescannt.
- Die Segmente, die leuchten sollen, sind aus, die anderen an: Gemeinsame Anode und Kathode sind verwechselt; ändere COMMON_ANODE.
- Die Pins reichen nicht: Mit TM1637-Modul, MAX7219-Treiber oder 74HC595-Schieberegister die Pinzahl verringern.
Zu wissen, dass jedes Segment eigentlich eine LED ist, ist der Schlüssel zum Verständnis der 7-Segment-Anzeige; die Grundlagen findest du in Was ist eine LED? In der BlueGrays-App findest du Projekte zum Zählen von 0 bis 9, Tasterzähler, Würfel, 4-stellige Digitaluhr und Bomben-Animation Schritt für Schritt mit Schaltplänen und Code.
Häufige Fragen
Welchen Widerstand braucht eine 7-Segment-Anzeige?
Bei 5 V passen 220–330 Ω pro Segment; 220 Ω leuchtet heller, 330 Ω braucht weniger Strom. An 3,3-V-Boards wie ESP32 und Pico kannst du 100–150 Ω nehmen. Setze die Widerstände einzeln in jede Segmentleitung, nicht an den gemeinsamen Pin.
Woran erkenne ich, ob meine 7-Segment-Anzeige gemeinsame Anode oder Kathode hat?
Verbinde den gemeinsamen Pin (3 oder 8) mit GND und halte einen Segmentpin über 220 Ω an 5V; leuchtet das Segment, ist es eine gemeinsame Kathode. Wenn nicht, gemeinsamen Pin an 5V und den Segmentpin über den Widerstand an GND; leuchtet es jetzt, ist es eine gemeinsame Anode. Meist steht auch CC oder CA in der Typenbezeichnung.
Wie viele Pins hat eine 7-Segment-Anzeige?
Einstellige Anzeigen haben 10 Pins: 7 Segmente, 1 Punkt und 2 gemeinsame Pins. Vierstellige Anzeigen haben 12 Pins: 8 gemeinsame Segmentleitungen und 4 Stellenauswahlpins. Module wie der TM1637 werden mit nur 4 Pins (CLK, DIO, VCC, GND) angeschlossen.
Warum leuchtet bei meiner 4-stelligen Anzeige nur eine Stelle?
Vierstellige Anzeigen arbeiten mit Multiplexing, die Stellen müssen also ständig nacheinander gescannt werden. Steht ein delay() in loop(), stoppt das Scannen und nur die letzte Stelle bleibt an. Nutze eine Bibliothek wie SevSeg, ruf refreshDisplay() ständig auf und steuere die Zeit mit millis().
Kann eine 7-Segment-Anzeige Buchstaben darstellen?
Einige ja: A, b, C, d, E, F, H, L, P, U und o lassen sich erkennbar darstellen. Buchstaben wie K, M, W und X kann man mit sieben Segmenten nicht sauber zeichnen. Für Text ist ein LCD oder OLED besser geeignet.
Wie betreibe ich eine 7-Segment-Anzeige mit weniger Pins?
Am einfachsten mit einem Modul mit Treiberchip: Der TM1637 steuert vier Stellen über 2 Leitungen, der MAX7219 acht Stellen über 3. Willst du selbst eine Schaltung bauen, kontrollierst du mit einem 74HC595-Schieberegister 8 Segmente über nur 3 Arduino-Pins.
Projekte, die du danach bauen kannst
Alle Projekte ansehen
0-9 Zahlendruck mit 7-Segment-Anzeige
Projekt zur Darstellung der Zahlen von 0 bis 9 in Folge auf einer 7-Segment-Anzeige. Es lehrt die Logik der Erstellung von Zahlen durch die Steuerung der Segmentpins.

0-99 Zahlendruck mit 7-Segment-Anzeige
Projekt zur Darstellung der Zahlen von 0 bis 99 mit zweistelliger 7-Segment-Anzeige. Es lehrt die Bit-Operationen (bitRead) und die Logik der Zehner-Ziffernzerlegung.

7-Segment-Anzeige und Zähler mit Taste
Zählerprojekt, das die Zahl auf der 7-Segment-Anzeige mit 3 Tasten erhöht, verringert und zurücksetzt. Lehrt Grenzwertkontrolle und benutzerinteraktive Zählerlogik.

Würfel-Projekt
Würfelprojekt, das bei jedem Tastendruck eine Zufallszahl zwischen 1 und 6 erzeugt und diese auf einer 7-Segment-Anzeige anzeigt. Dank des Entprellungsmechanismus wird ein einziges Ergebnis bei einem

0-9999 Zahlendruck auf 4 7-Segment-Anzeige
Projekt, das die Zahlen von 0 bis 9999 auf einer 4-7-Segment-Anzeige mit der SevSeg-Bibliothek anzeigt. Es lehrt die mehrstellige Anzeigelogik mit Multiplexing (Scanning) Methode.

Digitaluhr mit 4 7-Segment-Anzeige
Digitales Uhrenprojekt mit Stunden- und Minutenanzeige mit DS1302 RTC-Modul und 4-Segment-7-Segment-Anzeige. Es kombiniert Echtzeituhrdaten und Segmentanzeige.

Bombenanimation mit 4 7-Segment-Anzeige
Bombenanimationsprojekt, das auf einer 4-7-Segment-Anzeige abwärts zählt, mit Potentiometer beschleunigt und mit Tasten abgebrochen werden kann. Lehrt die Verwendung von Timer, Multiple Input Control

ESP32 TM1637 4-stellige 7-Segment-Anzeige
Wir steuern das 4-stellige 7-Segment-Anzeigemodul mit TM1637-Treiber über einen ESP32. Mit nur 2 GPIO-Pins (CLK und DIO) betreiben wir einen Zähler im Bereich von 0 bis 9999, stellen die Helligkeit ein und zeigen das Zeichen „:“ (zwei Punkte) in der Mitte im Uhrzeitformat an. Dank der TM1637Display-Bibliothek ist die Steuerung von Zahlen, Hexadezimalwerten, Segmenten und Zeichenfolgen sehr einfach.
Weitere Artikel
Lerne die Segmente und die Pinbelegung einer 7-Segment-Anzeige kennen, unterscheide gemeinsame Anode und Kathode, zähle mit dem Arduino von 0 bis 9, multiplexe eine 4-stellige Anzeige und baue mit dem TM1637 eine Uhr mit zwei Leitungen.

