Загрузка данных


#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;
}