Controlling a Seven-Segment Display Using Arduino Part 2
This month’s project is a simple program to display the Arabic numbers using the Arduino and a 7-segment display.
Parts list:
- Arduino Duemilanove
- 7-Segment Display
(I got the grab bag, with 50 displays
for $10.95) - Breadboard

- Mini Push Button Switch
- Jumper Wire
The 7-segment display used in this example is a common anode display with pin connections as shown in the picture, and the Arduino sketches were written so as to light up a segment when the corresponding pin is LOW.
The first of a series of three simple sketches cycles through the numbers from 0 to 9, resets the display to show a “0″ once it reaches “9″ and repeats until the power is turned off on the Arduino. The code below accomplishes this in a very simplified manner, as each digit is formed by a separate function that sequentially lights up each of the necessary segments to display that number.
The third sketch in this sequence will use individual bits to represent each segment and will require less written code, a good thing to keep in mind when programming microcontrollers, as they have a small memory footprint (the Arduino Duemilanove has 32K bytes of program memory).
Sketch #1:
// www.TheElectronicsHobbyist.com/blog
// Natalia Fargasch Norman
// Seven-segment LED Display
// Common Anode pins 3 and 8
// G F + A B
// | | | | | -> pins and segments they control
// ---------
// F| A |B
// |---G---| -> segments
// E| D |C
// ---------
// | | | | | -> pins and segments they control
// E D + C DP
// Segments that make each number when lit:
// 0 => ABCDEF
// 1 => BC
// 2 => ABDEG
// 3 => ABCDG
// 4 => BCFG
// 5 => ACDFG
// 6 => ACDEFG
// 7 => ABC
// 8 => ABCDEFG
// 9 => ABCDFG
// Arduino digital pins used to light up
// corresponding segments on the LED display
#define A 2
#define B 3
#define C 4
#define D 5
#define E 6
#define F 7
#define G 8
// Common anode;
// on when pin is low
// and off when pin is high
#define ON LOW
#define OFF HIGH
int ms = 1000;
void setup() {
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
}
void loop() {
zero();
one();
two();
three();
four();
five();
six();
seven();
eight();
nine();
}
// 0 => ABCDEF
void zero() {
digitalWrite(A, ON);
digitalWrite(B, ON);
digitalWrite(C, ON);
digitalWrite(D, ON);
digitalWrite(E, ON);
digitalWrite(F, ON);
digitalWrite(G, OFF);
delay(ms);
}
// 1 => BC
void one() {
digitalWrite(A, OFF);
digitalWrite(B, ON);
digitalWrite(C, ON);
digitalWrite(D, OFF);
digitalWrite(E, OFF);
digitalWrite(F, OFF);
digitalWrite(G, OFF);
delay(ms);
}
// 2 => ABDEG
void two() {
digitalWrite(A, ON);
digitalWrite(B, ON);
digitalWrite(C, OFF);
digitalWrite(D, ON);
digitalWrite(E, ON);
digitalWrite(F, OFF);
digitalWrite(G, ON);
delay(ms);
}
// 3 => ABCDG
void three() {
digitalWrite(A, ON);
digitalWrite(B, ON);
digitalWrite(C, ON);
digitalWrite(D, ON);
digitalWrite(E, OFF);
digitalWrite(F, OFF);
digitalWrite(G, ON);
delay(ms);
}
// 4 => BCFG
void four() {
digitalWrite(A, OFF);
digitalWrite(B, ON);
digitalWrite(C, ON);
digitalWrite(D, OFF);
digitalWrite(E, OFF);
digitalWrite(F, ON);
digitalWrite(G, ON);
delay(ms);
}
// 5 => ACDFG
void five() {
digitalWrite(A, ON);
digitalWrite(B, OFF);
digitalWrite(C, ON);
digitalWrite(D, ON);
digitalWrite(E, OFF);
digitalWrite(F, ON);
digitalWrite(G, ON);
delay(ms);
}
// 6 => ACDEFG
void six() {
digitalWrite(A, ON);
digitalWrite(B, OFF);
digitalWrite(C, ON);
digitalWrite(D, ON);
digitalWrite(E, ON);
digitalWrite(F, ON);
digitalWrite(G, ON);
delay(ms);
}
// 7 => ABC
void seven() {
digitalWrite(A, ON);
digitalWrite(B, ON);
digitalWrite(C, ON);
digitalWrite(D, OFF);
digitalWrite(E, OFF);
digitalWrite(F, OFF);
digitalWrite(G, OFF);
delay(ms);
}
// 8 => ABCDEFG
void eight() {
digitalWrite(A, ON);
digitalWrite(B, ON);
digitalWrite(C, ON);
digitalWrite(D, ON);
digitalWrite(E, ON);
digitalWrite(F, ON);
digitalWrite(G, ON);
delay(ms);
}
// 9 => ABCDFG
void nine() {
digitalWrite(A, ON);
digitalWrite(B, ON);
digitalWrite(C, ON);
digitalWrite(D, ON);
digitalWrite(E, OFF);
digitalWrite(F, ON);
digitalWrite(G, ON);
delay(ms);
}
You might also enjoy:
- Controlling a Seven-Segment Display Using Arduino Part 3
- Controlling a Seven-Segment Display Using Arduino Part 4
- Arduino 2-Digit 7-Segment Display with Buttons
- Arduino 2-Digit 7-Segment Display Counter










