In diesem Tutorial lernst du, wie du TM1637 4-stellige 7-Segment-Anzeigen mit Arduino steuern kannst. Diese Anzeigen sind ideal, um Sensordaten, Temperatur, Zeit usw. anzuzeigen.
Ich habe in diesem Tutorial 3 Beispiele eingefügt. Im ersten Beispiel schauen wir uns die Grundfunktionen der TM1637Display-Bibliothek an. Im zweiten Beispiel zeige ich dir, wie du die Zeit auf einer 4-stelligen Anzeige darstellen kannst. Das letzte Beispiel kann in Kombination mit dem DHT11 für eine einfache Temperaturanzeige verwendet werden.
Materialien
Hardware-Komponenten
Software
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Informationen zur Anzeige
Nackte 4-stellige 7-Segment-Anzeigen benötigen normalerweise 12 Anschluss-Pins. Das ist ziemlich viel und lässt wenig Platz für andere Sensoren oder Module. Dank des TM1637-ICs auf der Rückseite des Anzeigemoduls kann diese Anzahl auf nur vier reduziert werden. Zwei Pins sind für die Stromversorgung und die anderen zwei für die Steuerung der Segmente erforderlich.
7-Segment-Anzeigen enthalten 7 (oder 8) einzeln ansteuerbare LEDs. Die Segmente sind mit A bis G beschriftet, und einige Anzeigen haben auch einen Punkt (die 8. LED). Nutze dieses Bild als Referenz, wenn du später die einzelnen Segmente im Code setzt.

Du kannst viele verschiedene Anzeigemodule kaufen, die einen TM1637-IC verwenden. Farbe, Größe, Punkte und Anschlussstellen können alle unterschiedlich sein. Ich habe nicht mit allen Versionen dieser Anzeige Erfahrung, aber solange sie den TM1637 verwenden, sollten die untenstehenden Codebeispiele funktionieren.
Hier findest du die grundlegenden Spezifikationen des Anzeigemoduls, das ich in diesem Tutorial verwendet habe.
TM1637 4-stellige 7-Segment-Anzeige Spezifikationen
| Betriebsspannung | 3,3 – 5 V |
| Stromaufnahme | 80 mA |
| Helligkeitsstufen | 8 |
| Anzeigemaße | 30 x 14 mm (0,36″ Ziffern) |
| Gesamtmaße | 42 x 24 x 12 mm |
| Bohrungsmaße | 38 x 20, ⌀ 2,2 mm |
| Betriebstemperatur | -10 – 80 °C |
| Kosten | Check price |
Der TM1637-IC wird hergestellt von Titan Micro Electronics. Für weitere Informationen kannst du das untenstehende Datenblatt ansehen:
Verdrahtung – Anschluss der TM1637 4-stelligen 7-Segment-Anzeige an Arduino UNO
Die Verbindung der Anzeige mit einem Arduino oder anderen Mikrocontroller ist super einfach. Du musst nur 4 Kabel anschließen: 2 für die Stromversorgung und 2 für die Datenübertragung.
Das folgende Schaltbild zeigt dir, wie du die Anzeige mit dem Arduino verbinden kannst.

