int ploadPin = 8; // Connects to Parallel load pin the 165
int clockEnablePin = 9; // Connects to Clock Enable pin the 165
int dataPin = 11; // Connects to the Q7 pin the 165
int clockPin = 12; // Connects to the Clock pin the 165
max232,
Any octal clocked register part could be used as shift register.
The right hand of this schematic shows 2 74F374s wired up as output shift registers.
I used these because:
I had them on hand
they can sink 24mA of current to turn some LEDs on
I didn't have any shift registers to play with.
I didn't care that there was the barest of flicker on the LEDs as the bits shifted thru.
They worked great with the standard shiftout commands.
// shift out highbyte
//shiftOut(shiftdataout, serialclock, MSBFIRST, (outdata >> 8));
// shift out lowbyte
// shiftOut(shiftdataout, serialclock, MSBFIRST, outdata);
MAX, realizing you like the 595 means you have need of OUTPUTS... but if you need inputs... it's just not the right device.
As stated by crossroads, there are MANY options related to shift registers and the handshaking required is nearly identical in all cases. So, master one chip, and all the rest should be so much easier.
Once you understand how CLOCK, SELECT or LATCH and DATA work it starts getting fun.
A long time ago I built an extendable relay panel that allowed you to add or remove a board with 8 INPUTS and 8 OUPUTS per board. I used an INPUT pin on the controller that was fed to the LAST OUTPUT of the last board. Essentially, it was a form of feedback... during STARTUP, the controller sends out a data bit and keeps shifting bits until it sees that feedback pin change state.
This way you can daisy chain shift registers and not need any special code each time you add and remove them.