Сегодня рассмотрим сдвиговый регистр 74hc595, который позволяет увеличить число выходных портов.
Сдвиговый регистр представляет собой интегральную микросхему с 16-ю ногами. Как всегда для работы необходимо первым делом подключить ее. Ниже представлена распиновка этой микросхемы.
Q0-Q7 — это выходы, к которым можно подключать различные компоненты.
GND — земля.
VCC — питание 5 вольт.
Остальные ноги необходимы для управления сдвиговым регистром.
OE (13 пин) соединим с землей.
MR (10 пин) — 5 вольт.
DS (14 пин) подключим к 11 порту Arduino.
ST_CP (12 пин) подключаем к 8 порту Arduino.
SH_CP (11 пин) подключаем к 12 порту Arduino.
Как вы видите, подключение сдвигового регистра потребовало использования трех портов Arduino. На выходе же мы получили восемь.
Давайте подключим 8 светодиодов и поуправляем ими.
Каждый из выходов Q0-Q7 соединим с длинными ножками светодиодов.
У нас подключено 8 светодиодов, каждый из которых может находиться в одном из двух состояний, значит число возможных вариантов 28 = 256. Рассмотрим перебор всех возможных вариантов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
int latchPin = 8; //ST_CP int clockPin = 12; //SH_CP int dataPin = 11; //DS void setup() { pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { for (int num = 0; num < 256; num++) { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, num); digitalWrite(latchPin, HIGH); delay(300); } } |
Как же определить, какой сигнал послать, чтобы зажечь точно необходимые светодиоды? Для этого удобно использовать двоичное представление числа.
Например, при данном коде зажгутся светодиоды 1, 3, 5, 7
1 2 3 4 5 |
void loop() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, 0b10101010); digitalWrite(latchPin, HIGH); } |
0b10101010 — двоичное число с 8-мью разрядами. Туда, где стоит 1 — подается напряжение, на 0 — нет. Если хотите зажечь только первый светодиод, то впишите значение 0b10000000.
Кроме того, сдвиговые регистры можно соединять друг с другом, увеличивая количество выходных портов еще больше, но об этом в следующий раз.