Die Anschlüsse sind auch in der folgenden Tabelle aufgeführt:
TM1637 Anzeige Anschlüsse
| TM1637 4-stellige Anzeige | Arduino |
|---|---|
| VCC | 5 V |
| GND | GND |
| CLK | Digitaler Pin 2 |
| DIO | Digitaler Pin 3 |
Beachte, dass Reihenfolge und Position der Pins je nach Hersteller unterschiedlich sein können!
Für dieses Tutorial habe ich CLK und DIO an Pin 2 bzw. 3 angeschlossen, du kannst sie aber auf jeden beliebigen digitalen Pin legen. Du musst dann nur die Pin-Konfiguration im Code entsprechend anpassen.
TM1637 4-stellige 7-Segment-Anzeige Arduino Beispielcode
Avishay Orpaz hat eine hervorragende Bibliothek für TM1637-Anzeigen geschrieben, die TM1637Display library. Diese Bibliothek bietet mehrere eingebaute Funktionen, die die Steuerung der Anzeige sehr einfach machen.
Die Hauptfunktionen umfassen:
- setSegments() – Setzt den Rohwert der Segmente für jede Ziffer
- showNumberDec() – Zeigt eine Dezimalzahl an
- showNumberDecEx() – Zeigt eine Dezimalzahl mit Dezimalpunkten oder Doppelpunkt an
- setBrightness() – Stellt die Helligkeit der Anzeige ein
- clear() – Löscht die Anzeige
Das folgende Codebeispiel enthält alle diese Funktionen. Ich werde unten erklären, wie jede Funktion verwendet wird.
Du kannst den Beispielcode mit der Arduino IDE auf deinen Arduino hochladen.
Um die Bibliothek zu installieren, kannst du sie als .zip von Github herunterladen. Gehe dann zu Sketch > Include Library > Add .ZIP Library… in der Arduino IDE.
Eine andere Möglichkeit ist, zu Tools > Manage Libraries… oder drücke Strg + Shift + I unter Windows. Der Library Manager öffnet sich und aktualisiert die Liste der installierten Bibliotheken.
Du kannst nach „tm1637“ suchen und die Bibliothek von Avishay Orpaz auswählen. Wähle die neueste Version und klicke dann auf Installieren.
Beispielcode
Du kannst den Code kopieren, indem du auf den Button oben rechts im Codefeld klickst.
/* Example code for TM1637 4 digit 7 segment display with Arduino.
www.www.makerguides.com */
// Include the library:
#include "TM1637Display.h"
// Define the connections pins:
#define CLK 2
#define DIO 3
// Create display object of type TM1637Display:
TM1637Display display = TM1637Display(CLK, DIO);
// Create array that turns all segments on:
const uint8_t data[] = {0xff, 0xff, 0xff, 0xff};
// Create array that turns all segments off:
const uint8_t blank[] = {0x00, 0x00, 0x00, 0x00};
// You can set the individual segments per digit to spell words or create other symbols:
const uint8_t done[] = {
SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
SEG_C | SEG_E | SEG_G, // n
SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E
};
// Create degree Celsius symbol:
const uint8_t celsius[] = {
SEG_A | SEG_B | SEG_F | SEG_G, // Circle
SEG_A | SEG_D | SEG_E | SEG_F // C
};
void setup() {
// Clear the display:
display.clear();
delay(1000);
}
void loop() {
// Set the brightness:
display.setBrightness(7);
// All segments on:
display.setSegments(data);
delay(1000);
display.clear();
delay(1000);
// Show counter:
int i;
for (i = 0; i < 101; i++) {
display.showNumberDec(i);
delay(50);
}
delay(1000);
display.clear();
delay(1000);
// Print number in different locations, loops 2 times:
int j;
for (j = 0; j < 2; j++) {
for (i = 0; i < 4; i++) {
display.showNumberDec(i, false, 1, i);
delay(500);
display.clear();
}
}
delay(1000);
display.clear();
delay(1000);
// Set brightness (0-7):
int k;
for (k = 0; k < 8; k++) {
display.setBrightness(k);
display.setSegments(data);
delay(500);
}
delay(1000);
display.clear();
delay(1000);
// Print 1234 with the center colon:
display.showNumberDecEx(1234, 0b11100000, false, 4, 0);
delay(1000);
display.clear();
delay(1000);
int temperature = 24;
display.showNumberDec(temperature, false, 2, 0);
display.setSegments(celsius, 2, 2);
delay(1000);
display.clear();
delay(1000);
display.setSegments(done);
while(1);
}
So funktioniert der Code:
Der Code beginnt mit dem Einbinden der Bibliothek. Stelle sicher, dass du die richtige Bibliothek installiert hast, sonst bekommst du beim Kompilieren eine Fehlermeldung.
// Include the library: #include "TM1637Display.h"
Der nächste Schritt ist die Angabe der Anschluss-Pins. Die Anweisung #define wird verwendet, um einem konstanten Wert einen Namen zu geben. Der Compiler ersetzt alle Verweise auf diese Konstante durch den definierten Wert beim Kompilieren. Also überall, wo du CLKnennst, ersetzt der Compiler es durch den Wert 2 beim Kompilieren.
// Define the connections pins: #define CLK 2 #define DIO 3
Anzeige initialisieren
Als nächstes erstellen wir ein Display-Objekt vom Typ TM1637Display mit den definierten CLK- und DIO-Pins. Beachte, dass ich das Display „display“ genannt habe, du kannst aber auch andere Namen wie „temperature_display“ verwenden.
Der Name, den du dem Display gibst, wird später verwendet, um Daten an genau dieses Display zu schreiben. Du kannst mehrere Display-Objekte mit unterschiedlichen Namen und Anschluss-Pins erstellen und steuern. Die Bibliothek setzt hier aktuell keine Grenzen.
// Create display object of type TM1637Display: TM1637Display display = TM1637Display(CLK, DIO); // You can create more than one display object. Give them different names and connection pins: TM1637Display display_1 = TM1637Display(2, 3); TM1637Display display_2 = TM1637Display(4, 5); TM1637Display display_3 = TM1637Display(6, 7);
Es gibt verschiedene Möglichkeiten, die einzelnen Segmente der Anzeige zu steuern. Vor dem Setup-Abschnitt des Codes habe ich mehrere Arrays definiert, um die einzelnen Segmente der Anzeige zu setzen. Wir verwenden später die Funktion setSegments(), um sie auf die Anzeige zu schreiben.
Die erste Möglichkeit ist, hexadezimale Zahlen für jede Ziffer auf die Anzeige zu schreiben. Das Hexadezimal 0xff entspricht binär 11111111, das schaltet alle Segmente ein (einschließlich Punkt, falls deine Anzeige einen hat). 0xef entspricht zum Beispiel 11101111. Das würde alle Segmente einschalten, außer Segment E. Beachte, dass die Zählung von rechts nach links geht, also entspricht 11111111 den Segmenten (Punkt)GFEDCBA.
// Create array that turns all segments on:
const uint8_t data[] = {0xff, 0xff, 0xff, 0xff};
// Create array that turns all segments off:
const uint8_t blank[] = {0x00, 0x00, 0x00, 0x00};
Die Bibliothek hat eine eingebaute Funktion, die das Setzen einzelner Segmente etwas einfacher macht. Siehe den Codeausschnitt unten. Du kannst Arrays erstellen, um Wörter zu buchstabieren. Jedes Segment wird durch ein | getrennt und die Ziffern der Anzeige durch ein Komma.
// You can set the individual segments per digit to spell words or create other symbols:
const uint8_t done[] = {
SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
SEG_C | SEG_E | SEG_G, // n
SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E
};
Setup-Funktion
Du kannst den Setup-Abschnitt leer lassen, wenn du möchtest. Ich habe nur die Funktion clear() verwendet, um sicherzustellen, dass die Anzeige gelöscht wird.
void setup() {
// Clear the display:
display.clear();
delay(1000);
}
Loop-Funktion
Im Loop-Abschnitt des Codes zeige ich mehrere Beispiele für die verschiedenen Bibliotheksfunktionen:
setSegments(segments[ ], length, position)
Diese Funktion kann verwendet werden, um die einzelnen Segmente der Anzeige zu setzen. Das erste Argument ist das Array mit den Segmentinformationen. Das zweite Argument gibt die Anzahl der zu ändernden Ziffern an (0-4). Wenn du „dOnE“ schreiben willst, wären das 4, für ein °C-Symbol wären es 2. Das dritte Argument legt die Position fest, ab der gedruckt wird (0 – ganz links, 3 – ganz rechts). Wenn du also ein °C-Symbol auf der dritten und vierten Ziffer anzeigen willst, würdest du verwenden:
// Create degree Celsius symbol:
const uint8_t celsius[] = {
SEG_A | SEG_B | SEG_F | SEG_G, // Circle
SEG_A | SEG_D | SEG_E | SEG_F // C
};
display.setSegments(celsius, 2, 2);
Das zweite und dritte Argument der Funktion können auch weggelassen werden.
showNumberDec(number, leading_zeros, length, position)
Das ist wahrscheinlich die Funktion, die du am meisten verwenden wirst. Das erste Argument ist eine Zahl, die du auf dem Display anzeigen möchtest. Die restlichen Argumente sind optional.
Das zweite Argument kann verwendet werden, um führende Nullen ein- oder auszuschalten. 10 ohne führende Nullen würde als __10 angezeigt, mit führenden Nullen als 0010. Du kannst sie einschalten, indem du das Argument auf true setzt, oder ausschalten, indem du es auf false setzt. HINWEIS: führende Null wird bei negativen Zahlen nicht unterstützt.
Das dritte und vierte Argument sind wie in der vorherigen Funktion.
// Print the number 12 without leading zeros on the second and third digit: display.showNumberDec(12, false, 2, 1);
showNumberDecEx(number, dots, leading_zeros, length, position)
Diese Funktion erlaubt dir, die Punkte der Anzeige zu steuern. Nur das zweite Argument unterscheidet sich von der showNumberDec-Funktion. Es erlaubt dir, die Punkte zwischen den einzelnen Ziffern zu setzen.
Du kannst folgende Werte verwenden.
Für Anzeigen mit Punkten zwischen jeder Ziffer verwende
- 0b10000000 – 0.000
- 0b01000000 – 00.00
- 0b00100000 – 000.0
- 0b11100000 – 0.0.0.0
Für Anzeigen mit nur einem Doppelpunkt verwende
- 0b01000000 – 00:00
Und für Anzeigen mit Punkten und Doppelpunkten verwende
- 0b11100000 – 0.0:0.0
Wenn du also eine Uhr mit mittlerem Doppelpunkt anzeigen möchtest (siehe Uhr-Beispiel unten), würdest du so etwas verwenden:
// Print 1234 with the center colon: display.showNumberDecEx(1234, 0b11100000, false, 4, 0);
setBrightness(brightness, true/false)
Diese Funktion stellt die Helligkeit der Anzeige ein (wie der Name schon sagt). Du kannst einen Helligkeitswert von 0 (niedrigste Helligkeit) bis 7 (höchste Helligkeit) angeben. Der zweite Parameter kann verwendet werden, um die Anzeige ein- oder auszuschalten, false bedeutet aus.
// Set the display brightness (0-7): display.setBrightness(7);
Uhr-Beispiel: TM1637 4-stellige 7-Segment-Anzeige mit DS3231 RTC
Eine typische Anwendung für eine 4-stellige 7-Segment-Anzeige ist die Anzeige der Zeit. Durch die Kombination des TM1637 mit einem Echtzeituhr-Modul (RTC) kannst du leicht eine 24-Stunden-Uhr erstellen.
In diesem Beispiel habe ich dieses häufig verwendete DS3231 RTC module Modul verwendet. Dieses Modul kommuniziert mit dem Arduino über I2C, sodass du nur zwei Verbindungen brauchst, um die Zeit auszulesen.
Das folgende Schaltbild zeigt dir, wie du die DS3231 RTC mit dem Arduino verbinden kannst. Beachte, dass die TM1637-Anzeige wie zuvor angeschlossen wird.

