OP’s code formatted and inlined.
You’d be surprised how many bugs you’ll find just formatting code. There’s a reason we do it with the indenting and the blocks all lined up a certain way and it isn’t just because it’s pretty.
#include <LiquidCrystal.h>
#include <Keypad.h>
const byte rows = 4; //four rows
const byte cols = 3; //three columns
char keys[rows][cols] = {
 {'1', '2', '3'},
 {'4', '5', '6'},
 {'7', '8', '9'},
 {'#', '0', '*'}
};
byte rowPins[rows] = {2, 3, 4, 5}; //connect to the row pinouts of the keypad left first 4
byte colPins[cols] = {6, 7, 8}; //connect to the column pinouts of the keypad right last 3
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, rows, cols );
const int rs = A7, en = A2, d4 = 9, d5 = 10, d6 = 11, d7 = 12;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int i = 0;
int led = 14;
void setup() {
 // put your setup code here, to run once:
 Serial.begin(9600);
 lcd.begin(16, 2);
 pinMode( led, OUTPUT);
}
void loop() {
 // put your main code here, to run repeatedly:
 lcd.setCursor(0, 0);
 lcd.print("Select item");
 lcd.display();
 char key = keypad.getKey ();
 if (key != NO_KEY) {
  Serial.println(key);
  lcd.setCursor (0, 1);
  lcd.print(key);
  lcd.display();
 }
 if (key != NO_KEY)
 {
  switch (key)
  {
   case '1':
    digitalWrite(led, HIGH);
    delay(1000);
    digitalWrite(led, LOW);
    lcd.clear();
    break;
   case '2':
    digitalWrite(led, HIGH);
    delay(500);
    digitalWrite(led, LOW);
    delay(500);
    lcd.clear();
    break;
  }
  lcd.clear();
  lcd.setCursor (0, 0);
  lcd.print("Enter Amount");
  lcd.display();
  lcd.setCursor (0, 1);
  lcd.print(key);
  lcd.display();
 }
}