The HD44780 was intended to be interfaced with a microprocessor bus. Complete microcontrollers were few and far between when it was designed. It is equipped with an eight-bit bus that can be reconfigured for four-bit access. It has a three control lines: register select to choose between internal data and control registers, direction select (read/write), and enable to enable the data when reading or strobe the data when writing. This was a typical Motorola interface, and the Intel style of interface needed some glue logic. In addition, even back in 1978, the access time (450 mS) was slow, so there was a move to interfacing through I/O pins almost from the start.
Since it is possible to read back from the module, I actually used the spare locations of unused digits for variable storage back in the memory-deficient times of the 1970s, but that is not the point of my rant. My point is that our community has a propensity to take the easy way out and treat the module as a write-only module, eventually arriving at a simple interface with a low I/O pin coun tusing simple logic.
Because the HD44780 is a slow processor, it takes a fair amount of time to execute an instruction or data store. It provides a busy flag (BF) that can be read back from the control register, but if the host software takes the delay into account, it is possible to operate the display without using the BF, so there's no need for reading back from the module. This typically means that updating the display can take longer than necessary, since you must allow for the worst-case execution time.
I have seen many occasions where HD44780 has gone into the weeds. The display is incorrect or (more often) unresponsive, even though the main system is running just fine. My solution is to use an extra processor I/O line to control a transistor powering the LCD module. By monitoring the BF signal coupled with the use of timeouts, it is possible to detect when the display is unresponsive. When this occurs, you can cycle the power to the LCD module to force a reset; unfortunately, the module is not equipped with a separate reset line. This hardware deserves some extra attention. You don't want the signals driving the module to be active while the power to it (the module) is turned off, because this could cause an irreversible breakdown of the LCD module inputs.
It is also possible to read back what you have written to verify that the display is operational. This is particularly useful when you are writing a built-in self-test function. Actually, the HD44780 requires the same control word (for the data width) to be written to it three times at startup before the BF becomes operational. If you cannot read it back, you have no idea if the display is present, let alone operational. Here's another trick: Adding another transistor and control pin allows you to flash the backlight to attract the operator's attention.
As I return my soapbox to its place behind my desk, let's hear from you. Am I being overly cautious?