Посмотрел ваш код. Даже не знаю с чего начать. Надеюсь вы читали Datasheet на ЖПС модуль, и он у вас подключен. Вот как я вижу ваш код.
После заставки у вас нет команды очистки дисплея. То есть эта заставка будет висеть постоянно, кроме тех знакомест, куда вы что-то будете выводить позже. И заставка - это не самое важное в программе. Ее можно добавить после того, как программа отлажена.
Вы запускаете измерение температуры, а потом сразу прыгаете на п\п, ожидающую определенную строку по UART'у. А как вы будете ловить эту строку? Львиная доля машинного времени уйдет на обработку прерываний таймеров. У вас прерывания таймера 0 срабатывают каждые 9 мс (не самый лучший способ опроса кнопок ), это если я правильно посчитал, но вроде правильно. А есть еще таймер 1. И, как я понял, пока эта строка не получена, программа будет висеть. А при подаче питания ЖПС модуль надо как то инициировать, или он должен дать какую то команду, что готов к работе? Или контроллер должен дать команду на отправку данных? Ведь существует горячий старт, холодный старт. Я сейчас не помню, но при последнем, вроде, проходит несколько минут, прежде чем он "готов к работе".
Я бы писал программу по другому. Подключаете дисплей, выводите все надписи. Вместо значений можно подставить любые числа. Потом. когда все будет отображаться как надо, добавляете измерение температуры. Отлаживаете, потом вольтметр. Отладка. Тахометр. Отладка. ЖПС модуль. Отладка. А теперь добавляете заставку. Сразу всю программу написать без ошибок сложно, по крайней мере для меня. Может здесь найдете что-нибудь полезное.