I don't know why your led will not switch off, but I can see this is wrong:
void turnOnLED() {
int i;
for (i=0;i<4;i++){
Your 1 in 4 multiplexing is not yet correct. There should not be a for() loop in this function. The function should add one to i each time it is called and send only one byte to the shift register. Currently it is sending 4 bytes in quick succession.