shiftOut()

Parent Previous Next

시프트 레지스터 구동에 쓰이는 함수로 1바이트의 데이터를 순서대로 1비트씩 출력합니다. 시작위치는 최상위비트나 최하위비트 둘중 아무데서부터 시작할 수 있습니다.

각 비트는 클락 핀에 펄스(HIGH->LOW)가 발생한 이후 데이터 핀에 쓰여집니다.


해당 함수는 소프트웨어적으로 실행됩니다.


사용방법

shiftOut(dataPin, clockPin, bitOrder, value)


dataPin : 각 비트를 출력할 핀 번호

clockPin : dataPin에 데이트가 출력될때마다 toggle될 핀 번호

bitOrder : 비트 시프트 순서 - MSBFIRST, LSBFIRST

(Most Significant Bit First, Least Significant Bit First)


value : 출력될 데이터 (byte)


리턴값

없음


예제 코드

다음 코드는 74HC595 시프트 레지스터를 사용하는 예제 코드입니다.

//Pin connected to ST_CP of 74HC595

int latchPin = 8;

//Pin connected to SH_CP of 74HC595

int clockPin = 12;

////Pin connected to DS of 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);

  }

}



참고사항

데이터 핀과 클락 핀은 반드시 출력모드로 설정되어야 합니다.


shiftOut은 한번에 1바이트만 출력할 수 있으므로 255보다 큰 값을 출력하기 위해서는 여러번에 나눠서 출력해야 합니다.

// 최상위바이트부터 보낼때

int data = 500;

// 상위 1바이트 전송

shiftOut(dataPin, clock, MSBFIRST, (data >> 8));  

// 하위 1바이트 전송

shiftOut(dataPin, clock, MSBFIRST, data);


// 최하위바이트부터 보낼때

data = 500;

// 하위 1바이트 전송

shiftOut(dataPin, clock, LSBFIRST, data);  

// 상위 1바이트 전송

shiftOut(dataPin, clock, LSBFIRST, (data >> 8));

Created with the Personal Edition of HelpNDoc: Easily create Web Help sites