const int dataPin = 13; // DS 74HC595
const int latchPin = 12; // STCP 74HC595
const int clockPin = 11; // SHCP 74HC595
const int buttonPin = 10; // Кнопка
// Биты: Q0=a, Q1=b, Q2=c, Q3=d,
// Q4=e, Q5=f, Q6=g, Q7=DP
// Индикатор с общим анодом: LOW включает сегмент.
const byte digits[10] = {
0b11000000, // 0
0b11111001, // 1
0b10100100, // 2
0b10110000, // 3
0b10011001, // 4
0b10010010, // 5
0b10000010, // 6
0b11111000, // 7
0b10000000, // 8
0b10010000 // 9
};
int number = 0;
int lastButtonState = HIGH;
unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 40;
void showDigit(int n) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, digits[n]);
digitalWrite(latchPin, HIGH);
}
void setup() {
pinMode(dataPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
showDigit(number);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if (millis() - lastDebounceTime > debounceDelay) {
static int buttonState = HIGH;
if (reading != buttonState) {
buttonState = reading;
// Считаем только нажатие кнопки
if (buttonState == LOW) {
number = (number + 1) % 10;
showDigit(number);
}
}
}
lastButtonState = reading;
}