The two TTL-series 74590 counters are connected to form a synchronous 16-bit counter, which is clocked by the clock-generator. The counter output bits 15..3 are used to address two 8 Kbyte read-only memories. The first ('lower') ROM chip drives the eight data-inputs of the LC-display, while the second ('upper') ROM chip drives the R/W and R/S control inputs of the LC-display.
The output bit 2 of the counter is used to generate one Enable-input pulse for the LC-display for each address (15..3) value. The net effect is that the combined upper/lower ROM data is written to the LC-display for each address. Depending on the ROM contents, different texts will be displayed, one character or command at a time. Given the clock-period of 5 milliseconds and the pre-scaling by a factor of 8 (the lower three bits of the counter are discarded or used for the enable pulse), one character is loaded into the display every 5*8 milliseconds - or 25 characters per second. Naturally, you can change this rate by changing the clock-generator period.
Given the above setup, the circuit can display an arbitrary sequence of all characters (and symbols) supported by the LCD controller. However, editing the ROM data manually is a complex and tedious task. Therefore, the ROM data for the demo was generated by a Java program, while the actual phrases were taken from the database of the Unix 'fortune' program.
If you want to modify the phrases, click here for the source-code of the PhrasesCompiler program. Download, save as 'PhrasesCompiler.java', and compile with your favorite Java compiler. The program expects the name of the phrases input file as its first command-line argument, while the output filenames 'phrases-upper.rom' and 'phrases-lower.rom' are hard-coded. Each line of the input file should contain one line of ASCII/ISO-8859 text with less than 78 characters.
Run the applet | Run the editor (via Webstart)