t1 = millis();//acquire millis time
if(t1-t2 >= 5000)//if 5 seconds have passed change display
{
t2 = t1;
state1 = !state1;
}
t1 and t2 don't mean a things as names. Surely you could use meaningful names.
In printTime(), couldn't you just subtract 12 from hour, if hour is greater than 12? Add 12 if hour is 0.