Подключаем сдвиговый регистр 74hc595 Ардуино

Сдвиговый регистр 74hc595 Ардуино

Сдвиговый регистр 74hc595 Arduino ► рассмотрим на нескольких примерах, как использовать 74hc595 для подключения светодиодов и семисегментного индикатора Ардуино

Сдвиговый регистр 74hc595 Arduino используется для управления семисегментного индикатора и светодиодами. Назначение у сдвиговых регистров велик, один из самых популярных способов применения — умножение выходов Arduino (занимаем 3 пина, а получаем 8). Рассмотрим на примерах с программами и схемами, как использовать 74hc595 для подключения светодиодов и семисегментного индикатора 5161as.

Ардуино сдвиговый регистр 74hc595

Как работает сдвиговый регистр 74hc595

Чтобы понять принцип работы микросхемы 74hc595, следует рассмотреть распиновку сдвигового регистра 74hc595, которая изображена на картинке ниже. Контакты DS, ST_CP и SH_CP — служат для управления и подключаются к любым выходам платы Arduino. Контакты Q0Q7 — это выходы (разряды) сдвигового регистра. С помощью отправки байта с Ардуино можно менять состояние разряда (HIGH или LOW).

Схема. Описание и распиновка сдвигового регистра 74hc595 Ардуино
Схема. Описание и распиновка сдвигового регистра 74hc595 Ардуино

