// Licznik 0-99 na dwóch wyświetlaczach 7-seg (common anode)
// sterowanych przez 74LS47 (BCD->7seg, active LOW)
// Multipleksowanie: ~100Hz (5ms na cyfrę)
const uint8_t PIN_A = 2;
const uint8_t PIN_B = 5;
const uint8_t PIN_C = 4;
const uint8_t PIN_D = 3;
const uint8_t DIGIT_1 = 7; // COM lewego wyświetlacza (dziesiątki)
const uint8_t DIGIT_2 = 6; // COM prawego wyświetlacza (jedności)
uint8_t counter = 0;
// Wystawia wartość BCD (0-9) na wejścia A B C D układu 74LS47
void setBCD(uint8_t value) {
digitalWrite(PIN_A, (value >> 0) & 1);
digitalWrite(PIN_B, (value >> 1) & 1);
digitalWrite(PIN_C, (value >> 2) & 1);
digitalWrite(PIN_D, (value >> 3) & 1);
}
void showNumber(uint8_t number) {
uint8_t tens = number / 10;
uint8_t ones = number % 10;
// --- Lewy wyświetlacz (dziesiątki) ---
digitalWrite(DIGIT_2, LOW); // wyłącz prawą (najpierw!)
setBCD(tens);
// tłumienie zera wiodącego: nie zapalaj lewego wyświetlacza dla 0
digitalWrite(DIGIT_1, tens > 0 ? HIGH : LOW);
delay(5);
// --- Prawy wyświetlacz (jedności) ---
digitalWrite(DIGIT_1, LOW); // wyłącz lewą (najpierw!)
setBCD(ones);
digitalWrite(DIGIT_2, HIGH); // włącz prawą
delay(5);
}
void setup() {
pinMode(PIN_A, OUTPUT);
pinMode(PIN_B, OUTPUT);
pinMode(PIN_C, OUTPUT);
pinMode(PIN_D, OUTPUT);
pinMode(DIGIT_1, OUTPUT);
pinMode(DIGIT_2, OUTPUT);
// Oba wyświetlacze wyłączone na starcie
digitalWrite(DIGIT_1, LOW);
digitalWrite(DIGIT_2, LOW);
}
void loop() {
// Multipleksuj przez ~0,5s (50 przebiegów * 10ms = 500ms)
for (uint8_t i = 0; i < 50; i++) {
showNumber(counter);
}
counter++;
if (counter > 99) counter = 0;
}