Digital tube with Traffic Light Experiment
This lesson will use the 74HC595 shift register in combination with the red and green LEDs and the yellow LED to create a traffic light.

Component Required
1 x Uno R3
1 x 830 tie-points breadboard
1 x 1 Digit 7-Segment Display
10 X 220 ohm resistors
20 x M-M wire (Male to Male jumper wire)
1 x Red LED
1 x Yellow LED
1 x Green LED
Component Introduction
Seven segment display
Below is the seven-segment pin diagram.

0-9 ten digits correspond with each segment are as follows (the following table applies common cathode seven segment display device, if you are using a common anode, the table should be replaced every 1 0 0 should all replaced by 1):
Display
dp
a
b
c
d
e
f
g
digital
0
0
1
1
1
1
1
1
0
1
0
0
1
1
0
0
0
0
2
0
1
1
0
1
1
0
1
3
0
1
1
1
1
0
0
1
4
0
0
1
1
0
0
1
1
5
0
1
0
1
1
0
1
1
6
0
1
0
1
1
1
1
1
7
0
1
1
1
0
0
0
0
8
0
1
1
1
1
1
1
1
9
0
1
1
1
1
0
1
1
Connection Diagram:

Wiring schematic:

Physical wiring diagram:

int a = 7;
int b = 6;
int c = 5;
int d = 11;
int e = 10;
int f = 8;
int g = 9;
int ledG = 14;
int ledY = 15;
int ledR = 16;
//Display number 1
void digital_1(void)
{
  unsigned char j;
  digitalWrite(c, HIGH); //Lower the level of the digital 5 pin and light up segment c
  digitalWrite(b, HIGH); //Light section b
  for (j = 7; j <= 11; j++) //blanking
    digitalWrite(j, LOW);
}
//Display number 2
void digital_2(void)
{
  unsigned char j;
  digitalWrite(b, HIGH);
  digitalWrite(a, HIGH);
  for (j = 9; j <= 11; j++)
    digitalWrite(j, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(f, LOW);
}
//Display number 3
void digital_3(void)
{
  unsigned char j;
  digitalWrite(g, HIGH);
  digitalWrite(d, HIGH);
  for (j = 5; j <= 7; j++)
    digitalWrite(j, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(e, LOW);
}
//Display number 4
void digital_4(void)
{
  digitalWrite(c, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(a, LOW);
  digitalWrite(e, LOW);
  digitalWrite(d, LOW);
}
//Display number 5
void digital_5(void)
{
  unsigned char j;
  for (j = 7; j <= 9; j++)
    digitalWrite(j, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(e, LOW);
}
//Display number 6
void digital_6(void)
{
  unsigned char j;
  for (j = 7; j <= 11; j++)
    digitalWrite(j, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(b, LOW);
}
//Display number 7
void digital_7(void)
{
  unsigned char j;
  for (j = 5; j <= 7; j++)
    digitalWrite(j, HIGH);
  for (j = 8; j <= 11; j++)
    digitalWrite(j, LOW);
}
//Display number 8
void digital_8(void)
{
  unsigned char j;
  for (j = 5; j <= 11; j++)
    digitalWrite(j, HIGH);
}
//Display number 9
void digital_9(void)
{
  digitalWrite(c, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(a, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(d, HIGH);
}
//Pin setting and initialization
void setup()
{
  int i;//defined variable
  for (i = 5; i <= 16; i++)
    pinMode(i, OUTPUT); //Set pins 5 ~ 16 to output mode
}
void loop()
{
  while (1)
  {
    //red light
    digitalWrite(ledR, LOW);
    digitalWrite(ledY, HIGH);
    digitalWrite(ledG, HIGH);
    digital_9();  // Show 9
    delay(1000);   //Delay 1 s
    digital_8();  // Show 8
    delay(1000);   //Delay 1 s
    digital_7();  // Show 7
    delay(1000);   //Delay 1 s
    digital_6();  // Show 6
    delay(1000);   //Delay 1 s
    digital_5();  // Show 5
    delay(1000);   //Delay 1 s
    digital_4();  // Show 4
    delay(1000);   //Delay 1 s
    digital_3();  // Show 3
    delay(1000);   //Delay 1 s
    digital_2();  // Show 2
    delay(1000);   //Delay 1 s
    digital_1();  // Show 1
    delay(1000);   //Delay 1 s
    //green light
    digitalWrite(ledR, HIGH);
    digitalWrite(ledY, HIGH);
    digitalWrite(ledG, LOW);
    digital_9();  // Show 9
    delay(1000);   //Delay 1 s
    digital_8();  // Show 8
    delay(1000);   //Delay 1 s
    digital_7();  // Show 7
    delay(1000);   //Delay 1 s
    digital_6();  // Show 6
    delay(1000);   //Delay 1 s
    digital_5();  // Show 5
    delay(1000);   //Delay 1 s
    digital_4();  // Show 4
    delay(1000);   //Delay 1 s
    digital_3();  // Show 3
    delay(1000);   //Delay 1 s
    digital_2();  // Show 2
    delay(1000);   //Delay 1 s
    digital_1();  // Show 1
    delay(1000);   //Delay 1 s
    //yellow light
    digitalWrite(ledR, HIGH);
    digitalWrite(ledY, LOW);
    digitalWrite(ledG, HIGH);
    digital_3();  // Show 3
    delay(1000);   //Delay 1 s
    digital_2();  // Show 2
    delay(1000);   //Delay 1 s
    digital_1();  // Show 1
    delay(1000);   //Delay 1 s
  }
}Last updated
Was this helpful?