Arduino Uno LCD+Ethernet

Hey guys,
I’m having some issues stacking my LCD screen on top of my Ethernet shield.
Can I use them at the same time without any rewiring?

I’m making a program that pings my server every few seconds and it needs to display the output to tmy LCD keypad shield which is stacked on top of my Ethernet shield (which is stacked on top of my arduino).
I believe the pins don’t allow this.
Everytime I try to connect with DHCP it fails and gives me this ip: 255.255.255.255
When I remove the LCD shield and try again with the exact same code, it works perfectly.
What am I doing wrong?

Thanks in advance!

EDIT: sometimes it just hangs waiting for DHCP
Kevin

#include <LiquidCrystal.h>
#include <SPI.h>
#include <Ethernet.h>
#include <ICMPPing.h>

//Network
//------------------------------------------------------------//
byte mac[] = {0xDE,0xAD,0xBE,0xEF,0xFE,0x10};
IPAddress ip(192, 168, 2, 50);

//LCD
//------------------------------------------------------------//
const int pin_RS = 8; // arduino pin wired to LCD RS
const int pin_EN = 9; // arduino pin wired to LCD EN
const int pin_d4 = 4; // arduino pin wired to LCD d4
const int pin_d5 = 5; // arduino pin wired to LCD d5
const int pin_d6 = 6; // arduino pin wired to LCD d7
const int pin_d7 = 7; // arduino pin wired to LCD d8
const int pin_BL = 13; // arduino pin wired to LCD backlight circuit

LiquidCrystal lcd( pin_RS,  pin_EN,  pin_d4,  pin_d5,  pin_d6,  pin_d7);



//Brightness
//------------------------------------------------------------//
int lcd_key     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

//Check buttonpress
int read_LCD_buttons()
{
  adc_key_in = analogRead(0);
  if (adc_key_in > 1000) return btnNONE;
  if (adc_key_in < 50)   return btnRIGHT;
  if (adc_key_in < 250)  return btnUP;
  if (adc_key_in < 320)  return btnDOWN;
  if (adc_key_in < 500)  return btnLEFT;
  if (adc_key_in < 850)  return btnSELECT;
  return btnNONE;
}
//------------------------------------------------------------//

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Serial.println("Serial Connected");
  lcd.begin(16, 2);         //Start LCD Scherm
  lcd.clear();              //Leeg LCD Scherm
  lcd.setCursor(0, 0);
  lcd.print("Short timeout ");
  delay(2500);
  lcd.clear();
  lcd.print("DHCP: ");
  Serial.println("Attempting DHCP");

  if (Ethernet.begin(mac) == 0) {
    Serial.println("No DHCP");
    lcd.print("Failed");
    Ethernet.begin(mac, ip);
  }
  else {
    Serial.println("Success");
    lcd.print("Success");
  }
  lcd.setCursor(0, 1);
  Serial.print(Ethernet.localIP());
  lcd.print(Ethernet.localIP());
}

void loop() {
  
}
const int pin_BL = 13; // arduino pin wired to LCD backlight circuit

Pin 13 is the SPI SCK pin. Using that for backlight may conflict with SPI operation.

groundFungus:

const int pin_BL = 13; // arduino pin wired to LCD backlight circuit

Pin 13 is the SPI SCK pin. Using that for backlight may conflict with SPI operation.

Sadly changing it didn't fix my issues, I've tried all other pins

const int pin_d4 = 4; // arduino pin wired to LCD d4

Is another possible pin conflict. Pin 4 is used for the SD card chip select on the Arduino Ethernet card.

groundFungus:

const int pin_d4 = 4; // arduino pin wired to LCD d4

Is another possible pin conflict. Pin 4 is used for the SD card chip select on the Arduino Ethernet card.

Yeah I've tried changing both, but I can't figure out what pins to bind them to, either my screen is gibberish or it doesnt work and ethernet DHCP never works