16×2 LCD Display not working – Possible Reasons


  • Display showing black boxes: This problem tends to occur if you have chosen a very low value of the display contrast control resistor. The contrast control resistor is connected from pin#3(VEE) to pin#1(VSS/GND). This resistor value should be 4.7K ohms. Also, display may show black boxes even when you are writing the data very fast onto the display. So make sure you provide sufficient time delay after you send each character. 
  • Display showing wrong characters: The display shows wrong characters even when you are sending the right ASCII values. This problem is because the display is not receiving the proper data since there is a problem in the connection of data lines. There might be a short circuit  between adjacent data lines or it might also occur if some of the data lines are not properly connected. So make sure you examine for short circuits between adjacent tracks going to LCD display.
  • Display showing totally blank lines: This problem also occurs if you have set the contrast control resistor value too high. So make sure you have selected the value to be around 4.7K ohms. If your display contrast is ok, then you can see very light black boxes in character positions instead of totally blank lines. 
  • Contrast OK, Delay OK but still no display: If you are not getting proper character display even after setting the right contrast values and providing the right delay in code, then there might be a chance that your controller’s logic voltage levels are not compatible with the display’s. The LCD display works at 5V logic levels so if you are powering your controller with a 3.3V or a power supply lower than 5V, then make sure you add strong 4.7K Ohms pull ups to all the 11 LCD lines (8 – data, 3 – control). Connect the pull ups from LCD lines to +5V power supply (LCD supply).

 Apart from then above things i would also suggest you to make sure,

#1. You are sending the proper commands. The address of each lines on LCD are not consecutive and there are offsets. So make sure you are using the appropriate LINE addresses  as given in the LCD datasheet. See about addresses here, 16×4 LCD/20×4 LCD line addresses 

#2. Providing proper delay between data and command writes

#3. You are holding the enable pin HIGH long enough for the display to latch the data in.

#4. You wait for the LCD to initialise itself on power up and then start sending commands. DB7 pin indicates LCD busy.

Also see :


Leave a Comment