# multidigit 7 segment display \*without\* blinking

**URL:** <https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740>\
**Category:** General Guidance\
**Created:** [March 11, 2020, 11:43am UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740 "2020-03-11T11:43:27Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![ToneArt](https://avatars.discourse-cdn.com/v4/letter/t/eb9ed0/32.png) [@ToneArt](https://forum.arduino.cc/u/ToneArt)\
**Post date:** [March 11, 2020, 11:43am UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/1 "2020-03-11T11:43:27Z")

</div>

Hi 🙂

Looking on the net it seems the only way to use a 3-digit 7-segment display is to blink, because you can turn only one digit at a time.

I am just thinking it is a lot of work to do for the arduino/microcontroller just to display one number!  
I was wondering if it would be possible to have a more "static" solution like an external chip that could do the blinking and all the arduino would have to do would be to send (one time) the value to be displayed to the chip?

Thanks

---

<div class="post-metadata">

**Author:** ![wvmarle](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/wvmarle/32/1013044_2.png) [@wvmarle](https://forum.arduino.cc/u/wvmarle)\
**Post date:** [March 11, 2020, 12:04pm UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/2 "2020-03-11T12:04:29Z")

</div>

Using an external chip such as the TM1637 is the standard solution for driving such displays. Multiplexing by the Arduino is only done for demo, to understand how it works. Display modules with TM1637 on board are commonly available and dirt cheap.

---

<div class="post-metadata">

**Author:** ![DrDiettrich](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/drdiettrich/32/219048_2.png) [@DrDiettrich](https://forum.arduino.cc/u/DrDiettrich)\
**Post date:** [March 11, 2020, 12:11pm UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/3 "2020-03-11T12:11:38Z")

</div>

No blinking at all with a shift register for each digit, in daisy chain for all digits. Only 3 output pins required for a display of any length 🙂

---

<div class="post-metadata">

**Author:** ![wvmarle](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/wvmarle/32/1013044_2.png) [@wvmarle](https://forum.arduino.cc/u/wvmarle)\
**Post date:** [March 11, 2020, 12:19pm UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/4 "2020-03-11T12:19:56Z")

</div>

> holdingpattern:  
> OP are you using the sevseg library? (Not as snazzy as the TM1637 for sure, but takes most of the heavy lifting out of an individual sketch.)

Out of the sketch... but not out of the Arduino!

---

<div class="post-metadata">

**Author:** ![Paul\_B](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/paul_b/32/216376_2.png) [@Paul\_B](https://forum.arduino.cc/u/Paul_B)\
**Post date:** [March 11, 2020, 9:43pm UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/5 "2020-03-11T21:43:36Z")

</div>

> ToneArt:  
> Looking on the net it seems the only way to use a 3-digit 7-segment display is to blink, because you can turn only one digit at a time.

Well, the term is not "blinking", it is "multiplexing" and while not the **only** way to drive displays, it is the most practical with the use of fewest components, much **more** practical the larger the display. "Blinking" suggests the effect is visible bt it is not as correctly implemented, it is too fast to have **any** visual effect unless you **move** the display across your visual field.

> ToneArt:  
> I am just thinking it is a lot of work to do for the Arduino/ microcontroller just to display one number!  
> I was wondering if it would be possible to have a more "static" solution like an external chip that could do the blinking and all the Arduino would have to do would be to send (one time) the value to be displayed to the chip?

And you are perfectly correct here - whilst you **can** do it with a microcontroller, it is generally a bad idea. A basic and versatile chip is the [MAX7219](https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf).

I suggest you buy a few display modules from eBay to play with. [Here](https://www.ebay.com/itm/Red-MAX7219-8-Digit-LED-Display-Module-Digital-Tube-Arduino-SPI-Control/201631983842) is one:  
[![](https://europe1.discourse-cdn.com/arduino/original/4X/6/e/b/6eb44902f1009c392fa32a93e15e1bc792c4d2ba.jpeg)](https://www.ebay.com/itm/Red-MAX7219-8-Digit-LED-Display-Module-Digital-Tube-Arduino-SPI-Control/201631983842)

---

<div class="post-metadata">

**Author:** ![ToneArt](https://avatars.discourse-cdn.com/v4/letter/t/eb9ed0/32.png) [@ToneArt](https://forum.arduino.cc/u/ToneArt)\
**Post date:** [March 13, 2020, 12:44pm UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/6 "2020-03-13T12:44:12Z")

</div>

Thank you so much you all - I knew there must be a better way!!  
And yes multiplexing that's the word thanks 😃

I started looking at the different possible chips, and I found a couple of them, I was wondering - what is the difference between the TM1637, TM1638, TM1640 and TM1620?

I could only find the datasheets in Chinese apart for the TM1637 (which is clearly the most popular one).  
But I would guess the only difference is the amount of "segments x bit" and the "keyboard scan" - could someone explain what this means? thank you!

PS:  
Kinda guessing from the chinese datasheets:

- TM1637 is 8 segments x 6 bit and keyboard scan is 8x2bit
- TM1638 is 10 segments x 8 bit and keyboard scan is 8x3bit
- TM1640 is 8 segments x 16 bit and keyboard scan is ? (only DIN and CLK pins)
- TM1620 is 8 segments x 6 bit OR 10 segments x 4 bit and keyboard scan is ? (only DIN STB and CLK pins)

PS2:  
I have not read the full TM1637 datasheet yet - and yes that would probably help me understand what the segments\*bit and keyboard scans are - I would still really appreciate a short explanation \<3

---

<div class="post-metadata">

**Author:** ![wvmarle](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/wvmarle/32/1013044_2.png) [@wvmarle](https://forum.arduino.cc/u/wvmarle)\
**Post date:** [March 13, 2020, 12:52pm UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/7 "2020-03-13T12:52:39Z")

</div>

The TM1637 can control an 6-digit 7-segment display with decimal point (the 8th segment), or read an 8x2 button matrix. The others are likewise. Control of these chips is dead easy with ready-made Arduino libraries. I haven't tried the others you mentioned, never had a need for it.

I do have a stack of unused TM1627. Ordered the wrong ones 🙂

---

<div class="post-metadata">

**Author:** ![anon57585045](https://avatars.discourse-cdn.com/v4/letter/a/ed8c4c/32.png) [@anon57585045](https://forum.arduino.cc/u/anon57585045)\
**Post date:** [March 13, 2020, 1:42pm UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/8 "2020-03-13T13:42:25Z")

</div>

> ToneArt:
> 
> - and yes that would probably help me understand what the segments\*bit and keyboard scans are - I would still really appreciate a short explanation \<3

A segment is one of the "lines" that make up a seven segment digit. One or more LEDs illuminate it. Being a LED (or set of LEDs illuminated together), it will have an anode and a cathode. A multiplexed display will simply apply current through the anode-cathode at the appropriate time to illuminate that segment.

---

<div class="post-metadata">

**Author:** ![ToneArt](https://avatars.discourse-cdn.com/v4/letter/t/eb9ed0/32.png) [@ToneArt](https://forum.arduino.cc/u/ToneArt)\
**Post date:** [March 13, 2020, 1:50pm UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/9 "2020-03-13T13:50:48Z")

</div>

Ok that helps a lot thanks!

So basically the "button matrix" reading function and the 7-segment display controlling function are independant in the chip? That would explain the TM1640/20 which basically do not have the button matrix reading function I guess 🙂

---

<div class="post-metadata">

**Author:** ![anon57585045](https://avatars.discourse-cdn.com/v4/letter/a/ed8c4c/32.png) [@anon57585045](https://forum.arduino.cc/u/anon57585045)\
**Post date:** [March 13, 2020, 2:00pm UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/10 "2020-03-13T14:00:25Z")

</div>

No, the button reading and display scanning on the TM1637 are integrated, not independent.

---

<div class="post-metadata">

**Author:** ![ToneArt](https://avatars.discourse-cdn.com/v4/letter/t/eb9ed0/32.png) [@ToneArt](https://forum.arduino.cc/u/ToneArt)\
**Post date:** [March 13, 2020, 2:40pm UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/11 "2020-03-13T14:40:23Z")

</div>

Alright thanks aarg, but in my case I have no need to read a matrix of buttons, simply controlling the display, can I simply not use the button reading function?

---

<div class="post-metadata">

**Author:** ![wvmarle](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/wvmarle/32/1013044_2.png) [@wvmarle](https://forum.arduino.cc/u/wvmarle)\
**Post date:** [March 13, 2020, 2:58pm UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/12 "2020-03-13T14:58:33Z")

</div>

Of course. In fact you can use only one of the functions, as it uses the same pins on the chip.

Anyway, if you get an integrated module there's nothing to worry about. Use the library and it'll just work.

---

<div class="post-metadata">

**Author:** ![PaulRB](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/paulrb/32/216330_2.png) [@PaulRB](https://forum.arduino.cc/u/PaulRB)\
**Post date:** [March 13, 2020, 3:24pm UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/13 "2020-03-13T15:24:10Z")

</div>

Another option not yet mentioned is ht16k33. Just one of these chips can drive up to 16 7-seg displays or up to 8 14/16-seg displays, or 128 individual LEDs (eg. 16x8 matrix) and can scan a key matrix too. Plus it has the advantage over the tm16xx chips of having a standard i2c interface which can be shared with other sensors, I/o extenders, RTC,... all connected to just 2 Arduino pins. Disadvantages: overkill for just 3 7-seg digits, and not as fast to update as max7219 when many chips are used to drive a larger matrix.

---

<div class="post-metadata">

**Author:** ![ToneArt](https://avatars.discourse-cdn.com/v4/letter/t/eb9ed0/32.png) [@ToneArt](https://forum.arduino.cc/u/ToneArt)\
**Post date:** [March 16, 2020, 10:25am UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/14 "2020-03-16T10:25:37Z")

</div>

Thank you again guys 🙂

Nice to know about the functions, and PaulRB yes I noticed the TM chip uses a non-standard interface, I'll check the ht16k33 then 😉

Cheers  
Simon

---

<div class="post-metadata">

**Author:** ![Paul\_B](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/paul_b/32/216376_2.png) [@Paul\_B](https://forum.arduino.cc/u/Paul_B)\
**Post date:** [March 17, 2020, 5:22am UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/15 "2020-03-17T05:22:55Z")

</div>

And don't forget that the MAX7219 is probably the easiest of the lot. 😀

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [May 5, 2021, 7:10pm UTC](https://forum.arduino.cc/t/multidigit-7-segment-display-without-blinking/641740/16 "2021-05-05T19:10:20Z")

</div>


