Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Arduino Lektion 26: TM1637 – 4 Digit 7 Segment Display

Posted on 3. März 20177. Juni 2024 by Stefan Draeger

Das 4 Digit 7 Segment Display mit dem Chip TM1637 hat 4 Stellen mit je 7 Segmenten, wobei nach 2 Stellen ein Doppelpunkt dargestellt werden kann.
Somit ergibt sich eine Anzeige von Zahlenwerten von 0000 bis 9999 oder eine Uhrzeit im Format HH:MM.

Für den Betrieb des Moduls ist eine Bibliothek vonnöten, welche über folgenden Link bezogen werden kann MonkeyElectronic. Nachdem die Bibliothek in die Arduino IDE integriert wurde, kann die eigentliche „Arbeit“ schon losgehen.

Technische Daten

  • Betriebsspannung – 5V

Anschluss am Arduino Nano / UNO

TM1637 ModulArduino Nano / UNO
 VCC5V
GNDGND
DIOdigital PIN3
CLKdigital PIN2

Nachfolgender Quellcode wurde mit dem Arduino Nano & UNO getestet.

Beispiel 1 – Ausgabe von Zahlen

Quellcode

#include <Arduino.h> //Einbinden der Arduino Bibliothekt
#include <TM1637Display.h> //Einbinden der Bibliothekt zum ansteuern des Displays

#define CLK 2 //PIN 2 für den CLK PIN
#define DIO 3 //PIN3 für den DIO 

//erzeugen des Display Objektes mit den Parametern für die PINs
TM1637Display display(CLK, DIO); 

int delayVal = 500;
int pause = 125;

void setup()
{
  //Setzt die Helligkeit des Displays mögliche Werte sind 0 bis 15
  //Wobei 0 dunkel und 15 hell ist.
  display.setBrightness(8);
  uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
  //Setzt die Anzahl der möglichen Segmente.
  display.setSegments(data);
  //Pause
  delay(delayVal);
  
   int k =0;
   for(k=0;k<1112;k++){
     display.showNumberDec(k, false, 4, 4);  //Zeigt die Nummer aus der FoorLoop Schleife an.
     delay(pause);//Pause
   }

   for(k=1111;k>0;k--){
     display.showNumberDec(k, false, 4, 4); //Zeigt die Nummer aus der FoorLoop Schleife an.
     delay(pause); //Pause
   }
}

void loop(){}

Video

TM1637 4 Digit 7 Segment Display
Dieses Video auf YouTube ansehen.

Beispiel 2 – Helligkeit des Displays

Die Helligkeit des Displays lässt sich über die Methode setBrightness() einstellen.
Es sind dabei Zahlenwerte von 0 bis 15 möglich. Wobei ein sichtbarer Effekt erst ab einem Wert von 7 eintritt (dunkel == aus) und ab dem Wert 13 keine Änderungen mehr zu erkennen sind.

Quellcode

#include <Arduino.h> //Einbinden der Arduino Bibliothekt
#include <TM1637Display.h> //Einbinden der Bibliothekt zum ansteuern des Displays

#define CLK 2 //PIN 2 für den CLK PIN
#define DIO 3 //PIN3 für den DIO 

//erzeugen des Display Objektes mit den Parametern für die PINs
TM1637Display display(CLK, DIO); 

int delayVal = 500;
int pause = 1250;

void setup()
{
  uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
  display.setSegments(data);
  delay(delayVal);
  
  for(int k=0;k<=15;k++){
    display.setSegments(data);
    display.setBrightness(k);
    display.showNumberDec(k, false, 4, 4); 
    delay(pause);
   }
}

void loop(){}

Video

TM1637 - Einstellungen der Helligkeit
Dieses Video auf YouTube ansehen.

Beispiel 3 – Uhrzeit

Da dieses Display „nur“ 4 Stellen hat, werde ich im folgenden Beispiel die Uhrzeit im Format HH:MM ausgeben. Wobei der Doppelpunkt jede 0,5 Sekunden blinkt.
Als Zeitgeber habe ich das RTC DS3231 Modul verwendet.

Für das folgende Beispiel wird die Bibliothek TM1637 aus dem Downloadbereich „Arduino>Libraries“ benötigt.

Quellcode

#include <Arduino.h>
#include <TM1637Display.h>

#include <Wire.h>
#define RTC_I2C_ADDRESS 0x68 // I2C Adresse des RTC  DS3231

#define CLK 2
#define DIO 3

TM1637Display display(CLK, DIO);

bool colonVisible = false;      
int pause = 500;

int stunde,minute,sekunde;
   
void setup(){
  Wire.begin();
  Serial.begin(9600);
  display.setBrightness(0x0a); 
}

void loop(){
   Wire.beginTransmission(RTC_I2C_ADDRESS); //Aufbau der Verbindung zur Adresse 0x68
   Wire.write(0);
   Wire.endTransmission();
   Wire.requestFrom(RTC_I2C_ADDRESS, 7);

   sekunde = bcdToDec(Wire.read() & 0x7f);
   minute = bcdToDec(Wire.read()); 
   stunde = bcdToDec(Wire.read() & 0x3f); 
   
   display.setColon(colonVisible); 
   if(colonVisible){
     Serial.print(stunde);
     Serial.print(":");
     Serial.print(minute);
     Serial.print(":");
     Serial.println(sekunde);
        
     display.showNumberDec(stunde, true, 2, 0);
     display.showNumberDec(minute, true, 2, 2);
   }
   colonVisible = !colonVisible;
   delay(pause);
}

