/* тестирование 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);
}
}
}