void callupDigit1(int y) {
//Digit 1
digitalWrite(disp1,HIGH);
digitalWrite(disp2,LOW);
digitalWrite(disp3,LOW);
digitalWrite(segDP,HIGH);
display(y);
}
You are changing the digit drivers while the segments are still set. Turn off all drivers, change the segments, turn on the needed driver.
What you see, I call it 'ghosting' .
void callupDigit1(int y) {
//Digit 1
digitalWrite(disp1,LOW); //off
digitalWrite(disp2,LOW); //off
digitalWrite(disp3,LOW); //off
digitalWrite(segDP,HIGH); //off (is a segment)
display(y); //set new segments
digitalWrite(disp1,HIGH); //now turn on digit
}
I don't know that it will solve your problem, but it will certainly be better.
If you think about what is happening in 'slow motion', it will make sense-
digit1 is displaying a number 5
now, change to digit2 by first setting the digit2 driver on
stop here. the segments are still driving a number 5, but are now on digit2
now, change the segments to a number 7
ok. looks good now
that brief time the number 5 'shifted' to digit2 will be somewhat visible
how visible may depend on how efficient the display is, among other things