Speedometer not displaying values.

Using an external interrupt with the reed switch is a better way to go. There are so many complications with polling.
If you want to troubleshoot the polling scheme...
There are two ways mph could be 0, either this line never gets executed...

mph = (56.8*float(circumference))/(float(timer)*float(gearing));

or this line gets executed...

 mph =0;

Next step is to find out which one.