|
Using
a Graphics-Based LCD
Module with C
by Bob Perrin and Tak Auyeung
Start
• Software Overview •
The Bottom Layer • Initializing
the LCD Display • Shadow
Display • Drawing Dots
and Lines • Printing
Text • Extensions
• Sources and PDF
THE BOTTOM LAYER
Before implementing
high-level graphics primitives, the driver needs
to communicate with the Hantronix HDG12864F-1.
Thanks to the serial interface, the LCD requires
only four bit-programmable digital I/O lines, although,
in this article, the controller has power over all
seven signals for experimentation purposes. The
chip select (*CS1), write (*WR), and read (*RD)
signals can be pulled low, low, and high, respectively.
This leaves only four signals to be controlled:
serial-input (SI), serial-clock (SCL), address (A0),
and reset (*RES).
In serial mode, the
Hantronix HDG12864F-1 does not provide status
check or return pixel information. The status check
is not necessary because the serial interface is
slow enough that the LCD controller completes an
operation before the next one arrives. Also, for
a controller with a lot of RAM, there is no need
to return pixel information. The JK Microsystems Flashlite
controller has plenty of RAM to shadow store the
pixels on the LCD screen. The 128 × 64 pixel screen
needs
bytes to keep a copy of the entire LCD screen.
The JK Microsystems Flashlite
uses the NEC V25+ processor with on-chip bit-programmable
digital I/O ports. These ports are memory-mapped
to the memory space available on the V25+. The following
Borland C++ definitions define the data port, direction/mode
port, and control port, respectively.
• volatile unsigned
char far * const port0 = (unsigned char far *)0xf000ff00L
• volatile unsigned
char far * const port0mode = (unsigned char far
*)0xf000ff01L
• volatile unsigned
char far * const port0ctrl = (unsigned char far
*)0xf000ff02L
It is important to
indicate volatile for the locations pointed to by
the pointers. This keyword tells the compiler that
the locations pointed to can be accessed in parallel.
The FAR keyword is also important to indicate that
the addresses are not in the data segment. Note
that these are constant pointers. In other words,
the pointers themselves cannot be altered.
With these pointers
declared, accessing the ports is a simple matter
of de-referencing the pointers. Both read and write
operations can be performed when accessing a normal
memory location via pointers.
The driver configures
all bit-addressable I/O pins as general-purpose
output signals. When the graphics LCD is initialized,
the reset line is toggled to ensure a hardware reset
for the COG module. The driver software transmits
commands to the graphics LCD by bit-banging the
SI and SCL lines.
PREVIOUS
NEXT
|