miles per hour = pulse count/(8000/3600)
Perhaps if you count pulses for an hour but otherwise no.
average velocity = distance / time
and pulses only give you distance. You need to measure the time part.
At 64mph you should get ... hold on... 142.222 pulses/second, a pulse every 7 milliseconds but time them with micros() not millis().
If you plan on displaying speed as digits, don't update the display faster than eyes can follow, 4 or 5 updates a second is plenty. You will be able to calculate average speed that many times a second with cycles to spare.
PS -- silly me, I should explain Arduino timing!
Arduino keeps a clock ticking every microsecond.
The Arduino millis() function counts milliseconds but skips 6 values out of every 256, it's good if you're not timing small numbers of milliseconds or you don't care about + or - 1 when determining time intervals which for most uses is just fine.
The Arduino micros() function counts microseconds to the nearest 4, you don't need closer.
Both functions return 32-bit unsigned long values. Less bits can be used but don't for now.
Somewhere in your code something happens and the sketch saves the micros() value.
Later on you can see how long it's been since that time mark was saved...
unsigned long startMicros, elapsedMicros;
...............
startMicros = micros(); // event detected, save the time
.................
elapsedMicros = micros() - startMicros; // later on, remember that micros() always returns "now"
Since the time values are all unsigned integers, the subtraction will ALWAYS be right up to the limit that the time values can count. Unsigned long micros can count a bit over 70 minutes, you're safe.
Rollover happens, the subtraction still works the same. If your clock counted to 1 to 12 and was round, subtracting is the same as moving the hand backwards. 2 - 4 would = 10, right?
The limit of that clock is that it can only time up to 11 apart, 12 apart would get 0.