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 2. Study 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 3. Run the simulation and check the correct operation of the circuit
Step 4. Suggested 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?