시프트 레지스터 구동에 쓰이는 함수로 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