7 Segment Display

Parts:

  • Arduino Uno

  • 7 Segment Display

  • 330Ω Resistor

  • Assorted Wires

  • Breadboard

Wiring:

there are two different types depending on the polarity of the LEDs

If you do not know what kind you have use the common cathode wiring and if it does not work change your wiring to common anode.

Code:

#define A 8
#define B 7
#define C 6
#define D 5
#define E 4
#define F 3
#define G 2
#define DP 9 // decimal
int seg[] {A, B, C, D, E, F, G, DP}; // segment pins

byte Chars[10][9] {
  {'0', 1, 1, 1, 1, 1, 1, 0, 0}, //0
  {'1', 0, 1, 1, 0, 0, 0, 0, 0}, //1
  {'2', 1, 1, 0, 1, 1, 0, 1, 0}, //2
  {'3', 1, 1, 1, 1, 0, 0, 1, 0}, //3
  {'4', 0, 1, 1, 0, 0, 1, 1, 0}, //4
  {'5', 1, 0, 1, 1, 0, 1, 1, 0}, //5
  {'6', 1, 0, 1, 1, 1, 1, 1, 0}, //6
  {'7', 1, 1, 1, 0, 0, 0, 0, 0}, //7
  {'8', 1, 1, 1, 1, 1, 1, 1, 0}, //8
  {'9', 1, 1, 1, 1, 0, 1, 1, 0}, //9
};

void setup() {
  // set segment pins as OUTPUT
  pinMode(seg[0], OUTPUT);
  pinMode(seg[1], OUTPUT);
  pinMode(seg[2], OUTPUT);
  pinMode(seg[3], OUTPUT);
  pinMode(seg[4], OUTPUT);
  pinMode(seg[5], OUTPUT);
  pinMode(seg[6], OUTPUT);
  pinMode(seg[7], OUTPUT);
}

void Print(int num) // print any number on the segment
{
  //turn every segment off
  for (int i = 0; i <= 6; i++) {
    digitalWrite(seg[i], false);
  }

  if (num > 9 || num < 0 ) { // if the number is invalid blink the middle segment
    for (int i = 0; i <= 2; i++)
    {
      delay(100);
      //turn the middle segment on
      digitalWrite(seg[6], true);

      delay(100);
      //turn the middle segment off
      digitalWrite(seg[6], false);
    }
  } else // else if the number declared, print it
  {
    if (true) { //note if your display is common anode instead of common cathode change this to false.
      for (int i = 0; i < 8; i++)
      {
        digitalWrite(seg[i], Chars[num][i + 1]);
      }
    }
    else {
      for (int i = 0; i < 8; i++)
      {
        digitalWrite(seg[i], !Chars[num][i + 1]);
      }
    }
  }
}

void loop() {
  for (int i = 0; i <= 9; i++) //print
  {
    Print(i);
    delay(1000);
  }
}

Last updated

Was this helpful?