Activity 3. Seven segment display

This activity utilizes Arduino Uno output pins to drive a seven segment display.  (50 minutes)



Activity 3

The seven segment display counts from 0 to 9, increasing the number every second.

Step 1. Draw the circuit in Tinkercad. A seven segment display is connected to the Arduino Uno.



Step 2Study and complete the code. Then, write it on the microcontroller:

/* Seven segment display

Circuit Connections:
Seven segment common Cathode = > Gnd
PIN_0 => Resistor 220Ω => Segment a
PIN_1 => Resistor 220Ω => Segment b
PIN_2 => Resistor 220Ω => Segment c
PIN_3 => Resistor 220Ω => Segment f
PIN_4 => Resistor 220Ω => Segment g
PIN_5 => Resistor 220Ω => Segment d
PIN_6 => Resistor 220Ω => Segment e
*/

#define A_pin 0          //give the name “A_pin” to PIN_0
#define B_pin 1          //give the name “B_pin” to PIN_1
#define C_pin 2          //give the name “C_pin” to PIN_2
#define D_pin 5          //give the name “D_pin” to PIN_5
#define E_pin 6          //give the name “E_pin” to PIN_6
#define F_pin 3           //give the name “F_pin” to PIN_3
#define G_pin 4          //give the name “G_pin” to PIN_4

//The setup() function initializes and sets the initial values
//It will only run once after each powerup or reset
void setup() {
  pinMode(A_pin, OUTPUT);  //Configure the PIN_0 to behave as output
  pinMode(B_pin, OUTPUT);  //Configure the PIN_1 to behave as output
  pinMode(C_pin, OUTPUT);  //Configure the PIN_2 to behave as output
  pinMode(D_pin, OUTPUT);  //Configure the PIN_5 to behave as output
  pinMode(E_pin, OUTPUT);  //Configure the PIN_6 to behave as output
  pinMode(F_pin, OUTPUT);  //Configure the PIN_3 to behave as output
  pinMode(G_pin, OUTPUT);  //Configure the PIN_4 to behave as output
}

//This function loops consecutively
void loop() {
  for (int i=0; i<10; i++){
    sevenSegment(i);
   //call the function and pass a number from 0 to 9
    delay(1000);                          //wait for 1 second
  }   
}

