millis() should work for you.
void timer(){
second = millis();
refresh[0] = second - refresh[1];
if(refresh[0]==120){
refresh[0]=0;
refresh[1]=second;
printScreen();
}
}
Why set refresh[0] to 0? Is refresh[0] used elsewhere?
The "==" should be ">=".
Why do you call a variable "second" when it actually holds milliseconds?
I thought that you need to update the screen every half second or second, but this code gets executed every 120 milliseconds! (Although it may occasionally miss altogether because of the == ).
The millis() function works fine for me. What Arduino are you using? Have you modified it in some way?