Here is another sketch to show the position of a 10k potentiometer in the Arduino analog pin 0 in 0-9 digits in a 7-segments display.
/*
potDigital
Mostra a posição de um potenciometro no mostrador de 7 segmentos
by João Alexandre da Silveira
http://www.OrdemNatural.Com
16 junho 2010
*/
#define pausa delay(1000) //define uma pausa de 1 segundo
int digito0[7]={1,1,1,1,1,1,0}; //matriz dos segmentos do digito 0
int digito1[7]={0,1,1,0,0,0,0}; //digito 1
int digito2[7]={1,1,0,1,1,0,1}; //digito 2
int digito3[7]={1,1,1,1,0,0,1}; //digito 3
int digito4[7]={0,1,1,0,0,1,1}; //digito 4
int digito5[7]={1,0,1,1,0,1,1}; //digito 5
int digito6[7]={1,0,1,1,1,1,1}; //digito 6
int digito7[7]={1,1,1,0,0,0,0}; //digito 7
int digito8[7]={1,1,1,1,1,1,1}; //digito 8
int digito9[7]={1,1,1,1,0,1,1}; //digito 9
int pinoUSADO[7]={2,3,4,5,6,7,8}; //matriz dos pinos usados no Arduino
int i=0; //contador para a estrutura ‘for’
int potPin=0; //potenciometro no pino 0
int conversor; //
void setup(){
for(i=0; i<7; i++){
pinMode(pinoUSADO[i],OUTPUT); //configura cada pino usado como saida
}
}
void loop(){
conversor=analogRead(potPin)/100; //converte a entrada 0-1024 para a faixa 0-10
switch (conversor) {
case 0:
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito0[i]); //acende o digito 0
}
break;
case 1:
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito1[i]); //digito 1
}
break;
case 2:
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito2[i]); //digito 2
}
break;
case 3:
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito3[i]); //digito 3
}
break;
case 4:
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito4[i]); //digito 4
}
break;
case 5:
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito5[i]); //digito 5
}
break;
case 6:
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito6[i]); //digito 6
}
break;
case 7:
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito7[i]); //digito 7
}
break;
case 8:
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito8[i]); //digito 8
}
break;
case 9:
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito9[i]); //digito 9
}
break;
}
}
I’m originally from Brazil, too, Joao. Thanks for your input. Also, check out the final version I wrote where the segment array for each digit is bit packed and is unpacked using the bitRead function to light each segment. It just makes for shorter code and uses less memory. You can check it out here:
http://www.theelectronicshobbyist.com/blog/2010/02/controlling-a-seven-segment-display-using-arduino-part-4-of-4/
I write a new version of this sketch for a common catode dispay. The comments are in portuguese, I am from Brazil. Here it:
/*
Digitos0a9
Mostra a cada segundo os digitos 0 a 9 no mostrador de 7 segmentos
*/
#define pausa delay(1000) //define uma pausa de 1 segundo
int digito0[7]={1,1,1,1,1,1,0}; //matriz dos segmentos do digito 0
int digito1[7]={0,1,1,0,0,0,0}; //digito 1
int digito2[7]={1,1,0,1,1,0,1}; //digito 2
int digito3[7]={1,1,1,1,0,0,1}; //digito 3
int digito4[7]={0,1,1,0,0,1,1}; //digito 4
int digito5[7]={1,0,1,1,0,1,1}; //digito 5
int digito6[7]={1,0,1,1,1,1,1}; //digito 6
int digito7[7]={1,1,1,0,0,0,0}; //digito 7
int digito8[7]={1,1,1,1,1,1,1}; //digito 8
int digito9[7]={1,1,1,1,0,1,1}; //digito 9
int pinoUSADO[7]={2,3,4,5,6,7,8}; //matriz dos pinos usados no Arduino
int i=0; //contador para a estrutura ‘for’
void setup(){
for(i=0; i<7; i++){
pinMode(pinoUSADO[i],OUTPUT); //configura cada pino usado como saida
}
}
void loop(){
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito0[i]); //acende o digito 0
}
pausa;
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito1[i]); //digito 1
}
pausa;
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito2[i]); //digito 2
}
pausa;
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito3[i]); //digito 3
}
pausa;
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito4[i]); //digito 4
}
pausa;
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito5[i]); //digito 5
}
pausa;
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito6[i]); //digito 6
}
pausa;
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito7[i]); //digito 7
}
pausa;
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito8[i]); //digito 8
}
pausa;
for (i=0; i<7; i++){
digitalWrite(pinoUSADO[i],digito9[i]); //digito 9
}
pausa;
}