//This function activates and deactivates the segments
//so the numbers appear on the display
void sevenSegment (int selection){
  switch(selection){
  case 0:
  /* display 0
         -
       |  |
       |  |
         -
    */
      digitalWrite(A_pin, HIGH);              //activate segment A
      digitalWrite(B_pin, HIGH);               //activate segment B
      digitalWrite(C_pin, HIGH);              //activate segment C
      digitalWrite(D_pin, HIGH);              //activate segment D
      digitalWrite(E_pin, HIGH);               //activate segment E
      digitalWrite(F_pin, HIGH);               //activate segment F
      digitalWrite(G_pin, LOW);               //deactivate segment G
      break;
   
  case 1:
 /* display 1
     
         |
         |
       
    */
      digitalWrite(A_pin, LOW);                //deactivate segment A
      digitalWrite(B_pin, HIGH);               //activate segment B
      digitalWrite(C_pin, HIGH);              //activate segment C
      digitalWrite(D_pin, LOW);                //deactivate segment D
      digitalWrite(E_pin, LOW);                //deactivate segment E
      digitalWrite(F_pin, LOW);                //deactivate segment F
      digitalWrite(G_pin, LOW);               //deactivate segment G
      break;
   
  case 2:
  /* display 2
        -
         |
        -
       |
        -
    */
      digitalWrite(A_pin, HIGH);              //activate segment A
      digitalWrite(B_pin, HIGH);              
//activate segment B
      digitalWrite(C_pin, LOW);  
             //deactivate segment C
      digitalWrite(D_pin, HIGH);             
//activate segment D
      digitalWrite(E_pin, HIGH);               //activate segment E
      digitalWrite(F_pin, LOW);               
//deactivate segment F
      digitalWrite(G_pin, HIGH);             
//activate segment G
      break;
   
  case 3:
  /* display 3
        -
         |
        -
         |
        -
    */
      digitalWrite(A_pin, HIGH);              //activate segment A
      digitalWrite(B_pin, HIGH);              
//activate segment B
      digitalWrite(C_pin, HIGH);             
//activate segment C
      digitalWrite(D_pin, HIGH);             
//activate segment D
      digitalWrite(E_pin, LOW);               
//deactivate segment E
      digitalWrite(F_pin, LOW);               
//deactivate segment F
      digitalWrite(G_pin, HIGH);             
//activate segment G
      break;
   
  case 4:
  /* display 4
     
       | |
         -
         |
       
    */
      digitalWrite(A_pin, LOW);                //deactivate segment A
      digitalWrite(B_pin, HIGH);              
//activate segment B
      digitalWrite(C_pin, HIGH);             
//activate segment C
      digitalWrite(D_pin, LOW);
               //deactivate segment D
      digitalWrite(E_pin, LOW);               
//deactivate segment E
      digitalWrite(F_pin, HIGH);             
  //activate segment F
      digitalWrite(G_pin, HIGH);             
//activate segment G
      break;
   
  case 5:
  /* display 5
        -
       |
        -
         |
        -
    */
      digitalWrite(A_pin, HIGH);              //activate segment A
      digitalWrite(B_pin, LOW);               
//deactivate segment B
      digitalWrite(C_pin, HIGH);             
//activate segment C
      digitalWrite(D_pin, HIGH);             
//activate segment D
      digitalWrite(E_pin, LOW);               
//deactivate segment E
      digitalWrite(F_pin, HIGH);              
//activate segment F
      digitalWrite(G_pin, HIGH);             
//activate segment G             
      break;
   
  case 6:
  /* display 6
     
       |
        -
       |  |
        -
    */
      digitalWrite(A_pin, LOW);                //deactivate segment A
      digitalWrite(B_pin, LOW);               
//deactivate segment B
      digitalWrite(C_pin, HIGH);             
//activate segment C
      digitalWrite(D_pin, HIGH);             
//activate segment D
      digitalWrite(E_pin, HIGH);              
//activate segment E
      digitalWrite(F_pin, HIGH);                
//activate segment F
      digitalWrite(G_pin, HIGH);             
//activate segment G
      break;
   
  case 7:
  /* display 7
       _
         |
         |
       
    */
      digitalWrite(A_pin, HIGH);              //activate segment A
      digitalWrite(B_pin, HIGH);              
//activate segment B
      digitalWrite(C_pin, HIGH);             
//activate segment C
      digitalWrite(D_pin, LOW);               
//deactivate segment D
      digitalWrite(E_pin, LOW);               
//deactivate segment E
      digitalWrite(F_pin, LOW);               
//deactivate segment F
      digitalWrite(G_pin, LOW);              
//deactivate segment G
      break;
   
  case 8:
  /* display 8
         -
       |  |
         -
       |  |
         -
    */
      digitalWrite(A_pin, HIGH);              //activate segment A
      digitalWrite(B_pin, HIGH);               //activate segment B
      digitalWrite(C_pin, HIGH);              //activate segment C
      digitalWrite(D_pin, HIGH);             
//activate segment D
      digitalWrite(E_pin, HIGH);               //activate segment E
      digitalWrite(F_pin, HIGH);               //activate segment F
      digitalWrite(G_pin, HIGH);              //activate segment G
      break;
   
  case 9:
  /* display 9
          -
       |  |
          -
          |
        
    */
      digitalWrite(A_pin, HIGH);              //activate segment A
      digitalWrite(B_pin, HIGH);              
//activate segment B
      digitalWrite(C_pin, HIGH);              //activate segment C
      digitalWrite(D_pin, LOW);               
//deactivate segment D
      digitalWrite(E_pin, LOW);                 
//deactivate segment E
      digitalWrite(F_pin, HIGH);              
//activate segment F
      digitalWrite(G_pin, HIGH);             
//activate segment G
      break;
  }
}



Step 3Run the simulation and check the correct operation of the circuit


Step 4Suggested modifications and discussion:

Can the same code work with a common anode seven segment display?

If the numbers change every 10ms, what will be displayed?