PHP код:
	
#include <avr/interrupt.h>
#include <avr/io.h>
//connected to ST_CP
int latchPin = 3;
//connected to SH_CP
int clockPin = 4;
//connected to DS
int dataPin = 2;
int gear =0;
#define digit1 7
#define digit2 6
#define digit3 5
char digit_out[3], cur_dig; 
int digits[] = 
{
  0b11000000, //0
  0b11111001, //1
  0b10100100, //2
  0b10110000, //3
  0b10011001, //4
  0b10010010, //5
  0b10000010, //6
  0b11111000, //7
  0b10000000, //8
  0b10010000, //9
  0b01000000, //0.
  0b01111001, //1.
  0b00100100, //2.
  0b00110000, //3.
  0b00011001, //4.
  0b00010010, //5.
  0b00000010, //6.
  0b01111000, //7.
  0b00000000, //8.
  0b00010000, //9.
  0b11111111, //пустота
  0b10001001, //H нейтраль
  0b10000011  //задний ход как-то надо отобразить b - back
};
void display()
{
  digit_out[2]=0;
  digit_out[1]=0;
  digit_out[0]=gear;  
}
ISR(TIMER2_OVF_vect)
{
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b11111111);  
  digitalWrite(latchPin, HIGH);
  switch (cur_dig)
  {
    case 0:
      digitalWrite(digit3, LOW);
      digitalWrite(digit1, HIGH);
      break;
    case 1:
      digitalWrite(digit1, LOW);
      digitalWrite(digit2, HIGH); 
      break; 
    case 2:
      digitalWrite(digit2, LOW);
      digitalWrite(digit3, HIGH);
      break;
  } 
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST,digits[digit_out[cur_dig]]);  
  digitalWrite(latchPin, HIGH);
  cur_dig++;
  if(cur_dig==3) cur_dig=0;  
}
void setup() 
{
  ASSR=0x00;
  TCCR2A=0x00;
  TCCR2B=0x04;
  TCNT2=0x00;
  OCR2A=0x00;
  OCR2B=0x00;
  TIMSK2=0x01;
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(digit1, OUTPUT);
  pinMode(digit2, OUTPUT);
  pinMode(digit3, OUTPUT);
  PORTB = 0xFF;
  DDRB = 0x00;
}
void loop() 
{
    gear=21;
    if(digitalRead(8)==0)gear=1;
    if(digitalRead(9)==0)gear=2;
    if(digitalRead(10)==0)gear=3;
    if(digitalRead(11)==0)gear=4;
    if(digitalRead(12)==0)gear=5;
    delay(80);
    display();
}