problem with 1602 display

So, im a beginner, trying to print text from the serial monitor to the 1602 display but every time i send the message, the display keep printing out -1 and gradually fill up the screen. After I use this command to stop the -1 “if(x!=-1){lcd.print(x);}” and type the message it display number instead of text like
a=97
s=98
d=99
f=100…
and i don’t know why. Please help

#include <LiquidCrystal.h>
LiquidCrystal lcd(2,3,5,7,9,11);
int x;
int clrpin=24;
int y=0;
int z=0;

void setup() {
pinMode(clrpin, INPUT_PULLUP);
pinMode(ppin, INPUT_PULLUP);
lcd.begin(16,2);
Serial.begin(9600);
}

void loop() {
x=Serial.read();
z=digitalRead(ppin);
if(x!=-1){lcd.print(x);
delay(500);
}
y=digitalRead(clrpin);
if(y==LOW){
lcd.clear();
}
}

Edit: I did check all the wiring and it was right. When i try to use lcd.print("Hello world"), it work just fine

void loop() {
x=Serial.read()

You are reading from the serial buffer before you know if anything is there (a read of an empty buffer returns -1).

The serial input basics tutorial shows how to read incoming serial data.

it display number instead of text like
a=97
s=98
d=99
f=100....

Were the numbers more like?
a = 97
s = 115
d = 100
f = 102

The serial monitor sends ASCII character codes (numbers) that represents the typed characters.