book collections email follower instructable user
Picture of Addressable 7-Segment Displays

Every so often an idea clicks in my brain and I think, "how has this not been done before?" and majority of the time, it actually has been. In the case of the "Addressable 7-Segment Display" - I really don't think its been done, at least not like this.

Most of the time 7-segment displays end up being way more complicated than you think they would be. Essentially you're just lighting a bunch of LEDs to display numbers or letters. That means you need to have control over each segment of each digit you have, so if you have 4 digits, thats 4 * 7 = 28 outputs! Not to mention wiring and resistors. Then once you start driving a bunch of them, things don't look so simple anymore. I decided to create a simple way to have as many, or as little, 7-segment displays as you want, and they're super modular. Whether you want 20, or 2, you only need one data line from the Arduino to control them. Follow along to see how I did this, or to make your own, or to just know how they work!

If you don't feel like making your own, or you just feel like supporting the open source projects I create, I'm current running a crowdfunding campaign for these displays on my website!

Step 1: Watch the Video

If you learn better by watching videos, I explain how I built them and how they work here.

Don't forget to subscribe!

cshoults28 days ago
Is the brightness difference achieved by adjusting voltage or is it all done through the data line? How much power is consumed by each of the modules? My meaning, if the Arduino is capable of 150mA and I need to string a series of 10 modules, will I be stressing the power output capabilities of the Uno or Nano?
n4mwd8 months ago
I don't think the WS2811 chips are the best choice for a single 7 segment display. You need three of them at a cost of $1.50. A better and cheaper, but not easier, choice would be to use a single $0.60 Busy Bee (EFM8BB10F8G-A-SOIC16). The Busy Bee is an 8051 mcu with everything built in. It has 13 IO lines that can drive the 7 segment display directly - only a single resistor and a pair of power coupling caps are necessary. Actually, you could actually drive two multiplexed digits plus the decimal point with it. That particular MCU is in a giant 16 pin soic so its really easy to solder. Because the Busy Bee is a MCU, you can program whatever communication protocol you want including bidirectional with error correction. It has built in hardware CRC to make that easier.

I just completed a large chain of 8x8 matrix displays that were daisy chainable like your 7 seg displays are. I used, and regretted it, a set of MAX7219 chips. The problem was that the serial communication broke down with longer chains. I finally found a way to fix it, but its still not perfect. If you use bidirectional communication with error correction then you don't have that problem.
PratyushJ n4mwd5 months ago
Well, I also found a 100pc lot for $4.9 on aliexpress. Puts it at $0.049 a piece and around $0.15 for 3 pieces. Also its much easier to use, and I would definitely go with WS2811.
n4mwd PratyushJ5 months ago
That's 15c plus the cost of the PCB plus the 7 seg display. On ebay, for $1.40 you can buy the 8 digit 7 seg display with the counterfeit Max7219 already built and ready to go. It still needs two 2K resistors to make it work properly. The WS2811 would be a good option for when you only need one or two digits. The MAX chip uses a SPI-like interface. SPI is not as error free as NRZ, but its better supported.
BerenV n4mwd8 months ago
You can get WS2811 chips for much cheaper. I'm getting 100x of them for only $6.17 on aliexpress, although it's somewhat of a gamble whether they'll all work or not...
n4mwd BerenV8 months ago
Those chips work good for LED strips which is what they were intended for. A MAX 7219 chip, which I frown upon, can handle eight 7-seg + DP displays. Those are about $20 for 50 but they have problems. Mostly because they are counterfeit. I suspect the Ali WS chips are also. Might work - might not. Still, the Busy Bee is a single chip solution that can handle up to 3 digits and provide error corrected communication. That was the biggest problem with the MAX chip, it was basically a big shift register and any noise that got shifted in also got shifted out to the next chip in the line. The more chips, the more chance of an error creeping in to the data stream. I briefly looked at the WS datasheet and suspect that it works the same way.

EDIT: I looked again and the WS chip uses an embedded clock NRZ communication. Its generally less susceptible to noise than straight logic levels. Its still using the shift register method though.
coencoen7 months ago
A really nice project. but I do think that there must always be room for improvement
SkeletU7 months ago
Всё неплохо но эти микросхемы во первых достаточно дорогие. Во вторых что более важно заказные. И доступны к заказу минимальной партией от 100шт. что очень осложняет их покупку. При этом оптовики не работают с физическими лицами.

Так что решение выглядит несколько сомнителным. Сдвиговый регистр в этом отношении по моему проще и самое главное они намного доступнее и дешевле.
Amardes8 months ago
That was fantastic!!
Love this project, a really clever use of existing ICs to achieve another very useful function.
jtechian8 months ago
Have a look at this: .. I still like your project :) Made me design a pcb for the ws2812b chip leds like this before I found the one at neosegment.
jtechian8 months ago
Simplify this with the neopixel leds arranged in the segments on a pcb, apply a window mask over the leds to form uniform segments, and use the existing libraries. Still 3 wire interconnect, but able to be multi color along with brightness. What you think?
coencoen jtechian7 months ago
Like I dit in my project
jtechian jtechian8 months ago
I did some work designing a pcb for a display of what I mentioned doing, then I found this is already available. Here is the link : I still like the exercise to design one like this, always fun! Thanks for sharing your project.
Sean, my I was in your store and tried to use the contact link ->
But it has no info so I'll ask here. First, I like these. If the project funds, I'm in for 4 to start, consider a slight design option of making them connectible from top and bottom as well. Then someone can make a larger multi line display.
They'd work like a string of neopixels. Just make multiple rows and then chain them together at the ends with jumper wires (no need for more components, or worse, PCB space). It's a beautiful design really in so many ways.
Chefmike668 months ago
Nice work. I thank you for sharing, for free, what could undoubtedly be a very profitable idea. I really like this.
Sajjad_A8 months ago
well done!
Great idea! I do it with shift registers and transistor array ICs but this is much more modular. Also the brightness control is a plus and I like how the digits fade into reach other. It is a shame that one pin gets wasted. I could help you out with wiring the library if you are still looking for help.
memjr738 months ago
I did something similar but used just one 74595 shift register per 7 see display :)

