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

См. также