Menu to choose values for system

I have been writing a menu which allows the user to traverse the menu using two button and change the value with another two buttons.

I am experiencing an issue that the values go either continuously up or down depending upon which function comes first.

What am I missing? I did not have these problems before I added the subMenu to the design.

I am using an Arduino Uno with an LCD Keypad Shield connected to it.

/*
 * Menu
 */
//For LCD screen functions
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

const char rightButton = 'a'; // 23
const char upButton = 'b'; // 1323
const char downButton = 'c'; // 3083
const char leftButton = 'd'; // 4813
const char selectButton = 'e'; // 7232
const char noButtonSelected = 'f'; // 1023

char mainMenuChoice = 'f';
char subMenuChoice = 'A';

//To hold user value choices
unsigned int chooseO3 = 0; 
unsigned const int ppmCount = 5;
unsigned int chooseCycle = 0; //
unsigned const int cycleCount = 10;

// put your setup code here, to run once:
void setup() 
{
  lcd.begin(16,2);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("KWJ ENGINEERING");
  lcd.setCursor(0,1);
  lcd.print("SPEC SENSORS");
  delay (1500);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("S4PPE Project");
  lcd.setCursor(0,1);
  lcd.print("Version 2.4");
  delay(1500);
}

// put your main code here, to run repeatedly:
void loop() 
{
  delay (25);
  mainMenuChoice = readButtons();
  // Main Menu
  switch (mainMenuChoice)
  {
    //make a number value go up and down for menu traversal.
    case noButtonSelected:
      switch (subMenuChoice)
      {
         case 'A' :
            lcd.clear();
            lcd.setCursor(0,0);
            lcd.print("Select o3Conc");
            lcd.setCursor(0,1);
            lcd.print(chooseO3);
            lcd.setCursor(4,1);
            lcd.print("ppb");
            //delay(50);
            break;

         case 'B':
            lcd.clear();
            lcd.setCursor(0,0);
            lcd.print("Select time");
            lcd.setCursor(0,1);
            lcd.print(chooseCycle);
            lcd.setCursor(4,1);
            lcd.print("min");
            break;

         case 'C':
            lcd.clear();
            lcd.setCursor(0,0);
            lcd.print("Run Cycle");
            lcd.setCursor(0,1);
            lcd.print(chooseCycle);
            lcd.setCursor(4,1);
            lcd.print("min");
            lcd.setCursor(9,1);
            lcd.print(chooseO3);
            lcd.setCursor(13,1);
            lcd.print("ppb");
            break;
       }    
    
    case upButton:
    delay(25);
      if (subMenuChoice == 'A') 
      {chooseO3 += ppmCount;
      break;}
      else if (subMenuChoice == 'B') chooseCycle+=cycleCount;
      break;
      
    case downButton:
    delay(25);
      if (subMenuChoice == 'A') 
      {chooseO3-=ppmCount;
      break;}
      else if (subMenuChoice == 'B') chooseCycle-=cycleCount;
      break; 

    case leftButton:
      if (subMenuChoice > 'A') subMenuChoice -= 1;
      else subMenuChoice = 'A';
      break;      
      
    case rightButton:
      if (subMenuChoice < 'C') subMenuChoice += 1;
      else subMenuChoice = 'C'; 
    
  }

}

int readButtons ()
{
  unsigned long reading = 0;

  delay (75);
  reading = analogRead(0);
  delay(100);
  if (reading > 1000) return noButtonSelected;
  
  //rightButton read at 0
  if (reading < 50) return rightButton;

  //upButton read at 144
  if (reading < 250) return upButton;

  //downButton read at 329
  if (reading < 450) return downButton;

  //leftButton read at 504
  if (reading < 650) return leftButton;

  //selectButton read at 741
  if (reading < 850) return selectButton;
}

const char rightButton = 'a'; // 23

case 'A' :

etc.

This might be an issue.