It just counts 0 to 9 with 7-segment LED. Only digit 1 side has been used since the digit 2 is burned out…
Adjust output pins for your environment. For simplicity, you need 7 pins for output in this example.
I am sure I can reduce the number of pins with demux. That’s gonna be the next project.
Parts: Arduino Duemilanove, Breadboard, a register and LTD-5523AB (Datasheet)
The LED-facing-upright LTD-5523AB pin-order is:
18, 17, 16, 15, 14, 13, 12, 11, 10pin
[------------LTD-5523AB------------]
| - A - | | - A - |
F B F B
| - G - | | - G - |
E C E C
| - D - | | - D - |
[------------LTD-5523AB------------]
01, 02, 03, 04, 05, 06, 07, 08, 09pin
[7-segment LED for digit 1]
A = 16pin, B = 15pin, C = 03pin, D = 02pin, E = 01pin, F = 18pin, DP = 04pin
14pin is common cathode for digit 1 (it means it should be GNDed all the time.)
For example, to make the digit 3, just turn on A, B, C, D and G.
[7segment.pde]
//Output Pins
//* Adjust this for your pin outputs.
int ledPin[8] = {4, 5, 6, 7, 9, 10, 11, 12};
//Segment to Pin
//* Adjust this for your 7 segment LED spec.
// A, B, C, D, E, F, G, DP
int Seg2Pin[8] = {11, 10, 5, 6, 7, 9, 12, 4};
//Digit to Segment
// * You don't need modify this unless you want to change digits.
int Dec2Seg[11] =
{
//A(125), B(64), C(32), D(16), E(8), F(4), G(2), DP(1)
0x07E, //Digit 0
0x00C, //Digit 1
0x0B6, //Digit 2
0x09E, //Digit 3
0x0CC, //Digit 4
0x0DA, //Digit 5
0x0FB, //Digit 6
0x00E, //Digit 7
0x0FF, //Digit 8
0x0DF, //Digit 9
0x100 //DP
};
void setup() // run once, when the sketch starts
{
for (int i = 0; i < 8; i++)
pinMode(ledPin[i], OUTPUT); // sets the digital pin as output
}
void clearAllSegments()
{
//Turn off all segments
for (int i = 0; i 0)
{
seg /= 2;
if (seg & 0x1)
digitalWrite(Seg2Pin[pin], HIGH); // sets the LED on
pin++;
}
}
void loop() // run over and over again
{
//Count 0 to 9
for( int digit = 0; digit <= 10; digit++)
{
drawDigit(digit);
delay(1000); // waits for a second
clearAllSegments();
}
}
Update 1: I change the 13pin to 9pin for output since 13pin has some builtin register.
Update 2: I implemented a bit mask to select segments.n