Introduction: 7 Segment Display Array
I've build an led display made out of 144 7 segment displays controlled by an arduino nano. The segments are controlled by 18 MAX7219 ic's which can control up to 64 individual leds or 8 7 segment displays. The array has 144 displays made each up of 8 individual leds so the array has an total off 1152 leds you can control.
Step 1: Get Your Components
1 x Arduino Nano
1 x PCB
144 x Common Cathode 7 segment 1 digit displays
18 x MAX7219
18 x 10uf Capacitor (0603)
18 x 100nf Capacitor (0603)
19 x 12k Resistor (0603)
1 x Female Micro usb
42 x Female header
1 x Tiny RTC (optional)
1 x 2A Powersupply
Step 2: Order Your PCB
Here you can download the Gerber files for the PCB of the display. Upload them through https://jlcpcb.com/quote#/ or a different manufacturer to order them.
Attachments
Step 3: Solder the Components
Solder all the components on to the PCB as shown in the schematics. If u have little or no experience in SMD soldering I suggest u watch this tutorial on SMD soldering first.
If u are going to use the display as a clock solder the headers of the Tiny RTC on de side of the battery.
Step 4: Display As a Clock
When you finished soldering all the components download the code and upload it to the arduino before putting it into the display. If u want to display something custom have a look at Step 5.
Attachments
Step 5: Make Custom Code
If u want to show something custom you need to code it by by hand. In the example code different segements aka pixels are shown in bytes with each bit one segment: 0bDP-A-B-C-D-E-F-G e.g. 0b01011011 will show a 5.
The example code has 3 different ways to show pixels. The first way is to use the putPixel(x, y, byte); function to replace one pixel of the display at the location x, y (0, 0 is top left 5, 23 is bottom right).
The second way is to use the addPixel(x, y, byte); function it works almost the same as the putPixel() function but instead of replacing the pixel it adds the pixel to the original one.
The last way is to use the fillPixel(x1, y1, x2, y2, byte); funtion to fill a rectangle from x1,y1 to x2,y2 with the same pixels.
Attachments
Step 6: You're Done!
Congratulations you're done! Now you can program the display the way you like it. And if u made the display dont forget to share it :)

Participated in the
Lighting Challenge
3 People Made This Project!
- TAGood827 made it!
- TAGood827 made it!
- kiwigrinder made it!
28 Comments
Tip 1 year ago
Here's an updated version of the code that will work with the 7 button switch shield we designed for the clock. We've added time/date mode, brighter/year up, dimmer/year down, hour/month up, hour month down, minute/day up, and minute/day down. Changing the minute sets the seconds to 0.
Message me if you are interested obtaining a board.
Tip 1 year ago on Step 4
Many thanks to my friend Octavian, this code fixes a problem we had with the display where some of the MAX7219 would get stuck and show all 8s or all blank. The MAX 7219 is basically reinitialized every cycle. Eliminated the blinking colons and added seconds at the top center of the display.
Question 1 year ago
I've noticed that after about 3 days I get a funny thing happen on my display. There's a pocket of all blank digits or a pocket of all 8s. Seems to happen most often in the fourth row but I've seen it in other locations. Sometimes it's stretched across the whole row. I'm guessing it's a memory glitch in my Nano clone. As soon as I hit reset, it goes away for another 3 days or so.
Anyone else see something like this on their display?
Question 1 year ago
If I'm not wrong, the current you set is 5V/12k*100 = 40mA per segment. This means that, assuming 50% of segments are light up, the current consumption is roughly 20A (100W at 5V). Which seems a bit too much for me. So.. what is the actual current consumption of the display?
Answer 1 year ago
I noticed that the intensity in SW is set to 3 (i.e. 7/32), which means that the total current consumption is roughly 4A, assuming about half of them are light in some time. Less than 100W, but still a lot...
Reply 1 year ago
I think you're missing that the MAX7219 is scanning the 8 digits it controls at 800Hz. It's not actually turning all the segments on at the same time. I have a test program that turns all 144 digits to the number 8 and it doesn't even top 2A.
1 year ago
I designed a quickie stand to hold the display, posted on Thingiverse:
https://www.thingiverse.com/thing:4731089
I'm also working on a bezel to capture a piece of 20% film but that takes a big printer I don't get much time with.
Tip 1 year ago
Ah, nevermind! Noticed my RTC was a DS1307 and changed the reference and a function call and all is well now!
Question 1 year ago
Assembled my clock over the holiday. Test mode works fine. Pac Man looks fine. Clock stuck at 1:00. Which RTC lib did you use? Not sure which one to choose, my RTC is not updating.
1 year ago
Got my boards in one week! That's pretty awesome! Other parts are rolling in...
Looking forward to putting this together.
2 years ago
One other question, what is the size of the PCB? I'm trying to measure it and it looks like it is about 305mm x 117mm.
Thanks!
Reply 2 years ago
Close, its 305mm x 114mm
Reply 2 years ago
Thanks again!
2 years ago
You have provided a brilliant idea for using old 7-segment display's which we may have stocked up. Wonder if is possible to make a smaller version?
Reply 2 years ago
I used 0.28" 7 Segment displays on my build making it only quarter of the size. It then becomes a desktop alarm clock.
Reply 2 years ago
Must be cute! any pics'
Reply 2 years ago
See https://www.hackster.io/john-bradnam/7-segment-array-clock-cd5b07
Reply 2 years ago
I Love this ! Thanks for sharing
Question 2 years ago on Introduction
Interesting design! What specific 7 Segment display did you design the PCB for?
Answer 2 years ago
0.56 inch Common Cathode 7 segment 1 digit displays.
I bought them on aliexpress here: https://nl.aliexpress.com/item/32966430603.html?spm=a2g0s.9042311.0.0.27424c4dewmx2n