First I would suggest not to place the lookup table on the stack. > char display_digits[10] = { As it does not change, make it const and static: > static const char display_digits[10] = { So it ends up directly in flash and does not have to be created on the stack which is quite expensive. Next, I don't see the real need for the float. Currently the code is: > byte highVal =... > highValDec = (float) highVal * 0.0121; So instead of computing a float in the 0.0 .. 3.0855 range, I would suggest to compute an integer in the 0 .. 30855 range and just print a "." inside of the output > byte highVal =... > unsigned int highValDec = highVal * 121; // highValDec in 0..30855 range. Then the computation of the 3 digits need a simple integer division and a multiplication operation per digit, a lot cheaper than any floating point operation. > temp_hi = highValDec / 10000; > highValDec -= temp_hi * 10000; > temp_med = highValDec / 1000; > highValDec -= temp_med * 1000; > temp_low = highValDec / 100; > highValDec -= temp_low * 100; or even: > highValDec /= 100; // cut off trailing 2 digits. > temp_hi = highValDec / 100; > highValDec -= temp_hi * 100; > temp_med = highValDec / 10; > highValDec -= temp_med * 10; > temp_low = highValDec; Daniel PS: All code untested, just as idea.