#include <Arduino.h>
// 74HC595 Pins (to STM32)
const int dataPin = 2; // DS (Pin 14)
const int latchPin = 3; // STCP (Pin 12)
const int clockPin = 4; // SHCP (Pin 11)
// Digit Selectors for 10 digits (Common Cathodes)
// DD:MM:YYYY HH:MM
const int dig[] = {9, 10, 11, 12, 15, A0, A1, A2, A3, A4};
// Common Cathode segment patterns (0-9)
const byte numTable[] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
int d=23, mo=1, y=2026, h=12, mi=0;
unsigned long lastTick = 0;
void setup() {
pinMode(dataPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
for(int i=0; i<10; i++) {
pinMode(dig[i], OUTPUT);
digitalWrite(dig[i], HIGH); // HIGH = OFF for Common Cathode
}
}
void sendSegments(byte pattern) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, pattern);
digitalWrite(latchPin, HIGH);
}
void displayDigit(int digitIdx, int value) {
// 1. Clear all digits
for(int i=0; i<10; i++) digitalWrite(dig[i], HIGH);
// 2. Load pattern into Shift Register
sendSegments(numTable[value]);
// 3. Activate current digit (Pull LOW to sink current)
digitalWrite(dig[digitIdx], LOW);
delayMicroseconds(800); // Short delay for persistence of vision
}
void loop() {
// Timing Logic
if (millis() - lastTick >= 1000) {
lastTick = millis();
// Simplified clock increment for demo
}
// Refresh DD:MM:YYYY
displayDigit(0, d/10); displayDigit(1, d%10);
displayDigit(2, mo/10); displayDigit(3, mo%10);
displayDigit(4, y/1000); displayDigit(5, (y/100)%10);
displayDigit(6, (y/10)%10);displayDigit(7, y%10);
// Refresh HH:MM
displayDigit(8, h/10); displayDigit(9, h%10);
displayDigit(10, mi/10); displayDigit(11, mi%10);
}Loading
st-nucleo-c031c6
st-nucleo-c031c6