int dataPin = 18;
int latchPin = 20;
int clockPin = 21;
int comPin[] = { 14, 15, 16, 17 }; // Common pins
// Define the characters 0-F (1 segment off 0 on)
byte num[] = {
0b11000000, // 0
0b11111001, // 1
0b10100100, // 2
0b10110000, // 3
0b10011001, // 4
0b10010010, // 5
0b10000010, // 6
0b11111000, // 7
0b10000000, // 8
0b10010000, // 9
0b10001000, // A
0b10000011, // B
0b10100111, // C
0b10100001, // D
0b10000110, // E
0b10001110, // F
};
void setup()
{ // set pins to output
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
for (int i = 0; i < 4; i++) {
pinMode(comPin[i], OUTPUT);
digitalWrite(comPin[i], HIGH);
}
}
void loop()
{
writeData(0xff);
selectDigitalDisplay(0);
for (int i = 0; i < 16; i++) {
writeData(num[i]);
delay(500);
}
for (int x = 0; x < 100; x++) {
for (int i = 0; i < 4; i++) {
selectDigitalDisplay(i);
writeData(num[i]);
delay(5);
writeData(0xff);
}
delay(5);
}
}
void selectDigitalDisplay(byte com)
{
for (int i = 0; i < 4; i++) {
digitalWrite(comPin[i], LOW);
}
digitalWrite(comPin[com], HIGH);
}
void writeData(int value)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, value);
digitalWrite(latchPin, HIGH);
}