Aca subo el código completo, tengo un video en caso de q no se entienda, el tema es que ahora puedo cambiar de menu en menu con un pulsador, pero parpadea la pantalla en cada menú, es como q se actualiza completamente la pantalla como un refresco bastante molesto. ayuda por favor 
#include <SPI.h>
#include <Adafruit_TFTLCD.h>
#include <pin_magic_MEGA.h>
#include <pin_magic_UNO.h>
#include <registers.h>
#include <Adafruit_GFX.h>
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
byte dato1,dato2,dato3;
char digitos;
char TX[50];
volatile int contador = 0;
int n = contador;
long T0 = 0;
void setup(){
Serial.begin(9600);
Serial1.begin(9600);
pinMode(20,INPUT);
attachInterrupt(3, ServicioBoton, RISING);
iniciando();
}
void loop(){
if(Serial1.available()){
delay(10);
digitos = Serial1.read();
}
if (digitos == '
){
dato1 = Serial1.parseInt();
dato2 = Serial1.parseInt();
dato3 = Serial1.parseInt();
}
delay(2000); //este delay si lo hago mas chico mas parpadea la pantalla
if (n != contador)
{
Serial.println(contador);
n = contador;
}
if (contador == 3)
{
contador = 0;
}
switch (contador)
{
case 0:
valorsensor();
break;
case 1:
valorsensor2();
break;
case 2:
valorsensor3();
break;
}
}
void iniciando(){
tft.begin(0x9341);
tft.fillScreen(BLACK);
tft.setRotation(3);
tft.fillRect(0,120,320,20,BLUE);
tft.fillRect(160,140,20,140,BLUE);
}
void ServicioBoton()
{
if (millis() > T0 + 250)
{
contador ++;
T0 = millis();
}
}
void valorsensor()
{
tft.fillScreen(BLACK);
tft.setRotation(3);
tft.fillRect(0,120,320,20,BLUE);
tft.fillRect(160,140,20,140,BLUE);
tft.setCursor(10,160);
tft.setTextSize(2);
tft.setTextColor(WHITE);
tft.print("temperatura");
tft.setTextSize(4);
tft.setTextColor(YELLOW);
tft.setCursor(120,190);
tft.drawCircle(110,190,5,YELLOW);
tft.print("C");
sprintf(TX,"%3d",dato1); //aca se le da formato a los datos y se almacena en la variable temporal TX
tft.setCursor(10,190);
tft.setTextSize(4);
tft.setTextColor(YELLOW,BLACK); //En una sola instrucción le das todos los colores a tu presentación: el primero es el color de la fuente y el segundo es el color del fondo de la fuente
tft.println(TX);
tft.setCursor(200,160);
tft.setTextSize(2);
tft.setTextColor(WHITE);
tft.print("aceite");
tft.setCursor(280,190);
tft.setTextSize(2);
tft.print("psi");
sprintf(TX,"%3d",dato2);
tft.setCursor(180,190);
tft.setTextSize(4);
tft.setTextColor(WHITE,BLACK);
tft.println(TX);
tft.setCursor(240,60);
tft.setTextSize(3);
tft.setTextColor(RED);
tft.print("RPM");
sprintf(TX,"%3d",dato3);
tft.setCursor(30,30);
tft.setTextSize(7);
tft.setTextColor(RED,BLACK);
tft.println(TX);
}
void valorsensor2()
{
tft.fillScreen(BLACK);
tft.setRotation(3);
tft.setCursor(10,30);
tft.setTextSize(4);
tft.setTextColor(YELLOW,BLACK);
tft.print("temperatura");
tft.setTextSize(6);
tft.setTextColor(YELLOW,BLACK);
tft.setCursor(190,120);
tft.drawCircle(180,120,5,YELLOW);
tft.print("C");
sprintf(TX,"%3d",dato1); //aca se le da formato a los datos y se almacena en la variable temporal TX
tft.setCursor(50,120);
tft.setTextSize(6);
tft.setTextColor(YELLOW,BLACK); //En una sola instrucción le das todos los colores a tu presentación: el primero es el color de la fuente y el segundo es el color del fondo de la fuente
tft.println(TX);
}
void valorsensor3()
{
tft.fillScreen(BLACK);
tft.setCursor(100,100);
tft.setTextColor(BLUE,BLACK);
tft.print("fin");
}