If you are using hardware spi, you can change the clock rate.
If you are using software spi, you can insert delays, like this:
#define spi_delay() {NOP(); NOP(); NOP(); NOP(); NOP();} //insert your delay here. example uses 5 nop instructions
void myshiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
{
uint8_t i;
for (i = 0; i < 8; i++) {
digitalWrite(clockPin, LOW);
spi_delay(); //insert delay
if (bitOrder == LSBFIRST)
digitalWrite(dataPin, !!(val & (1 << i)));
else
digitalWrite(dataPin, !!(val & (1 << (7 - i))));
spi_delay(); //insert delay
digitalWrite(clockPin, HIGH);
spi_delay(); //insert delay
}
}[/core]
By changing the delay you use, you can slow down myshiftOut() as much as you want.