I'm trying to implement a shift register(s) into my circuitry and program to control two seven segment LEDs that would count up from 00 - 99. So far I have a fairly straightforward code (at least, I think. It's my first time experimenting with creating my own void functions) that controls the 7 segs in this manner, but I end up using every single digital pin on my Uno. Here it is:
const int led1a = 13;
const int led1b = 12;
const int led1c = 11;
const int led1d = 10;
const int led1e = 9;
const int led1f = 8;
const int led1g = 7;
const int led2a = 6;
const int led2b = 5;
const int led2c = 4;
const int led2d = 3;
const int led2e = 2;
const int led2f = 1;
const int led2g = 0;
void setup() {
pinMode(led1a, OUTPUT);
pinMode(led1b, OUTPUT);
pinMode(led1c, OUTPUT);
pinMode(led1d, OUTPUT);
pinMode(led1e, OUTPUT);
pinMode(led1f, OUTPUT);
pinMode(led1g, OUTPUT);
pinMode(led2a, OUTPUT);
pinMode(led2b, OUTPUT);
pinMode(led2c, OUTPUT);
pinMode(led2d, OUTPUT);
pinMode(led2e, OUTPUT);
pinMode(led2f, OUTPUT);
pinMode(led2g, OUTPUT);
}
void loop () {
led1_0();
led2_run();
led1_1();
led2_run();
led1_2();
led2_run();
led1_3();
led2_run();
led1_4();
led2_run();
led1_5();
led2_run();
led1_6();
led2_run();
led1_7();
led2_run();
led1_8();
led2_run();
led1_9();
led2_run();
}
void led1_0() {
digitalWrite(led1a, HIGH);
digitalWrite(led1b, HIGH);
digitalWrite(led1c, HIGH);
digitalWrite(led1d, HIGH);
digitalWrite(led1e, HIGH);
digitalWrite(led1g, HIGH);
digitalWrite(led1f, LOW);
}
void led1_1() {
digitalWrite(led1a, LOW);
digitalWrite(led1b, HIGH);
digitalWrite(led1c, HIGH);
digitalWrite(led1d, LOW);
digitalWrite(led1e, LOW);
digitalWrite(led1f, LOW);
digitalWrite(led1g, LOW);
}
void led1_2() {
digitalWrite(led1a, HIGH);
digitalWrite(led1b, HIGH);
digitalWrite(led1f, HIGH);
digitalWrite(led1e, HIGH);
digitalWrite(led1d, HIGH);
digitalWrite(led1c, LOW);
digitalWrite(led1g, LOW);
}
void led1_3() {
digitalWrite(led1a, HIGH);
digitalWrite(led1b, HIGH);
digitalWrite(led1c, HIGH);
digitalWrite(led1d, HIGH);
digitalWrite(led1f, HIGH);
digitalWrite(led1e, LOW);
digitalWrite(led1g, LOW);
}
void led1_4() {
digitalWrite(led1a, LOW);
digitalWrite(led1b, HIGH);
digitalWrite(led1c, HIGH);
digitalWrite(led1f, HIGH);
digitalWrite(led1g, HIGH);
digitalWrite(led1e, LOW);
digitalWrite(led1d, LOW);
}
void led1_5() {
digitalWrite(led1a, HIGH);
digitalWrite(led1f, HIGH);
digitalWrite(led1g, HIGH);
digitalWrite(led1c, HIGH);
digitalWrite(led1d, HIGH);
digitalWrite(led1b, LOW);
digitalWrite(led1e, LOW);
}
void led1_6() {
digitalWrite(led1a, HIGH);
digitalWrite(led1g, HIGH);
digitalWrite(led1f, HIGH);
digitalWrite(led1c, HIGH);
digitalWrite(led1d, HIGH);
digitalWrite(led1e, HIGH);
digitalWrite(led1b, LOW);
}
void led1_7() {
digitalWrite(led1a, HIGH);
digitalWrite(led1b, HIGH);
digitalWrite(led1c, HIGH);
digitalWrite(led1d, LOW);
digitalWrite(led1e, LOW);
digitalWrite(led1f, LOW);
digitalWrite(led1g, LOW);
}
void led1_8() {
digitalWrite(led1a, HIGH);
digitalWrite(led1b, HIGH);
digitalWrite(led1c, HIGH);
digitalWrite(led1d, HIGH);
digitalWrite(led1e, HIGH);
digitalWrite(led1f, HIGH);
digitalWrite(led1g, HIGH);
}
void led1_9() {
digitalWrite(led1a, HIGH);
digitalWrite(led1b, HIGH);
digitalWrite(led1c, HIGH);
digitalWrite(led1d, HIGH);
digitalWrite(led1g, HIGH);
digitalWrite(led1f, HIGH);
digitalWrite(led1e, LOW);
}
void led2_0() {
digitalWrite(led2a, HIGH);
digitalWrite(led2b, HIGH);
digitalWrite(led2c, HIGH);
digitalWrite(led2d, HIGH);
digitalWrite(led2e, HIGH);
digitalWrite(led2g, HIGH);
digitalWrite(led2f, LOW);
}
void led2_1() {
digitalWrite(led2a, LOW);
digitalWrite(led2b, HIGH);
digitalWrite(led2c, HIGH);
digitalWrite(led2d, LOW);
digitalWrite(led2e, LOW);
digitalWrite(led2f, LOW);
digitalWrite(led2g, LOW);
}
void led2_2() {
digitalWrite(led2a, HIGH);
digitalWrite(led2b, HIGH);
digitalWrite(led2f, HIGH);
digitalWrite(led2e, HIGH);
digitalWrite(led2d, HIGH);
digitalWrite(led2c, LOW);
digitalWrite(led2g, LOW);
}
void led2_3() {
digitalWrite(led2a, HIGH);
digitalWrite(led2b, HIGH);
digitalWrite(led2c, HIGH);
digitalWrite(led2d, HIGH);
digitalWrite(led2f, HIGH);
digitalWrite(led2e, LOW);
digitalWrite(led2g, LOW);
}
void led2_4() {
digitalWrite(led2a, LOW);
digitalWrite(led2b, HIGH);
digitalWrite(led2c, HIGH);
digitalWrite(led2f, HIGH);
digitalWrite(led2g, HIGH);
digitalWrite(led2e, LOW);
digitalWrite(led2d, LOW);
}
void led2_5() {
digitalWrite(led2a, HIGH);
digitalWrite(led2f, HIGH);
digitalWrite(led2g, HIGH);
digitalWrite(led2c, HIGH);
digitalWrite(led2d, HIGH);
digitalWrite(led2b, LOW);
digitalWrite(led2e, LOW);
}
void led2_6() {
digitalWrite(led2a, HIGH);
digitalWrite(led2g, HIGH);
digitalWrite(led2f, HIGH);
digitalWrite(led2c, HIGH);
digitalWrite(led2d, HIGH);
digitalWrite(led2e, HIGH);
digitalWrite(led2b, LOW);
}
void led2_7() {
digitalWrite(led2a, HIGH);
digitalWrite(led2b, HIGH);
digitalWrite(led2c, HIGH);
digitalWrite(led2d, LOW);
digitalWrite(led2e, LOW);
digitalWrite(led2f, LOW);
digitalWrite(led2g, LOW);
}
void led2_8() {
digitalWrite(led2a, HIGH);
digitalWrite(led2b, HIGH);
digitalWrite(led2c, HIGH);
digitalWrite(led2d, HIGH);
digitalWrite(led2e, HIGH);
digitalWrite(led2f, HIGH);
digitalWrite(led2g, HIGH);
}
void led2_9() {
digitalWrite(led2a, HIGH);
digitalWrite(led2b, HIGH);
digitalWrite(led2c, HIGH);
digitalWrite(led2d, HIGH);
digitalWrite(led2g, HIGH);
digitalWrite(led2f, HIGH);
digitalWrite(led2e, LOW);
}
void led2_run() {
led2_0();
delay(1000);
led2_1();
delay(1000);
led2_2();
delay(1000);
led2_3();
delay(1000);
led2_4();
delay(1000);
led2_5();
delay(1000);
led2_6();
delay(1000);
led2_7();
delay(1000);
led2_8();
delay(1000);
led2_9();
delay(1000);
}
So how would I reduce the amount of pins used while still keeping functionality? I have two 74HC595N shift registers at my disposal.
Thanks!