Okay, I envision this as your setup. You will need 2 shiftouts per digit, so the >> will come into play anyway.
Hours:
Flesh this out, I think you're basically there, just need the mapping in the array to go out to the LEDs
int hours_display[13];
number_to_display[0] = B0000000000000000; // not used, convenient to have 1-12 = 1-12 later
number_t0_display[1] = B0000000001000000;
number_to_display[2] = B0100000001000000;
:
:
number_to_display[12] = B0011111100111111;
/* format for shifting out
// shift out highbyte
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));
// shift out lowbyte
shiftOut(data, clock, MSBFIRST, data);
*/
//hours
digitalWrite(hlatchPin, LOW);
shiftOut(hdataPin, hclockPin, MSBFIRST, (number_to_display[h] >>8));
shiftOut(hdataPin, hclockPin, MSBFIRST, hours_display[h]);
digitalWrite(hlatchPin, HIGH);
:
:
// upper minutes digit
digitalWrite(dlatchPin, LOW);
shiftOut(ddataPin, dclockPin, MSBFIRST, (number_to_display[d] >> 8));
shiftOut(ddataPin, dclockPin, MSBFIRST, number_to_display[d]);
digitalWrite(dlatchPin, HIGH);
// lower minutes digit
digitalWrite(mlatchPin, LOW);
shiftOut(mdataPin, mclockPin, MSBFIRST, (number_to_display[mins] >> 8));
shiftOut(mdataPin, mclockPin, MSBFIRST, number_to_display[mins]);
digitalWrite(mlatchPin, HIGH);
:
: