#define DS 8 //линия для передачи данных
#define SH 7 //сдвиг разряда на единицу
#define ST 4 //установка режима ввода или вывода данных
//создадим "библиотеку" кодов 

byte digitsArr[10]={
  0b11000000, //число 0
  0b11111001, //число 1
  0b10100100, //число 2
  0b10110000, //число 3
  0b10011001, //число 4
  0b10010010, //число 5
  0b10000010, //число 6
  0b11111000, //число 7
  0b10000000, //число 8
  0b10010000, //число 9
};

byte digitsDotArr[10]={
  0b01000000, //число 0
  0b01111001, //число 1
  0b00100100, //число 2
  0b00110000, //число 3
  0b00011001, //число 4
  0b00010010, //число 5
  0b00000010, //число 6
  0b01111000, //число 7
  0b00000000, //число 8
  0b00010000, //число 9
};

byte regArr[4]={
  0b11111000, //разряд 0
  0b11110100, //разряд 1
  0b11110010, //разряд 2
  0b11110001, //разряд 3
};

byte chArr[4]={0,0,0,0};

int number;

void setup (){
  pinMode(DS,OUTPUT); // Устанавливаем вывод как выход
  pinMode(SH,OUTPUT); // Устанавливаем вывод как выход
  pinMode(ST,OUTPUT); // Устанавливаем вывод как выход
  
}

void loop(){ 
  
  
    number=945;
    
    int thousands = number/1000%10; //выделяем количество тысяч
    int hundreds = number/100%10;   //выделяем количество сотен
    int tens = number/10%10;        //выделяем количество десятков
    int unit = number%10;           //выделяем количество единиц
   

  chArr[0]=unit;
  chArr[1]=tens;
  chArr[2]=hundreds;
  chArr[3]=thousands;;
    
  
  
 //вывод цифр на дисплей
   
      
    for (int i=0; i<4; i++){
      digitalWrite(ST, LOW); //Устанавливаем на 12х выводах регистров режим ввода данных
      shiftOut(DS, SH, MSBFIRST, digitsArr[chArr[i]] ); //Запись информации в правый регистр
      shiftOut(DS, SH, MSBFIRST, regArr[i]);    //Запись информации в левый регистр
      digitalWrite(ST, HIGH); //Устанавливаем на 12х выводах регистров режим вывода данных
   }   
}

 





