In this tutorial, you will learn how you can test TM1637 4-digit 7-segment display and Counter function with adjusting time delay.
Components required
Arduino Nano - 1 no
TM1637 module - 1 no
Push Button switch - 2 no
5V/3.3V Power module - 1 no
Circuit diagram
TM1637
TM1637 seven segment modules is a ready made multiplexed seven segment display with 4 digits. The driver IC is TM1637; It has 4pin control there are GND, VCC, DIO, CLK. only two signal lines can make MCU control four Digit 7-segments LED can be used to display decimal, letters and so on. The 7segment LED Display has common anode type.
TM1637 4-Digit 7-Segment Display Specifications
Operating voltage 3.3 – 5 V
Current draw-80 mA
Operating temperature-10 – 80 °C
Interfacing TM1637 with the arduino:
So the first thing you want to do is connect the clock pin to any pin on the Arduino.
CLK clock pin of the TM1637 with the digital pin 3 of the arduno.
DIO pin of the TM1637 with digital pin 2 of the arduino.
VCC of the TM1637 with the 5V of the arduino.
Gnd of the TM1637 with the ground of the arduino.
Counter
In this example we use the TM1637 display module to make a simple counter with two push buttons. The setup is as shown below where the buttons are connected to pin 8 and 9 of Arduino nano.
This example shows the commonest basic functions of the TM1637Display.h library which are; setBrightness(): for setting the brightness of the display. There are seven levels of brightness therefore the value can be in 0x0a to 0x0f.
showNumberDec(): this is the most used function and it is for displaying decimal number digits. This function can take four arguments that is, showNumberDec (int num, bool leading_zero, uint8_t length, uint8_t pos), the first argument is the number to be displayed, the second is determining leading zeros and can either be true or false, the third argument is the number of digits to be displayed and the last argument is for selecting the position where the number to be displayed should begin from.
For example display.showNumberDec(25,false,2,1) displays the number 25 without leading zeros on the second and third digit
Installing Library
7segment: you need to Download and install the TM1637 library.
Follow the next steps to install those libraries.
In your Arduino IDE, to install the libraries go to Sketch > Include Library > Add .ZIP library… and select the library you’ve just downloaded.
After installing the required libraries, copy the following code to your Arduino IDE.
Arduino Code
First testing the TM1637 display check.
#include <Arduino.h>
#include <TM1637Display.h>
// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 500
const uint8_t SEG_DONE[] = {
SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d
SEG_D | SEG_C | SEG_F | SEG_E | SEG_G, // b
SEG_C | SEG_D | SEG_E | SEG_G, // O
SEG_D | SEG_E | SEG_F | SEG_G, // t
};
TM1637Display display(CLK, DIO);
void setup()
{
}
void loop()
{
int k;
uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 };
display.setBrightness(0x0f);
// All segments on
display.setSegments(data);
delay(TEST_DELAY);
// Selectively set different digits
data[0] = display.encodeDigit(0);
data[1] = display.encodeDigit(1);
data[2] = display.encodeDigit(2);
data[3] = display.encodeDigit(3);
display.setSegments(data);
delay(TEST_DELAY);
/*
for(k = 3; k >= 0; k--) {
display.setSegments(data, 1, k);
delay(TEST_DELAY);
}
*/
display.clear();
display.setSegments(data+2, 2, 2);
delay(TEST_DELAY);
display.clear();
display.setSegments(data+2, 2, 1);
delay(TEST_DELAY);
display.clear();
display.setSegments(data+1, 3, 1);
delay(TEST_DELAY);
// Show decimal numbers with/without leading zeros
display.showNumberDec(0, false); // Expect: ___0
delay(TEST_DELAY);
display.showNumberDec(0, true); // Expect: 0000
delay(TEST_DELAY);
display.showNumberDec(1, false); // Expect: ___1
delay(TEST_DELAY);
display.showNumberDec(1, true); // Expect: 0001
delay(TEST_DELAY);
display.showNumberDec(301, false); // Expect: _301
delay(TEST_DELAY);
display.showNumberDec(301, true); // Expect: 0301
delay(TEST_DELAY);
display.clear();
display.showNumberDec(14, false, 2, 1); // Expect: _14_
delay(TEST_DELAY);
display.clear();
display.showNumberDec(4, true, 2, 2); // Expect: __04
delay(TEST_DELAY);
display.showNumberDec(-1, false); // Expect: __-1
delay(TEST_DELAY);
display.showNumberDec(-12); // Expect: _-12
delay(TEST_DELAY);
display.showNumberDec(-999); // Expect: -999
delay(TEST_DELAY);
display.clear();
display.showNumberDec(-5, false, 3, 0); // Expect: _-5_
delay(TEST_DELAY);
display.showNumberHexEx(0xf1af); // Expect: f1Af
delay(TEST_DELAY);
display.showNumberHexEx(0x2c); // Expect: __2C
delay(TEST_DELAY);
display.showNumberHexEx(0xd1, 0, true); // Expect: 00d1
delay(TEST_DELAY);
display.clear();
display.showNumberHexEx(0xd1, 0, true, 2); // Expect: d1__
delay(TEST_DELAY);
// Run through all the dots
for(k=0; k <= 4; k++) {
display.showNumberDecEx(0, (0x80 >> k), true);
delay(TEST_DELAY);
}
// Brightness Test
for(k = 0; k < 4; k++)
data[k] = 0xff;
for(k = 0; k < 7; k++) {
display.setBrightness(k);
display.setSegments(data);
delay(TEST_DELAY);
}
// On/Off test
for(k = 0; k < 4; k++) {
display.setBrightness(7, false); // Turn off
display.setSegments(data);
delay(TEST_DELAY);
display.setBrightness(7, true); // Turn on
display.setSegments(data);
delay(TEST_DELAY);
}
// Done!
display.setSegments(SEG_DONE);
while(1);
}
Next UP/DOWN Counter code
#include <TM1637Display.h>
#define UP 8
#define DOWN 9
const int CLK = 2; //Set the CLK pin connection to the display
const int DIO = 3; //Set the DIO pin connection to the display
const uint8_t blank[] = {0x00, 0x00, 0x00,0x00};
TM1637Display display(CLK, DIO); //set up the 4-Digit Display.
int num = 0;
// The amount of time (in milliseconds) between counter
#define COUNTER_DELAY 1000
void setup()
{
pinMode(UP, INPUT_PULLUP);
pinMode(DOWN,
INPUT_PULLUP);
display.setBrightness(0x0f); //set the diplay to brightness
display.setSegments(blank);//clear display
}
void loop()
{
display.showNumberDec(num, true, 4, 0);
delay(COUNTER_DELAY);
if( digitalRead(UP) )
{ // if the UP button is presses
num++; // increment 'num'
if(num > 9999)
num = 0;
}
if( digitalRead(DOWN) )
{ // if the DOWN button is presses
num--; // decrement 'num'
if(num < 0)
num = 9999;
}
}
Demo
Comments