4x 7 Segment LED scoreboard programming with Arduino Nano and 4x 74HC595 Shift Registers

Hi Guys, new to Arduino but I’ve built an LED Strip Light Scoreboard (4 Digit/7 Segments per digit).

Each 7 Segment Digit is connected to a 74HC595 shift register, in total will have 4 shift registers which are daisy chained and connected to an Arduino Nano.

Having some struggles programming the shift registers, I’ve managed to get a test code on which is cycling through each segment individually (which is great)… but now I need to be able to program each of the numbers using both an IR Remote and also “UP/DOWN” buttons for each side of the scoring.

I’ve been looking at a few projects people have done previously but their coding is not using a Arduino Nano and not really using shift registers how they can be used (daisychained).

I’ve uploaded the current sketch I am working with…

Would really appreciate any help that you guys can provide to get this all working :slight_smile:


scoreboard_-_current.zip (4.0 KB)

Hey @Brendan113074

Here are a couple of links for you to explore. The first is a introduction to the 595, and shows using 1 and then 2 of the 595s. Going from 1 to 2 chips is explained, so going to 4 is easy.

The second is a more full blooded example, and the code in the comments is a full Arduino sketch that can be cut and pasted into the Arduino IDE.




As to the use of switches, you can find tutorials on that all over the place. Check the tutorials section on Core’s website.

I also think that your application might be suited to using a rotary encoder. See the tutorial here:


Hey Robin, those sketches look similar to what I used to test the registers were daisychained properly to beging with… But I can’t work out how to progress to then make these work with the scoreboard numbering and I need someone to assist

No magic needed, just a little knowledge of how segment displays work.

First the display is made up of seven discrete LED bars, and a decimal point. Usually either the anode or cathode of these is commoned to reduce the number of connections required. The data “clocked” to the shift register is the bits required to turn on/off the individual segments.

In the sample code, the array led_BCD holds that bitmap for the hex digits from 0 to 9 and abcdef.

So instead of sending out say 2, you send out the info in led_BCD[2], and the decimal point as required.

The example uses a common anode display, so if you are using common cathode display, you may need to invert the data in the array.

Does this help?

1 Like

Sort of, my segments are all common anode (so they are switched on the cathode). No decimal points just 4 x 7 segment numbers.

To make a double digit number, it would be 2x pairs of 7 segments 00-99.

The hard part I have is trying to map out the combination for each number and how to shift the data to the next register - and how to do this in the sketch.

Did you check out the attachment I added? That is where I’ve gotten to currently but it’s not working on the Nano as yet.