Loop with condition

At least, then, you have to change that 'if' statement so that it only influences the count, not the display update.

Something like:

void loop()
{
  if (digitalRead(machine) == HIGH)
  {
    // 1. Load number 1

    int digit_value_1 = seconds % 10;
    int digit_value_2 = (seconds / 10) % 10;

    // 2. Load number 2

    int digit_value_3 = (minutes) % 10;
    int digit_value_4 = (minutes / 10) % 10;
  }

    //3. Update number to display
    pickDigit(0);//Light up 7-segment display d1
    pickNumber(digit_value_1);// get the value of thousand
    delay(del);//delay 5ms

    pickDigit(1);//Light up 7-segment display d2
    pickNumber(digit_value_2);// get the value of hundred
    delay(del);//delay 5ms

    pickDigit(2);//Light up 7-segment display d3
    pickNumber(digit_value_3);//get the value of ten
    delay(del);//delay 5ms

    pickDigit(3);//Light up 7-segment display d4
    pickNumber(digit_value_4);//Get the value of single digit
    delay(del);//delay 5ms

    delay(2);//loop delay update every 20 ms
}

Also, please post your revised sketch in a new post. Your input changed from pin 1 to D9, I'm wondering what else...