#define LATCH_DIO 4              // Линия синхронизации данных
#define CLK_DIO 7                // Линия тактирования 
#define DATA_DIO 8               // Линия передачи данных

byte counter = 0;

const byte seg_digits[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90}; // Коды цифр от 0 до 9
const byte seg_num[] = {0xF1,0xF2,0xF4,0xF8};                            // Коды разряда

unsigned long counter_next;
unsigned int counter_to = 200;
 
void setup ()
{
pinMode(LATCH_DIO,OUTPUT);        // Устанавливаем вывод как выход
pinMode(CLK_DIO,OUTPUT);          // Устанавливаем вывод как выход
pinMode(DATA_DIO,OUTPUT);         // Устанавливаем вывод как выход
}
 
void loop()
{
 unsigned long tm = millis() * 10;
 if( counter_next < tm ){counter_next = tm + counter_to;counter++;}

  writeNumber(0 , 0); 
  writeNumber(1 , (counter/100) % 10); 
  writeNumber(2 , (counter/10) % 10); 
  writeNumber(3 , counter % 10); 
}


void writeNumber(byte seg, byte val)
{
    digitalWrite(LATCH_DIO,LOW);
    shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, seg_digits[val]);
    shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, seg_num[seg] );
    digitalWrite(LATCH_DIO, HIGH);
}