ellisgl memjr738 months ago
2 x 74x595 will give you 8 7 segment displays.

memjr73 ellisgl8 months ago
That's true, you can use one for the segments and the other to multiplex them.
SloanT18 months ago
Did you make the stand alone library? If not, I'd be willing to give it a go. Let me know the specs for the library (ie. properties and methods), and I'll see if it's something I can do.
Gun Maniac8 months ago
In theory with a tweak to the code, could you have 4 WS2811s per display and replace the 7 segment displays for 11 segment (starburst type) displays?
mickeypop8 months ago
Great Idea
Being a semi retired i would love to write the library. I figure 3 or 4 would be ample to test all functionality.

The likely best would be to write it as a library dependant rather than a stand alone. Simply make it a wrapper around the NeoPixel library.

This would allow using WS2811 LEDs as well in the same circuit with minimal extra ram usage. Just declare the LEDs and numeric displays on separate pins.

Let me know if that sounds like a right way.
Oh by the way; In the video plugging and unplugging live would be smart if the data pin was just a tad shorter for safe Hot Swapping.

a relay board variant might be a good idea too.

throbscottle8 months ago
Really clever, but without your invention 4 displays would take 11 lines, not 28! (well actually 12 because you have the decimal point) due to multiplexing.

Clever making individually addressable digits. The other way to do it is with a driver chip like the (now obsolete) MAX7219 or 7221 but the chip stays connected to the uC via a 4 wire interface. The displays themselves are still multiplexed but otherwise you have similar control.

BerenV8 months ago
Great project! I'd like to build as many as I can afford. Have you considered asking Sparkfun to sell and/or manufacture them?

After doing some shopping, my BOM for building 50 displays (20x red, 20x green, 10x blue) with lead-free pcbs is $71.50, which works out to only $1.43/unit. Not sure I can afford 50, but it's good to know that they're in a pretty affordable price range!
ghunt1008 months ago
The following line in your sketch displays a number on a selected 7-segment display:

writeDigit(DisplayNumber, Number, Brightness);

where "Number" signifies the digit you want to display. How do you include the decimal point?
Lfgf8 months ago
Is there any way to do the same using 4" high 7 segments less?
excessnet Lfgf8 months ago
Yes, you will need to connect them directly instant of using the PCB. You can use the PCB and instant of soldering the 7-Sgements on the PCB, you will wire it using a wire solder to the hole. Make sure it's commom annode else the exact same wiring won't work.
bratoff8 months ago
I built a similar concept - modular, pluggable displays - but using a 74HC595 on each data line. I like the WS2811 approach because it adds dimmability, eliminates the separate clock line, and solves the voltage drop issue as you add more than a few displays.
Please message me if you're still looking for help building a library, I can probably modify the one I made for my solution fairly quickly.
Brilliant! I came here because of how many wires I had to drive just 1 display and I thought it was downright ridiculous. Thought perhaps this would be really simple. lol. anyway. Great project.

PS "Every so often an idea clicks in my brain and I think, "how has this not been done before?" and majority of the time, it actually has been." I know the feeling XD the latest time was when I had the grand idea to aerofoil my rocket fins. Turns out it is completely common practice.
UserInstru8 months ago
Ottima e originale idea ! Sfruttare per le proprie idee qualcosa nato per altri scopi ! Complimenti.
Very good and original idea! To Make use of something born for other purposes, into our ideas! Congratulations.

lucasdesordi8 months ago
Hi Sean, great project!
Hey, I want to make a addressable serial motor controller... could you give me a light on how to do this? What chip to use...
Basically I want to send for a "line" of motors, the position they have to go and send back the home position sensor for each of of those.
the easiest would be to use one the existing i2c motor contollers out there. Seeed makes one based on the atmega8 that can be reprogrammed. you could modify its program and use the icsp header's data pins for your home sensor.
Great project! Well documented and easy to replicate.
AashishS48 months ago
After a long time I have seen an instructable that I would like to try making. I have always thought there must be a clean and elegant way to add 7 seg displays, and you solved the problem so nicely. Made my day!
Cheers and thanks!:)
- Aashish
Edwin658 months ago
Must say you have great projects, I am looking to make a 2 team Score Board with 2x2 7-segment displays that can count 0 to 20. The 7-segment display I wanted to make out of led-strips for they must be 4" tall or neo-pixels strips. any info would be great!
KarloHorcicka8 months ago
So, for school we had a project that wanted us to display the number of pulses given by the rotary encoder. It had to be done with these 7-segment displays but i found another solution other than arduino. It was the bc4026 ic which was created exactly for that purpose. Now, I quite like this project of yours because it allows multiple digits to be added without any additional wires which was the problem for us. I just wanted to ask whether it's possible to add the bottom line to digit 9? I really like your projects and I hope to see a lot more of them in future. Keep up the good work.
Apologies, it was cd4026be, not bc4026 like I said