Всем привет!
Пишу программу для МК Atmega8 на WinAVR, симулятор схем Proteus, столкнулся с такой проблемой, соединяю последовательно 5 74HC595 (с выхода Q7' подаю на вход DS) все вроде бы правильно. Есть рабочая версия программы для этого же контроллера на этих же регистрах и с использованием 7-ми сегментного индикатора но для 2-х разрядного числа , т.е. от 0 до 99, а мне нужно увеличить до 5 этот разряд, т.е. что бы считал мой секундомер от 0 до 99999

Код:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
/*     -A-
    F	B
     -G-
    E	C
     -D-	
*/
// составляем из сегментов цифры
#define	N0	(0x3F)    //0
#define	N1	(0x06)    //1
#define	N2	(0x5B)    //2
#define	N3	(0x4F)    //3
#define	N4	(0x66)    //4
#define	N5	(0x6D)    //5
#define	N6	(0x7D)    //6
#define	N7	(0x07)    //7
#define	N8	(0x7F)	    //8
#define	N9	(0x6F)    //9

unsigned char indikator[10]={N0, N1, N2, N3, N4, N5, N6, N7, N8, N9};
unsigned char y=0; //переменная y  

void export_data (long int data)
{
  unsigned char i; //переменная i
  for (i=0;i<16;i++) {
    if ((data&0x8000)==0x00){
      PORTD&=~_BV(PD5); //Выставляем биты данных на PD5 (DATA канал)   
     }
    else {
     PORTD|=_BV(PD5);
     }
    PORTD|=_BV(PD6); //Импульс на SH_CP (запись)
    PORTD&=~_BV(PD6);
    data<<=1;
  }

   PORTD|=_BV(PD7); //Импульс на ST_CP (защелка - вывод на индикатор записанных данных)
    PORTD&=~_BV(PD7);
}

int main(void)
{
  long int DS=0;   //переменная DS
  unsigned int i=0;    //переменная i
  PORTD=0x00; //Первоначально устанавливаем на всех выходах 0
  DDRD=0xff; //установить PD0-PD2 как выходы
  while (1)  //Бесконечный цикл
   {   
      DS=((indikator[i / 10] << 8) | indikator[i % 10]); //Закодированное число в 16hex системе исчисления
      export_data(DS);   //Отправляем данные на сдвиговый регистр
      if (i==99)  // Если i > 9999 то обнуляем
        i=0;
      else i++;
      _delay_ms(500);  //пауза 500 мс.
   }
}

Исходник с файлом от протеус