#define BUTTON A0
int pins[8] = {2, 3, 4, 5, 6, 7, 8, 9};
byte numbers[10] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66,
0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
int number = 0;
int number1 = 0;
int number2 = 0;
int pinDigits[4] = {10, 11, 12, 13};
unsigned long millis1 = 0;
bool mode = false;
bool curButton = LOW;
bool prevButton = LOW;
void setup() {
pinMode(BUTTON, INPUT);
for (int i = 0; i < 8; i++)
pinMode(pins[i], OUTPUT);
for (int i = 0; i < 4; i++) {
pinMode(pinDigits[i], OUTPUT);
digitalWrite(pinDigits[i], HIGH);
}
}
void loop() {
curButton = debounce(prevButton);
if (prevButton == LOW && curButton == HIGH) {
mode = !mode;
if (mode)
number = 0;
}
prevButton = curButton;
if (millis() - millis1 >= 100 && mode) {
millis1 += 100;
number++;
if (number == 10000)
number = 0;
}
// Мультиплексирование
for (int i = 0; i < 4; i++) {
// Выключаем все разряды
for (int j = 0; j < 4; j++)
digitalWrite(pinDigits[j], HIGH);
// Получаем цифру нужного разряда
switch (i) {
case 0:
number2 = number % 10;
break;
case 1:
number2 = (number / 10) % 10;
break;
case 2:
number2 = (number / 100) % 10;
break;
case 3:
number2 = (number / 1000) % 10;
break;
}
showNumber(number2, i);
// Включаем текущий разряд
digitalWrite(pinDigits[i], LOW);
delay(1);
}
}
void showNumber(int num, int dig) {
for (int i = 0; i < 8; i++) {
if (bitRead(numbers[num], i) == HIGH)
digitalWrite(pins[i], HIGH);
else
digitalWrite(pins[i], LOW);
}
if (dig == 1)
digitalWrite(pins[7], LOW);
}
bool debounce(bool last) {
bool current = digitalRead(BUTTON);
if (last != current) {
delay(5);
current = digitalRead(BUTTON);
}
return current;
}