Переписал код, вытащив все из главного тела. Работает, но фиксированную задержку не могу поставить, все цифры невозможно разглядеть становится.
Косяк тут выявляется 
- Код: Выделить всё • Развернуть
-   void print() 
 {
 for (i=1; i<10000; i++)
 {
 
 print_n(i);
 delay_ms(50); //ВОТ ТУТ! ЕСЛИ УБРАТЬ ЗАДЕРЖКУ ВСЕ НОРМ!
 
 
 }
 }
 
Схемы нет, все на макетке.. Если поможет.
Индикаторы с общим анодом, сегменты подключены так:
C0 b
C1 a
C2 f
C3 c
C4 d
C5 e
D7 g
Аноды соответственно:
A4 
A5
A6
A7
- Код: Выделить всё • Развернуть
-     #include <mega16.h> //Âêëþ÷àåì áèáëèîòåêó äëÿ ðàáîòû ñ ìèêðîêîíòðîëëåðîì ATMega16
 
 #include <delay.h> //Âêëþ÷àåì áèáëèîòåêó äëÿ îðãàíèçàöèè çàäåðæåê
 
 int i,a, x1,x10, disp;
 
 
 unsigned char segment[10]= {
 // gedcfab    gedcfab
 0b1000000, 0b1110110, //0,1
 0b0001100, 0b0100100, //2,3
 0b0110010, 0b0100001, //4,5
 0b0000001, 0b1110100, //6,7
 0b0000000, 0b0100000  //8,9
 };
 
 
 
 void cifra(int z)
 {
 PORTC=0xFF;          // Ïîäòÿíóòü ïîðò C  ê 1
 PORTD=0xFF;          //  Ïîäòÿíóòü ïîðò D ê 1
 PORTC = segment[z];
 PORTD.7 = PORTC.6;
 delay_ms(1);
 
 }
 
 void print_n(int n)
 {
 
 PORTA.4 = 1;PORTA.5 = 0;PORTA.6 = 0;PORTA.7 = 0; cifra(n%10); n = n/10;
 PORTA.4 = 0;PORTA.5 = 1;PORTA.6 = 0;PORTA.7 = 0; cifra(n%10); n = n/10;
 PORTA.4 = 0;PORTA.5 = 0;PORTA.6 = 1;PORTA.7 = 0; cifra(n%10); n = n/10;
 PORTA.4 = 0;PORTA.5 = 0;PORTA.6 = 0;PORTA.7 = 1; cifra(n%10);
 }
 
 void initialization()
 {
 DDRD=0xFF;         // Âñå ïîðòû D - âûõîäû
 DDRC=0xFF;         // Âñå ïîðòû C - âûõîäû
 DDRA=0xFF;         // Âñå ïîðòû A - âûõîäû
 
 PORTA=0x00;          // Ïîäòÿíóòü ïîðò A ê 0
 PORTC=0xFF;          // Ïîäòÿíóòü ïîðò C  ê 1
 PORTD=0xFF;          //  Ïîäòÿíóòü ïîðò D ê 1
 }
 
 void print()
 {
 for (i=1; i<10000; i++)
 {
 
 print_n(i);
 delay_ms(50); //ВОТ ТУТ! ЕСЛИ УБРАТЬ ЗАДЕРЖКУ ВСЕ НОРМ!
 
 
 }
 }
 
 void main(void)
 {
 
 initialization();
 while(1)
 {
 print();
 
 
 
 }
 
 }