Member-only story
Play with 16x2 LCD Display
in Verilog Code
LCD display technology has been around for a long time, long before the advent of LCD TVs that have vibrant colors. In this article, we are focusing on this LCD1602 character LCD.
LCD1602 (or HD44780 as one of its key components) has two rows, each of which can display 16 characters.
Instead of calling Arduino library functions (for example, https://github.com/arduino-libraries/LiquidCrystal/blob/master/src/LiquidCrystal.cpp), we are going to dive into the timing diagrams in the original HD44780 datasheets.
It can be a lot of fun reading datasheets, and experimenting with the module. In this case, the main difficulty is to figure out two timing constraints: one is to shift the data into HD44780, the other is the time for it to execute the command/data.
HD44780 datasheet https://www.pololu.com/file/0J72/HD44780.pdf or LCD1602 module datasheet https://www.sparkfun.com/datasheets/LCD/ADM1602K-NSW-FBS-3.3v.pdf
To simplify, we only perform “write” operations, by sending either commands (when RS-line = 0) or ASCII data (when RS-line = 1), so as to display ASCII characters on the LCD display.
I am using the DE-10 LITE (with ALTERA MAX10) for experimenting. I’ve posted the essential Verilog code below, so any FPGA development…
