7 Segment Display
Last updated
Was this helpful?
Last updated
Was this helpful?
Arduino Uno
7 Segment Display
330Ω Resistor
Assorted Wires
Breadboard
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.
Make sure to use a 330Ω resistor.
#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);
}
}
Make sure to use a 330Ω resistor.
#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 (false) { //note if your display is common cathode instead of common anode change this to true.
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);
}
}