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