LCD Code causes Arduino to not execute void setup AND void loop

Try this code using the hd44780 library. You will need to install the library per the instructions in my first reply. This code works fine with my Uno and a 2004 LCD. I prints all the stuff in setup() and sends OKAY, Also, IN LOOP to serial monitor. I made it send IN LOOP only once so it does not spam serial monitor and also it will erase line one and print the current value of millis() once per second.

/********************************
   name:I2C LCD2004
   function:You should now see your I2C LCD2004 display "Hello,world!","IIC/I2C LCD2004"
   "20 cols, 4 rows","www.sunfounder.com"
 ********************************/
//Email:service@sunfounder.com
//Website:www.sunfounder.com

/********************************/
// include the library code
#include <Wire.h>
//#include <LiquidCrystal_I2C.h>
#include <hd44780.h>                       // main hd44780 header
#include <hd44780ioClass/hd44780_I2Cexp.h> // i2c expander i/o class header

//LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
hd44780_I2Cexp lcd;

/*********************************************************/
bool loopFlag = false;

void setup()
{
   Serial.begin(9600);
   Serial.println("OKAY");
   delay(2000);
   //lcd.init();  //initialize the lcd
   lcd.begin(20, 4);
   lcd.backlight();  //open the backlight

   lcd.setCursor ( 0, 0 );            // go to the top left corner
   lcd.print("    Hello,world!    "); // write this string on the top row
   lcd.setCursor ( 0, 1 );            // go to the 2nd row
   lcd.print("   IIC/I2C LCD2004  "); // pad string with spaces for centering
   lcd.setCursor ( 0, 2 );            // go to the third row
   lcd.print("  20 cols, 4 rows   "); // pad with spaces for centering
   lcd.setCursor ( 0, 3 );            // go to the fourth row
   lcd.print(" www.sunfounder.com ");
   Serial.println("Also");
}
/*********************************************************/
void loop()
{
   if (loopFlag == false)
   {
      Serial.println("IN LOOP");
      delay(2000);
      loopFlag = true;
   }
   static unsigned long timer = 0;
   unsigned long interval = 1000;
   if (millis() - timer >= interval)
   {
      timer = millis();
      lcd.setCursor(0,0);
      lcd.print("                    "); // clear old data
      lcd.setCursor(3,0);
      lcd.print("millis = ");
      lcd.print(millis());
   }
}
/************************************************************/

If all that you see is still just blocks, try adjusting the contrast.