Earlier, I made a post on how a shift register is operated in practice. But what exactly can a shift register be used for and how does it work? As always, the answer will depend on what you are trying to do (yes, we do have to play by reality’s rules).
The main idea behind shift registers is that data signals, either high or low, can be shifted through ports inside the integrated circuit. This, in a sense, can be thought of as a projector reel where there is information on each section of the reel, but only part of the reel is able to be displayed through the projector at one particular time.
With this in mind, we can look at the three main types of shift registers that are commonly used: a serial-in serial-out (SISO) shift register, a serial-in parallel-out (SIPO) shift register, and a parallel-in serial-out (PISO) shift register.
The SISO shift register is able to store (or in the reel projector analogy, cover up) information based on how big of a shift register it is. For example if it was an 8-bit register, it could store 8 bits of information. This means that when you input data into the SISO, you will have to wait for 8 data shifts (also known as clock pulses), before the first piece of information is output/displayed on the projector. Because this is a serial-out shift register, only one piece of information is displayed at a time, and once the second piece of information is shifted to the output position, the first piece of information is lost. The SISO shift registers can be used in calculators to store multiple binary numbers before shifting them out so they can be added together.
The SIPO shift register, the kind I used in my Instructable, takes a serial, one-at-a-time stream of data and then displays the information along multiple outputs. There are two ways that these types of shift registers can be operated. One way is to display the inputs on the outputs as they come in, creating a type of reel projector that shows 8 pictures, or pieces of information, at the same time (if it is an 8 bit shift register). The other, and in my opinion, more useful option is to not display any of the input information until all of the flip-flops in the shift register are filled and then display the inputs on their respective output simultaneously. A SIPO shift register is useful when you want to control/give input to multiple components but do not want to individually dedicated wires from your microcontroller to each of your components.
Finally, the PISO shift register takes multiple inputs simultaneously and outputs them serially. While this does not follow the reel projector analogy very well, once all of the inputs have been loaded into the shift register, the PISO can then be thought of as a serial-in serial out shift register, except you do not have to wait for the input to reach the lone output port. This is useful for taking multiple readings simultaneously (e.g., multiple button readings) and then feeding the information on one line to a microcontroller.