die abweichung scheint nicht weitwer verwunderlich. du erzeugst den takt mit 2xwaitms 500, aber lässt dazwischen imemr noch die anzeige multiplexen, wodurch ein haufen zeit draufgeht. dadurch dauert die gesamte programmschleife natürlich länger als eine sekunde, und dieser fehler summiert sich dann.

eine möglichkeit wäre, den haupttakt durch einen timerinterrupt erzeugen zu lassen, in dem dann die zeiten hochgezählt und die anzeigen geschaltet werden...