//Convertiert binäre Zeichen in Dezimal Zeichen.
byte bcdToDec(byte val){
  return ( (val/16*10) + (val%16) );
}

Video

TM1637 mit RTCDS3132
Dieses Video auf YouTube ansehen.

Fazit

Das 4 Digit & 7 Segment Display mit TM1637 Chip ist recht einfach an den Arduino UNO anzuschließen und mit der richtigen Bibliothek zu programmieren. Die vier Stellen reichen aus um eine Uhrzeit anzuzeigen. Wenn mehr angezeigt werden soll, so musst du entweder auf ein zweites zurückgreifen oder aber eines mit mehr Digits*.

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

TM1638 LED Key Shield am Stativ
TM1638 LED Key Shield am Stativ

Es gibt auch Module, welche neben einer Segmentanzeige zusätzlich auch Taster besitzt, um andere Aktoren & Sensoren zu schalten.

12 thoughts on “Arduino Lektion 26: TM1637 – 4 Digit 7 Segment Display”

  1. Svenja sagt:
    5. November 2017 um 13:40 Uhr

    ‚class TM1637Display‘ has no member named ’setColon‘

    Ich habe die von dir verlinkte Bibliothek verwendet

    Antworten
    1. Stefan Draeger sagt:
      5. November 2017 um 14:11 Uhr

      Hi,
      stimmt hier wird eine andere Bibliothek verwendet, ich habe das Tutorial angepasst.

      Gruß,
      Stefan

      Antworten
      1. Svenja sagt:
        5. November 2017 um 16:16 Uhr

        Beispiel 3 funktioniert trotzdem nicht. Selber Fehler

        Antworten
        1. Stefan Draeger sagt:
          8. November 2017 um 09:33 Uhr

          Hallo Svenja,

          ich habe dir eine E-Mail gesendet. Vieleicht finden wir den Fehler ja zusammen.

          Gruß,

          Stefan

          Antworten
  2. Robert sagt:
    20. November 2017 um 07:04 Uhr

    Hatte das gleiche Problem. Es gibt verschiedene Versionen der Bibliothek. Mit der Folgenden hat es dann funkioniert:
    https://github.com/chamie/TM1637

    Gruss Robert

    Antworten
    1. Stefan Draeger sagt:
      20. November 2017 um 10:26 Uhr

      Hallo Robert,

      das ist wohl richtig. Daher habe ich das Beispiel 3 angepasst und einen Link zu einer anderen Bibliothek gesetzt.

      Gruß,

      Stefan

      Antworten
  3. Rico sagt:
    3. August 2018 um 21:46 Uhr

    Hi
    also ich kann machen was ich will, ich bekomme keinen Doppelpunkt angezeigt. Hab auch schon andere Libraries getestet, ohne Erfolg. Gibt’s nen Trick? mir würde auch einer ohne blinken genügen. 🙂

    Antworten
    1. Stefan Draeger sagt:
      5. August 2018 um 14:27 Uhr

      Hi,
      hast du die richtige Bibliothek? Es gibt 2 verschiedene einmal eine welche diesen Doppelpunkt unterstützt und einmal ohne.
      Welchen Microcontroller verwendest du?

      Sende mir doch mal deinen Quellcode per E-Mail an info@draeger-it.blog.

      Gruß,

      Stefan

      Antworten
  4. Ralph sagt:
    16. März 2019 um 19:31 Uhr

    Hallo,
    Wie kann ich mit dem TM1637 Display Temperaturen anzeigen, welche auch unter null Grad Celsius gehen?
    Da muss ja dann auch ein minus Symbol angezeigt werden.
    Ist so etwas auch in der Bibliothek hinterlegt?
    Gruß,
    Ralph

    Antworten
    1. Stefan Draeger sagt:
      17. März 2019 um 10:53 Uhr

      Hi,

      das „minus“ Symbol ist nicht direkt hinterlegt, jedoch kannst du die einzelnen Segmente einer 7 Segmentanzeige (davon sind 4 Stck. vorhanden) manipulieren. Somit würde ich dir empfehlen das erste Segment für das minus zuverwenden und die restlichen 3 für die die Temperatur. Somit springt die Zahl nicht von links nach rechts.

      Gruß,

      Stefan Draeger

      Antworten
  5. jo sagt:
    29. Januar 2021 um 18:03 Uhr

    Hallo, Mangels Programmierkenntnisse gelang es mir nicht, meiner Uhr (NANO;TM1637;RTC.Tiny mit DS18B (geht schon) auch die Temperaturanzeige zu „entlocken“. Bitte um Hilfe mit einer Quelle für
    eine funktionsfähigen Sketch.Danke und Guten Abend

    Antworten
    1. Stefan Draeger sagt:
      30. Januar 2021 um 09:50 Uhr

      Hallo,

      leider kann ich deinem Problem nicht ganz folgen.
      Bitte sende mir doch eine Nachricht per E-Mail an info@draeger-it.blog mit einer genauen Schilderung inkl. deinen Bauteilen / Shields / Modulen welche du verwendest.

      Gruß,

      Stefan Draeger

      Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}