GPS 7 Segment Speedometer Working But With Issues

There are a combination of things happening to delay the readings. GPS speed is not as accurate as your speedometer, especially at lower speeds. There is a little lag in the speed reading, but it's not 5 seconds.

I wrote the NeoGPS library to overcome some of these problems, run faster, use less RAM and to accommodate the new GPS devices. Many example programs have problems with the loop structure and printing, including this one from Adafruit. Here is a version of your sketch that uses NeoGPS:

#include <SoftwareSerial.h>
#include <Wire.h>
#include <Adafruit_LEDBackpack.h>
#include "Adafruit_GFX.h"
#include <NMEAGPS.h>


// I2C address of the display.  Stick with the default address of 0x70
// unless you've changed the address jumpers on the back of the display.
#define DISPLAY_ADDRESS   0x70


Adafruit_7segment clockDisplay;
SoftwareSerial gpsSerial(8, 7);
NMEAGPS gps;


void setup()
{
  Serial.begin(9600);
  Serial.println( F("Clock starting!") ); // F macro saves RAM!

  clockDisplay.begin(DISPLAY_ADDRESS);
  clockDisplay.setBrightness(7);

  gpsSerial.begin(9600);
  gps.send_P( &gpsSerial, F("PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0") ); // RMC only
  gps.send_P( &gpsSerial, F("PMTK220,1000") ); // 1Hz update
}

void loop()
{
  // Process GPS chars
  while (gps.available( gpsSerial )) {

    //  A new fix has been assembled from processed chars
    gps_fix fix = gps.read();

    //  Display fix status (the status may not be valid yet)
    Serial.print( F("HELLO: ") );
    if (fix.valid.status)
      Serial.print(fix.status); // 0, 1 or 2 means no fix.  3 is a good fix
    Serial.println();

    //  Display fix speed (the speed may not be valid yet)
    Serial.print( F("MPH: ") );
    if (fix.valid.speed) {

      // Here is a way to get the whole number MPH
      int speed_mph = (fix.spd.whole * 115) / 100;

      // You could get the floating point (with decimals) MPH like this:
      //   float speed_mph = fix.speed_mph();
      // speed_mph = random( 0, 100 ); // uncomment for testing
      
      if (speed_mph < 5)
        speed_mph = 0;
      Serial.print( speed_mph );

      clockDisplay.println( speed_mph );
    } else
      clockDisplay.clear();
    clockDisplay.writeDisplay();

    Serial.println();
  }
}

If you want to try it, you can install NeoGPS from the Arduino IDE Library Manager, from the menu Sketch -> Include Library -> Manage Libraries...

Note that the display is updated only when a new GPS fix is available, inside the while loop. Your sketch was updating the display constantly. It also avoids floating-point calculations like speed*1.15077. It uses the integer knots from NeoGPS, multiplies it by the integer 115, and then divides it by 100. That's almost as accurate as multiplying by 1.15, but it's much faster and it saves a lot of program space by not including the floating-point math library.

Your original sketch used 13634 bytes program space and 1106 bytes RAM.
The NeoGPS version uses 9842 bytes program space and 585 bytes RAM, a significant savings. Because you are only using the speed, the GPS device needs to send the RMC sentence only, not the GGA sentence. The NeoGPS config files were modified to only parse the speed field from the RMC sentence. Everything else is skipped.

Cheers,
/dev