Die Anschlüsse sind auch in der folgenden Tabelle aufgeführt:
DS3231 RTC Anschlüsse
| DS3231 | Arduino |
|---|---|
| VCC | 5 V |
| GND | GND |
| SDA | A4 |
| SCL | A5 |
Das folgende Codebeispiel kann verwendet werden, um die Zeit im 24-Stunden-Format anzuzeigen. Wenn deine Anzeige einen mittleren Doppelpunkt hat, lässt dieser Code ihn blinken. Du kannst das auch deaktivieren, indem du die letzten Zeilen des Codes entfernst.
Beim ersten Hochladen des Codes wird die RTC auf die Zeit gesetzt, zu der der Sketch kompiliert wurde.
Du kannst eine Knopfzellenbatterie auf der Rückseite des Moduls installieren, damit die Zeit gespeichert wird, falls die Stromversorgung ausfällt. Offenbar kann die Ladeschaltung der meisten chinesischen Module die Knopfzellenbatterie möglicherweise überladen (link), daher solltest du stattdessen eine DS3231 module von Adafruit kaufen.
Der Code verwendet die Adafruit RTC-Bibliothek, die du auf GitHub herunterladen kannst. Du kannst sie auch über den Library Manager in der Arduino IDE installieren, indem du nach „RTClib“ suchst, oder klicke auf den Download-Button unten:
Beispielcode
/* Arduino example code to display a 24 hour time format clock on a
TM1637 4 digit 7 segment display with a DS32321 RTC.
www.www.makerguides.com */
// Include the libraries:
#include "RTClib.h"
#include "TM1637Display.h"
// Define the connections pins:
#define CLK 2
#define DIO 3
// Create rtc and display object:
RTC_DS3231 rtc;
TM1637Display display = TM1637Display(CLK, DIO);
void setup() {
// Begin serial communication at a baud rate of 9600:
Serial.begin(9600);
// Wait for console opening:
delay(3000);
// Check if RTC is connected correctly:
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
// Check if the RTC lost power and if so, set the time:
if (rtc.lostPower()) {
Serial.println("RTC lost power, lets set the time!");
// The following line sets the RTC to the date & time this sketch was compiled:
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
//rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
// Set the display brightness (0-7):
display.setBrightness(5);
// Clear the display:
display.clear();
}
void loop() {
// Get current date and time:
DateTime now = rtc.now();
// Create time format to display:
int displaytime = (now.hour() * 100) + now.minute();
// Print displaytime to the Serial Monitor:
Serial.println(displaytime);
// Display the current time in 24 hour format with leading zeros enabled and a center colon:
display.showNumberDecEx(displaytime, 0b11100000, true);
// Remove the following lines of code if you want a static instead of a blinking center colon:
delay(1000);
display.showNumberDec(displaytime, true); // Prints displaytime without center colon.
delay(1000);
}
Thermometer-Beispiel: TM1637 4-stellige 7-Segment-Anzeige mit DHT11 Temperatur- und Feuchtigkeitssensor
4-stellige 7-Segment-Anzeigen sind ideal, um Sensordaten wie Temperatur, Luftfeuchtigkeit, Spannung oder Geschwindigkeit anzuzeigen. Im folgenden Beispiel zeige ich dir, wie du Temperaturwerte auf der TM1637-Anzeige darstellen kannst.
Wir verwenden den beliebten DHT11 Temperatur- und Feuchtigkeitssensor. Das folgende Schaltbild zeigt dir, wie du den DHT11-Sensor zusammen mit der TM1637-Anzeige an den Arduino anschließt.
Beachte, dass die TM1637-Anzeige wie zuvor angeschlossen wird.

Die Anschlüsse sind auch in der folgenden Tabelle aufgeführt:
DHT11 Anschlüsse
| DHT11 | Arduino |
|---|---|
| + | 5 V |
| – | GND |
| s | Digitaler Pin 4 |
Beachte, dass die Reihenfolge der Pins je nach Hersteller unterschiedlich sein kann.
Wenn du einen 4-poligen Sensor verwenden möchtest, schau dir mein Tutorial zu den DHT11- und DHT22-Temperatur- und Feuchtigkeitssensoren an: How to use DHT11 and DHT22 Sensors with Arduino.
Der Beispielcode unten kann verwendet werden, um die Temperaturwerte auf der Anzeige darzustellen. Es wechselt zwischen Celsius und Fahrenheit, beide werden jeweils 2 Sekunden angezeigt.
Die Funktion setSegments() wird verwendet, um die Celsius- und Fahrenheit-Symbole anzuzeigen.
Der Code verwendet die Adafruit DHT-Sensor-Bibliothek, die du auf GitHub herunterladen kannst. Diese Bibliothek funktioniert nur, wenn du auch die Adafruit Unified Sensor-Bibliothek installiert hast, die ebenfalls auf GitHubverfügbar ist.
Du kannst die beiden Bibliotheken auch herunterladen, indem du auf die Buttons unten klickst:
Für weitere Informationen siehe mein DHT11 with Arduino Tutorial.
Beispielcode
/* Arduino example sketch to display DHT11 temperature readings
on a TM1637 4-digit 7-segment display.
www.www.makerguides.com */
// Include the libraries:
#include "TM1637Display.h"
#include "Adafruit_Sensor.h"
#include "DHT.h"
// Define the connections pins:
#define CLK 2
#define DIO 3
#define DHTPIN 4
// Create variable:
int temperature_celsius;
int temperature_fahrenheit;
// Create degree Celsius symbol:
const uint8_t celsius[] = {
SEG_A | SEG_B | SEG_F | SEG_G, // Circle
SEG_A | SEG_D | SEG_E | SEG_F // C
};
// Create degree Fahrenheit symbol:
const uint8_t fahrenheit[] = {
SEG_A | SEG_B | SEG_F | SEG_G, // Circle
SEG_A | SEG_E | SEG_F | SEG_G // F
};
// Set DHT type, uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Create display object of type TM1637Display:
TM1637Display display = TM1637Display(CLK, DIO);
// Create dht object of type DHT:
DHT dht = DHT(DHTPIN, DHTTYPE);
void setup() {
// Set the display brightness (0-7):
display.setBrightness(0);
// Clear the display:
display.clear();
// Setup sensor:
dht.begin();
// Begin serial communication at a baud rate of 9600:
Serial.begin(9600);
// Wait for console opening:
delay(2000);
}
void loop() {
// Read the temperature as Celsius and Fahrenheit:
temperature_celsius = dht.readTemperature();
temperature_fahrenheit = dht.readTemperature(true);
// Print the temperature to the Serial Monitor:
Serial.println(temperature_celsius);
Serial.println(temperature_fahrenheit);
// Show the temperature on the TM1637 display:
display.showNumberDec(temperature_celsius, false, 2, 0);
display.setSegments(celsius, 2, 2);
delay(2000);
display.showNumberDec(temperature_fahrenheit, false, 2, 0);
display.setSegments(fahrenheit, 2, 2);
delay(2000);
}
Fazit
In diesem Artikel habe ich dir gezeigt, wie du eine TM1637 4-stellige 7-Segment-Anzeige mit Arduino verwenden kannst. Wir haben auch ein Uhr- und Thermometer-Beispiel betrachtet.
Für weitere Display-Tutorials siehe unsere How to control a character I2C LCD with Arduinound How to use a 16×2 character LCD with Arduino Tutorials.
Wenn du Fragen hast, hinterlasse bitte einen Kommentar unten.

