3 button menu for 16x2 LCD - help needed

does this help you?
(very simple, not sure what you're trying to do)

// menu

// -----------------------------------------------------------------------------
byte pinsBut [] = { A1, A2, A3 };
#define N_BUT   sizeof(pinsBut)

byte butState [N_BUT];

const int NoBut = -1;

int
chkButtons ()
{
    for (unsigned n = 0; n < sizeof(pinsBut); n++)  {
        byte but = digitalRead (pinsBut [n]);

        if (butState [n] != but)  {
            butState [n] = but;

            delay (10);     // debounce

            if (LOW == but)
                return n;
        }
    }
    return NoBut;
}

// -----------------------------------------------------------------------------
struct MenuItem {
    int         mode;
    const char *desc;
};

MenuItem menu0 [] {
    { 1, "mode1" },
    { 2, "mode2" },
    { 3, "mode3" },
};

const int MenuSize = sizeof(menu0) / sizeof(MenuItem);
int menuIdx;

int mode;

// -------------------------------------
enum { Bexit, Badv, Bsel };
int  menuFlag;

int
menu (
    int but )
{
    if (menuFlag) {         // ignore button when 1st pressed
        switch (but) {
        case Bexit:
            break;

        case Badv:
            if (MenuSize <= ++menuIdx)
                menuIdx = 0;
            break;

        case Bsel:
            mode = menu0 [menuIdx].mode;
            Serial.print   ("  menu select - ");
            Serial.println (menu0 [menuIdx].desc);
            return 1;
        }
    }

    menuFlag = 1;

    Serial.print   ("  menu - ");
    Serial.println (menu0 [menuIdx].desc);
    return 0;
}

// -----------------------------------------------------------------------------
const unsigned long MsecPeriod = 2000;
      unsigned long msec0;

void
loop ()
{
    unsigned long msec = millis ();
    if (msec > msec0) {
        msec0 += MsecPeriod;

        switch (mode) {
        default:
            Serial.print   ("mode ");
            Serial.println (mode);
            break;
        }
        menuFlag = 0;
    }

    int but = chkButtons ();
    if (NoBut != but)  {
        if (menu (but))
            msec0 = msec;
        else
            msec0 = msec + 5000;
    }
}

// -----------------------------------------------------------------------------
void
setup ()
{
    Serial.begin (9600);

    for (unsigned n = 0; n < sizeof(pinsBut); n++)  {
        pinMode (pinsBut [n], INPUT_PULLUP);
        butState [n] = digitalRead (pinsBut [n]);
    }
}