shiftOut()
Описание
Побитово передаёт байт данных. Начинает с самого старшего (т.е. крайнего левого) или самого младшего (крайнего правого) бита. Каждый бит последовательно записывается на пин данных, после чего тактовый пин импульсируется (устанавливается в HIGH, затем в LOW), указывая на доступность бита.
Примечание
Если вы взаимодействуете с устройством, тактируемым по нарастающему фронту, необходимо убедиться, что тактовый пин находится в LOW перед вызовом shiftOut(), например, с помощью вызова digitalWrite(clockPin, LOW).
Это программная реализация; см. также библиотеку SPI, которая предоставляет аппаратную реализацию. Она работает быстрее, но только на определённых пинах.
Синтаксис
Используйте следующую функцию для синхронной записи данных через пин:
shiftOut(dataPin, clockPin, bitOrder, value)
Параметры
Функция принимает следующие параметры:
dataPin: пин, на который выводится каждый бит. Допустимые типы данных:int.clockPin: пин, обеспечивающий тактовый сигнал. Допустимые типы данных:int.bitOrder: порядок сдвига битов: MSBFIRST или LSBFIRST (старший бит первым или младший бит первым).value: передаваемые данные. Допустимые типы данных:byte.
Возвращаемое значение
Функция ничего не возвращает.
Пример кода
Соответствующую схему см. в руководстве по управлению сдвиговым регистром 74HC595.
//**************************************************************//
// Name : shiftOutCode, Hello World //
// Author : Carlyn Maw, Tom Igoe //
// Date : 25 Oct, 2006 //
// Version : 1.0 //
// Notes : Code for using a 74HC595 Shift Register //
// : to count from 0 to 255 //
//****************************************************************
// Пин, подключённый к ST_CP 74HC595
int latchPin = 8;
// Пин, подключённый к SH_CP 74HC595
int clockPin = 12;
// Пин, подключённый к DS 74HC595
int dataPin = 11;
void setup() {
// Установка пинов на выход
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
// Счёт вверх
for (int j = 0; j < 256; j++) {
// Устанавливаем latchPin в LOW на время передачи
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, j);
// Возвращаем latchPin в HIGH, сигнализируя чипу,
// что передача завершена
digitalWrite(latchPin, HIGH);
delay(1000);
}
}
Примечания и предупреждения
Пины dataPin и clockPin должны быть предварительно настроены как выходы с помощью вызова pinMode().
shiftOut() в настоящее время выводит 1 байт (8 бит), поэтому для значений больше 255 требуется двухэтапная операция.
// Для MSBFIRST
int data = 500;
// передаём старший байт
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));
// передаём младший байт
shiftOut(dataPin, clock, MSBFIRST, data);
// Или для LSBFIRST
data = 500;
// передаём младший байт
shiftOut(dataPin, clock, LSBFIRST, data);
// передаём старший байт
shiftOut(dataPin, clock, LSBFIRST, (data >> 8));