# how many 7 segment LEDs can a arduino run?

How many 7 segment LEDs can a arduino run before using a LED Driver IC?

Really want to have 4 counting down 60.00 to 00.00 (MM.SS)

You can run a 4-digit LED display from the arduino. I have a 4 digit display from digikey(67-1450-ND) running right now. You’ll need 12 IO.

edit:12 IO, not 16.

how about 4 separate 7 segments?

That display is 4 separate segments. There are 8 segments per digit, and 4 common cathodes.

You connect the 8 segments and 4 cathodes to 12 IO and drive each digit sequentially. Here’s some code I threw together to display numbers on that particular display.

note: this code isn’t all that great, or even all that complete.

``````#include <TimerOne.h> // this is non-standard, download it from the arduino site

const int num_digits = 10;
const byte num_pins   = 8;
const byte num_grounds= 4;
byte grounds[] = {3,2,1,0};                        // g1,g2,g3,g4
byte segments[]  = {9,6,13,12,11,8,7,4};      // A,B,C,D,E,F,G,P

byte num_to_display[]={0,0,0,0};

int led_nums[num_digits][num_pins]=
{
{1,1,1,1,1,1,0,0},      // 0
{0,1,1,0,0,0,0,0},      // 1
{1,1,0,1,1,0,1,0},      // 2
{1,1,1,1,0,0,1,0},      // 3
{0,1,1,0,0,1,1,0},      // 4
{1,0,1,1,0,1,1,0},      // 5
{1,0,1,1,1,1,1,0},      // 6
{1,1,1,0,0,0,0,0},      // 7
{1,1,1,1,1,1,1,0},      // 8
{1,1,1,1,0,1,1,0},      // 9
};

void setup()
{
int i;
for (i = 0;i < num_pins;i++)
{
pinMode(segments[i],OUTPUT);
if (i < num_grounds)
{
pinMode(grounds[i],OUTPUT);
digitalWrite(grounds[i],HIGH);
}
}

Timer1.initialize(550);
Timer1.attachInterrupt(updateDisplay);
}

void updateDisplay()
{
int g,d;

for (g = 0; g < num_grounds;g++)
{
for (d = 0;d < num_pins;d++) if(digitalRead(segments[d]) == 1) digitalWrite(segments[d], LOW);      // clear used
for (d = 0;d < num_pins;d++) digitalWrite(segments[d], (led_nums[num_to_display[g]][d] == 1) ? HIGH : LOW); //write segments
digitalWrite(grounds[g],HIGH);      // disable digit
}
}

void loop()
{
setDigits(1,2,3,4);
}

void setDigits(byte n1, byte n2, byte n3, byte n4)
{
num_to_display[0] = n1;
num_to_display[1] = n2;
num_to_display[2] = n3;
num_to_display[3] = n4;
}
``````

Hey guys, it doesn’t look like this was ever answered proper. I have a similar need:

I need to run 3 separate 8-segment LED displays independently. Meaning, 1) Stopwatch Timer 2) Temperature 3) Calculation

Is three of these overkill? Sparkfun 7-Segment Serial Display
sku: COM-09230

Can the Arduino handle all that?

Thanks!