7 Segment Display
Parts:
Arduino Uno
7 Segment Display
330Ω Resistor
Assorted Wires
Breadboard
Wiring:
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.
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?