This example shows how to drive a seven segment display, this is the most basic example in which we use various digital pins as outputs, 7 in this case. In a later example we will show how to reduce the pins used by using additional components
I did not connect the digital point in this example but if you wish you could do.
Here are some diagrams of the display showing segments and their pinouts. We are using the common anode example.
Using a common anode display, if a segment is driven low (0v) it will light, if you had a common cathode display the opposite would be true and you would have to drive the segment high. Very important to remember this, always refer to the datasheet of the display.
Using this information we will use the following pin connections
Segment | Display Pin | Arduino Pin |
A | 10 | D3 |
B | 9 | D4 |
C | 8 | D5 |
D | 5 | D6 |
E | 4 | D7 |
F | 2 | D8 |
G | 3 | D9 |
DP | 7 | Not connected |
So if we desired to display the number 1 on our display we would need to set D7 and D8 low, thats F and E. Likewise if wish the number 8 all segments must be driven low.
Here is a picture of our setup, note we used multi colored patch cables, this made life a lot easier in the wiring part than one color. The display underneath is a common cathode type
Schematic
Code
In the code example we have worked out the pins that need to be set to low to light the segment and display the number required
int number = 0;
void all_off() // function to turn off all the segments
{
for (int i = 3; i <= 9; i++)
{
digitalWrite(i, HIGH);
}
}
void setup()
{
for (int i = 3; i <= 9; i++) // set pins 0-7 as outputs
{
pinMode(i, OUTPUT);
}
}
void loop()
{
for(number = 0; number <=9; number++)
{
displaydigit(number);
delay(1000);
all_off();
delay(10); // wait for a second
}
}
void displaydigit(int digit)
{
switch (digit)
{
case 0: digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
break;
case 1: digitalWrite(7, LOW);
digitalWrite(8, LOW);
break;
case 2: digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(9, LOW);
break;
case 3: digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(9, LOW);
break;
case 4: digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
break;
case 5: digitalWrite(3, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
break;
case 6: digitalWrite(3, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
break;
case 7: digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
break;
case 8: digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
break;
case 9: digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
break;
default: all_off();
break;
}
}
Links
7 segment LED display at Amazon US
7 segment LED display at Amazon UK