8비트 병렬 입력 직렬 출력 시프트 레지스터
디지털 회로에서 병렬 데이터를 직렬 데이터로 변환하는 데 사용
8비트 병렬 입력: 8개의 병렬 입력 핀(A, B, C, D, E, F, G, H)을 통해 데이터를 입력받음
직렬 출력: 입력된 병렬 데이터를 한 비트씩 직렬로 출력할 수 있습니다. 데이터는 Q7과 Q7’ 핀을 통해 직렬로 출력
키패드 입력처리나, 센서 데이터 수집에 사용
Nintendo의 NES 컨트롤러는 여러 버튼의 상태를 74HC165를 사용하여 직렬 데이터로 변환하여 게임 콘솔로 전달합니다. 이를 통해 게임 콘솔은 적은 수의 핀으로 여러 버튼의 입력을 처리





/*
74HC165 Shift Register Demonstration 1
74hc165-demo.ino
Read from 8 switches and display values on serial monitor
DroneBot Workshop 2020
https://dronebotworkshop.com
*/
// Define Connections to 74HC165
// PL pin 1
int load = 7;
// CE pin 15
int clockEnablePin = 4;
// Q7 pin 7
int dataIn = 5;
// CP pin 2
int clockIn = 6;
void setup()
{
// Setup Serial Monitor
Serial.begin(9600);
// Setup 74HC165 connections
pinMode(load, OUTPUT);
pinMode(clockEnablePin, OUTPUT);
pinMode(clockIn, OUTPUT);
pinMode(dataIn, INPUT);
}
void loop()
{
// Write pulse to load pin
digitalWrite(load, LOW);
delayMicroseconds(5);
digitalWrite(load, HIGH);
delayMicroseconds(5);
// Get data from 74HC165
digitalWrite(clockIn, HIGH);
digitalWrite(clockEnablePin, LOW);
byte incoming = shiftIn(dataIn, clockIn, LSBFIRST);
digitalWrite(clockEnablePin, HIGH);
// Print to serial monitor
Serial.print("Pin States:\r\n");
Serial.println(incoming, BIN);
delay(200);
}