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


int latchPin = 9;       // Пин «защелки» регистра подключен к ST_CP (SS) входу
int clockPin = 12;      // Пин подключен к SH_CP (CLK) входу 74HC595
int dataPin = 11;       // Пин подключен к DS входу 74HC595
int TimeLight = 5;      // Время для разгорания сегментов

byte SegDisplay;        // Переменная для вывода символа на индикатор
int RazrDisplay;        // Переменная для включения разрядов

// Настройка комбинации для отображения каждого номера
byte g_digits[12] = {
  B00111111, B00000110, // 0 1
  B01011011, B01001111, // 2 3
  B01100110, B01101101, // 4 5
  B01111101, B00000111, // 6 7
  B01111111, B01101111, // 8 9
  B00000000, B10000000  // все сегменты выключены, горит точка
};

// Массив разрядов
int g_registerArray[4] = {2, 3, 4, 5};

void setup() {
  // обозначаем все пины защелок как выходы
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);

  // настраиваем пины разрядов цифр как выходы
  // и гасим все разряды
  for (int i = 0; i < 4; i++) {
    pinMode(g_registerArray[i], OUTPUT);
    digitalWrite(g_registerArray[i], 1);
  }
}

void loop() {

  // Выводим одновременно четыре значения:
  // 1-й разряд = 0
  // 2-й разряд = 1
  // 3-й разряд = 2
  // 4-й разряд = 3

  for (int k = 0; k < 4; k++) {

    // получаем номер разряда
    RazrDisplay = g_registerArray[k];

    // получаем соответствующую цифру
    SegDisplay = g_digits[k];

    // выключаем все разряды
    for (int i = 0; i < 4; i++) {
      digitalWrite(g_registerArray[i], 1);
    }

    // записываем информацию в регистр
    digitalWrite(latchPin, LOW);

    shiftOut(dataPin, clockPin, MSBFIRST, SegDisplay);

    digitalWrite(latchPin, HIGH);

    // включаем нужный разряд
    digitalWrite(RazrDisplay, 0);

    // небольшая задержка
    delay(TimeLight);

    // выключаем разряд
    digitalWrite(RazrDisplay, 1);
  }


  // =================================================
  // МОЯ ДОБАВКА
  // После цифр показываем 4 символа: HELP
  // =================================================

  // H
  SegDisplay = B01110110;
  RazrDisplay = g_registerArray[0];

  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, SegDisplay);
  digitalWrite(latchPin, HIGH);
  digitalWrite(RazrDisplay, 0);
  delay(TimeLight);
  digitalWrite(RazrDisplay, 1);

  // E
  SegDisplay = B01111001;
  RazrDisplay = g_registerArray[1];

  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, SegDisplay);
  digitalWrite(latchPin, HIGH);
  digitalWrite(RazrDisplay, 0);
  delay(TimeLight);
  digitalWrite(RazrDisplay, 1);

  // L
  SegDisplay = B00111000;
  RazrDisplay = g_registerArray[2];

  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, SegDisplay);
  digitalWrite(latchPin, HIGH);
  digitalWrite(RazrDisplay, 0);
  delay(TimeLight);
  digitalWrite(RazrDisplay, 1);

  // P
  SegDisplay = B01110011;
  RazrDisplay = g_registerArray[3];

  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, SegDisplay);
  digitalWrite(latchPin, HIGH);
  digitalWrite(RazrDisplay, 0);
  delay(TimeLight);
  digitalWrite(RazrDisplay, 1);
}