The Microchip MCP23S17 is a 16-bit port expender that can be controlled for example from an Arduino over SPI (MCP23017 is the I²C variant). It supports digital input and output on all pins, and interrupts can be configured if required. As always, all notes, schematics and code are in the Little Electronics & Arduino Projects repo on GitHub