#define DS_PIN 15
#define OE_PIN 2
#define STCP_PIN 4
#define SHCP_PIN 5
#define MR_PIN 18
byte segmentData[] = {
//DPGFABEDC
0b01000000, // 0
0b01110110, // 1
0b00100001, // 2
0b00100100, // 3
0b00010110, // 4
0b00001100, // 5
0b00001000, // 6
0b01100110, // 7
0b00000000, // 8
0b00000110 // 9
};
void setup() {
pinMode(DS_PIN, OUTPUT);
pinMode(OE_PIN, OUTPUT);
pinMode(STCP_PIN, OUTPUT);
pinMode(SHCP_PIN, OUTPUT);
pinMode(MR_PIN, OUTPUT);
// Initialize other setup if needed
}
void writeData(byte data) {
for (int i = 0; i < 8; i++) {
digitalWrite(DS_PIN, (data >> i) & 1);
digitalWrite(SHCP_PIN, HIGH);
digitalWrite(SHCP_PIN, LOW);
}
}
void latchData() {
digitalWrite(STCP_PIN, HIGH);
digitalWrite(STCP_PIN, LOW);
}
void enableOutput() {
digitalWrite(OE_PIN, LOW);
}
void disableOutput() {
digitalWrite(OE_PIN, HIGH);
}
void resetShiftRegister() {
digitalWrite(MR_PIN, LOW);
digitalWrite(MR_PIN, HIGH);
}
void displayNumber(byte number) {
writeData(segmentData[number]);
latchData();
}
void loop() {
resetShiftRegister();
enableOutput();
// Display a number, e.g., 3
displayNumber(0);
delay(500);
displayNumber(9);
delay(500);
displayNumber(6);
delay(500);
displayNumber(1);
delay(500);
displayNumber(8);
delay(500);
displayNumber(2);
delay(500);
displayNumber(5);
delay(500);
displayNumber(9);
delay(500);
displayNumber(3);
delay(500);
displayNumber(8);
delay(500);
displayNumber(9);
delay(500);
// You can add more displayNumber() calls here to display other numbers
while (true) {
// Main loop where the numbers are displayed statically
// No blinking or changing of numbers here
}
}