I will be using the 14 input/output Arduino. My goal is to create a plane radio console for use with a flight simulator. I am very competent at writing code, but have little knowledge of electrical engineering. There are 3 readouts on the panel I am making, which will display the different frequencies. I need to be able to directly control each 7 segment display of the 12 total digits needed.

Which shift registers would I need in order to properly wire this? I want to use as little of the pins on Arduino as possible as i need to also wire up 3 rotary encoders and two On/Off switches.

Is this possible? If so, which Shift Registers do I need, and what Make/Model?


Twelve 74HC595s. Daisy chain them serial out (Q7S) to serial in (DS), then you can clock in 96 bits for the segments and push them all out at once.

  • \$\begingroup\$ Worth noting, though, that the 74HC595 alone might not sink enough current to drive all those LEDs at once. Per-segment transistors may be needed to drive them. \$\endgroup\$ – Polynomial Sep 1 '13 at 23:49
  • \$\begingroup\$ ... or 3x SAA1064 connected through I2C. \$\endgroup\$ – Nick Alexeev Sep 1 '13 at 23:51
  • \$\begingroup\$ @NickAlexeev: That sounds like a valid answer to me. Perhaps you should post it. \$\endgroup\$ – Ignacio Vazquez-Abrams Sep 1 '13 at 23:57
  • \$\begingroup\$ I'm liking the 3 chip plan versus the 12 chip plan. (some bit smaller) How many pins on the arduino will that use up? i need to also hook up 3 rotary encoders and 2 on/off toggles \$\endgroup\$ – user28334 Sep 2 '13 at 0:39
  • \$\begingroup\$ This one uses 3 pins: data, serial clock, latch. \$\endgroup\$ – Ignacio Vazquez-Abrams Sep 2 '13 at 0:40

Three SAA1064 would solve this problem. These are connected through I2C. The individual address of each chip is set through the address select pin. There are four possible different addresses.

On the web there are tutorials describing how to connect SAA1064 to Arduino (this, for example).

  • \$\begingroup\$ I really like the three SAA1064 design. Now how many pins will that take up on my arduino? 2 or 3? \$\endgroup\$ – user28334 Sep 2 '13 at 7:13
  • \$\begingroup\$ Two I2C lines can service multiple I2C devices, as long as addresses don't collide. Be sure to read-up on the I2C bus. Read (at least skim through) the I2C spec. \$\endgroup\$ – Nick Alexeev Sep 2 '13 at 7:45

Assuming the LED displays are of common-cathode type, Maxim offers a couple of excellent serially interfaced 7-segment multi-digit LED drivers:

  • The MAX7219 (Maxim's legacy SPI variant) and MAX7221 (fully SPI compliant) are well-known go-to parts that have been around for ever: 8 digit serially interfaced common cathode drivers. Use two of them to go all the way up to 16 digits if needed.
  • The Maxim MAX6958 / MAX6959 provide for 9 digits each, via an I2C serial interface, if the requirement might conceivably expand to 18 digits at some point.

The main advantage of using these dedicated LED driver ICs, over using shift registers, is that LED current setting is done via a single resistor connected to the IC, with the IC then taking care of current regulation of each LED. No more per-LED resistors!

An added advantage if you need it, is that these drivers incorporate BCD (Binary Coded Decimal) decoding, should your application require it.

A second, possibly less expensive DIY alternative is to use a dedicated microcontroller just to drive the digits, such as has been described in the excellent post by Roman Black: The No-parts LED driver!. He specifically addresses 12 digit 7-segment displays, and provides schematics and a PCB layout.


  • \$\begingroup\$ That board really should have more then just a single 22 uF Tant. The ESR of small tants can be quite high. A ceramic bypass cap would have been a very good idea. \$\endgroup\$ – Connor Wolf Sep 2 '13 at 9:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.