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


/* тестирование LED индикатора
   74HC595 Map:
   
   Q1  1  * 16  Vcc    PINS 1-7,15  Q0-Q7  Output Pins
   Q2  2  15     Q0
   Q3  3  14     DS
   Q4  4  13     OE
   Q5  5  12     ST_CP (SS)
   Q6  6  11     SH_CP (CLK)
   Q7  7  10     MR
   GND 8   9     Q7'
   
   PIN 8  GND
   PIN 9  Q7'  Serial Out
   PIN 10 MR   Master Reclear, active high
   PIN 11 SH_CP clock pin
   PIN 12 ST_CP Storage reg. clock
   PIN 13 OE   Output enable, active low
   PIN 14 DS   Serial data input
   PIN 16 Vcc  Positive supply voltage
*/

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

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   // все сегменты выключены, горит точка
};

// Массив цифр, указывающий пины разрядов цифр (катоды LED)
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() {
  // вложенный цикл:
  // k — разряд цифры, i — формируемая цифра
  for (int k = 0; k <= 3; k++) {

    for (int i = 0; i <= 11; i++) {

      // получаем цифру и выводим символ из массива цифр
      SegDisplay = g_digits[i];

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

      // устанавливаем синхронизацию «защелки» на LOW
      digitalWrite(latchPin, LOW);

      // записываем информацию в регистр
      shiftOut(dataPin, clockPin, MSBFIRST, SegDisplay);

      // «защелкиваем» регистр
      digitalWrite(latchPin, HIGH);

      // включаем цифру в заданном разряде
      digitalWrite(RazrDisplay, 0);

      // пауза, чтобы сегменты «разгорелись»
      delay(TimeLight);

      // гасим цифру
      digitalWrite(RazrDisplay, 1);
    }
  }
}