Led matrix brightness problem

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.