Hi Aniss
Instead of just lining up more components and links I thought I would give you a brief overview of IO expansions.
Using the IO pins on the Arduino is FAST (several 100kHz is no problem), but as you say limited in number.
Next step is to use a latch or multiplexor:
3 IO pins can be set into 8 different combinations, from 000 to 111.
Each combination, say 010, connects you to one IO pin on the multiplexor, which then can be set or read through a 4th pin, depending on if it is an input or output.
Here you have expanded 3+1 IOs to 8, but you can only reach one of the 8 at one time. It is a little more complicated to handle and a little slower than direct IO. (4+1 to 16 IOs exist also).
Next step again is to use a shift register.
It is almost the same thing as a multiplexor, but instead of having 3, 4 or more parallel address inputs it only has one serial input; the address bits are sent one by one to the serial input (shifted in). Normally 2 more wires are used for handshaking (bit rate and message start/stop). Typically an address and data are sent in one message, or an address is sent out, status is sent back. By sending an 8-bit address you can select 256 IOs with 3 wires! The penalty is again more SW and slower handling.
SPI is nothing but a standard for sending serial data between components as I just described. SPI is supported by Arduino. The components can be any kind of cirquitry; a LED controller like the MAX7221, general IO (digital and analog, in and out), a digitally controlled amplifier etc.
1-wire and I2C work in a similar way by sending serial data, but are designed for attaching stuff on a larger distance from the processor, up to a few hundred meters! In these systems you normally have a master (the microcontroller or PC) and several slaves. Each slave is passive until its address turns up. Then it acts, depending on the data sent after the address and type of device. Again there is a large number of different devices you can attach to a 1-Wire or I2C bus. And as usual the penalty is more software and SLOW traffic (a few Hz). The basic drivers are however available for Arduino. 1Wire is quite simple while the I2C can be complicated with multiple masters etc.
The next step after this is the CAN bus, USB, TCP/IP... but that's another story.
Hope this gives you and others a base. Good luck!
Ove Fredriksson