Blizu si što se tiče koda.
50ms za uvećavanje broja u glavnoj petlji je suviše brzo. Promenljivu i uvećavaj na 1 sekundu, recimo.
Ovde imaš grešku:
Case 0
PORTD = segment_number((128 mod 1000) / 100) ' display first digit
Treba da bude kao i za druge cifre:
Case 0
PORTD = segment_number((i mod 1000) / 100) ' display first digit