Контакты VCC и GND — это питание регистра;
Контакт MR — сброс (не активен);
Контакт OE подключается к GND;
Контакт Q7` предназначен для последовательного соединения регистров.

Как подключить 74hc595 к плате Arduino

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • 74HC595 / КР1564ИР52 сдвиговый регистр;
  • макетная плата;
  • светодиоды и резисторы;
  • семисегментный индикатор;
  • провода «папа-папа».
Схема подключения сдвигового регистра 74hc595
Схема подключения сдвигового регистра 74hc595 к Ардуино

Скетч. Тестирование 74hc595 сдвигового регистра

Мы кратко рассмотрели 74hc595 описание на русском. Но чтобы полностью разобраться в назначении и принципе его работы — следует подключить регистр или его российский аналог КР1564ИР52 к Ардуино Уно, согласно схеме и загрузить следующий скетч. Программа позволяет попеременно включать/выключать восемь светодиодов, используя лишь 3 цифровых пина микроконтроллера Arduino.

#define dataPin  10  // пин подключен к входу DS
#define latchPin 11  // пин подключен к входу ST_CP
#define clockPin 12  // пин подключен к входу SH_CP

void setup() {
   // устанавливаем режим работы пинов OUTPUT
   pinMode(latchPin, OUTPUT);
   pinMode(clockPin, OUTPUT);
   pinMode(dataPin, OUTPUT);
   // ставим HIGH на "защёлку", чтобы регистр не принимал сигнал
   digitalWrite(latchPin, HIGH);
}

void loop() {
   digitalWrite(latchPin, LOW);                                        // ставим LOW на "защёлку"
   shiftOut(dataPin, clockPin, LSBFIRST, B01010101); // отправляем байт в двоичном виде
   digitalWrite(latchPin, HIGH);                                       // ставим HIGH на "защёлку"

   delay(1000); // задержка в 1 секунду

   digitalWrite(latchPin, LOW);                                        // ставим LOW на "защёлку"
   shiftOut(dataPin, clockPin, LSBFIRST, B10101010); // отправляем байт в двоичном виде
   digitalWrite(latchPin, HIGH);                                       // ставим HIGH на "защёлку"

   delay(1000); // задержка в 1 секунду
}

Пояснения к коду:

  1. пока защелка регистра ST_CP (подключен к latchPin) находится в состоянии HIGH — регистр не принимает сигнал с микроконтроллера;
  2. данные отправляют в двоичном виде, где каждый из 8 битов отвечает за свой разряд. «1» — разряд переходит в состояние HIGH, «0» — в состояние LOW.

Скетч. Сдвиговый регистр 74hc595 и светодиоды

В следующем примере используем функцию bitWrite(x, n, b), которая позволяет изменять состояние указанного бита переменной. x — переменная, у которой необходимо изменить бит; n — это номер бита, состояние которого необходимо изменить (начинается с крайнего правого бита), b — новое значение бита (0 или 1). Схема со светодиодами остается прежней, меняется только программа.

#define dataPin  10  // пин подключен к входу DS
#define latchPin 11  // пин подключен к входу ST_CP
#define clockPin 12  // пин подключен к входу SH_CP

byte byteToSend = 0; // создаем пустой байт B00000000

void setup() {
   // устанавливаем режим работы пинов OUTPUT
   pinMode(latchPin, OUTPUT);
   pinMode(clockPin, OUTPUT);
   pinMode(dataPin, OUTPUT);
   // ставим HIGH на "защёлку", чтобы регистр не принимал сигнал
   digitalWrite(latchPin, HIGH);
}

void loop() {
   for (byte bitPos = 0; bitPos < 8; bitPos++) {
      byteToSend = 0; // обнуляем байт, чтобы выключить светодиод
      bitWrite(byteToSend, bitPos, HIGH);
      digitalWrite(latchPin, LOW);                                        // ставим LOW на "защёлку"
      shiftOut(dataPin, clockPin, LSBFIRST, byteToSend);
      digitalWrite(latchPin, HIGH);                                       // ставим HIGH на "защёлку"
      delay(100);
   }
   for (byte bitPos = 0; bitPos < 8; bitPos++) {
      byteToSend = 0; // обнуляем байт, чтобы выключить светодиод
      bitWrite(byteToSend, bitPos, HIGH);
      digitalWrite(latchPin, LOW);                                        // ставим LOW на "защёлку"
      shiftOut(dataPin, clockPin, MSBFIRST, byteToSend);
      digitalWrite(latchPin, HIGH);                                       // ставим HIGH на "защёлку"
      delay(100);
   }
}

Пояснения к коду:

  1. в цикле for Arduino меняется переменная bitPos от 0 до 8. С помощью функции bitWrite(byteToSend, bitPos, HIGH); изменяется байт в двоичном виде, который отправляется на регистр. При bitPos=0 получим B00000001, при bitPos=1 — B00000010, при bitPos=2 — B00000100 и т.д.;
  2. MSBFIRST и LSBFIRST меняет направление сигнала.

Скетч. Сдвиговый регистр 74hc595 и индикатор

Схема подключения сдвигового регистра 74hc595 и индикатора к Ардуино
Схема подключения сдвигового регистра 74hc595 и индикатора к Ардуино

В следующем примере подключим семисегментного индикатора. Сдвиговый регистр позволяет не только упростить схему сборки с платой Ардуино, но и делает проще программу. После сборки схемы, размещенной на картинке выше, загрузите программу для индикатора и 74hc595. В коде идет перебор цифр на индикаторе с нуля до пяти. Продолжить программу самостоятельно не составит для вас большого труда.

#define dataPin  10  // пин подключен к входу DS
#define latchPin 11  // пин подключен к входу ST_CP
#define clockPin 12  // пин подключен к входу SH_CP

void setup() {
   // устанавливаем режим работы пинов OUTPUT
   pinMode(latchPin, OUTPUT);
   pinMode(clockPin, OUTPUT);
   pinMode(dataPin, OUTPUT);
   // ставим HIGH на "защёлку", чтобы регистр не принимал сигнал
   digitalWrite(latchPin, HIGH);
}

void loop() {
   digitalWrite(latchPin, LOW);  // цифра один
   shiftOut(dataPin, clockPin, LSBFIRST, B00110000);
   digitalWrite(latchPin, HIGH);
   delay(1000);

   digitalWrite(latchPin, LOW);  // цифра два
   shiftOut(dataPin, clockPin, LSBFIRST, B01101101);
   digitalWrite(latchPin, HIGH);
   delay(1000);

   digitalWrite(latchPin, LOW);  // цифра три
   shiftOut(dataPin, clockPin, LSBFIRST, B01111001);
   digitalWrite(latchPin, HIGH);
   delay(1000);

   digitalWrite(latchPin, LOW);  // цифра четыре
   shiftOut(dataPin, clockPin, LSBFIRST, B00110011);
   digitalWrite(latchPin, HIGH);
   delay(1000);

   digitalWrite(latchPin, LOW);  // цифра пять
   shiftOut(dataPin, clockPin, LSBFIRST, B01011011);
   digitalWrite(latchPin, HIGH);
   delay(1000);
}

Пояснения к коду:

  1. в схеме не используется контакт Q0 регистра, поэтому байт B00110000 всегда начинается с нуля, так как разряд не используется.

Заключение. Сегодня мы рассмотрели характеристики, назначение и описание сдвигового регистра 74hc595 Arduino. Привели несколько примеров со схемами, рабочими программами с подробными комментариями для управления с помощью регистра светодиодами и семисегментного индикатора 5161as. В своих следующих проектах на Ардуино мы обязательно будем применять эту микросхему.

1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 5,00 out of 5)
Загрузка...

Похожие записи по теме:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *