During spare time I have been playing with graphical LCD. This time I decided to display simple signals that are stored in microcontroller memory. The idea was to read signal values from look-up table and display waveform on Graphical LCD. To make things more interesting I divided LCD screen in to smaller four screens so I could activate them separately and draw signals in them.
Graphical LCD is the same old HQM1286404 with KS0108 controller. I have used Proteus simulator 128×64 graphical LCD(LGM12641BS1R) which is based on KS0108. How to implement and connect LCD there was a blog post (Simulate KS0108 graphical LCD with Proteus simulator
)about it. I am just going to show main program routine.
As I mentioned I have split 128×64 in to four smaller screens like this:
so I get four smaller 32×63 screens where I can put different information. To do this you can think of many ways of implementation. I have chosen simple solution. I have created a simple structure which holds current active window position and size:
//structure of window coordinates
struct window{
uint8_t xmin;
uint8_t ymin;
uint8_t xmax;
uint8_t ymax;
} win;
And I wrote a function which changes the active window.
void setWindow(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1)
{
//clear previous window frame
ks0108DrawRect(win.xmin, win.ymin, win.xmax-win.xmin, win.ymax-win.ymin, WHITE);
//set new window position and size
win.xmin=x0;
win.ymin=y0;
win.xmax=x1;
win.ymax=y1;
//draw frame on active window
ks0108DrawRect(win.xmin, win.ymin, win.xmax-win.xmin, win.ymax-win.ymin, BLACK);
}
It just assigns new coordinates of new window. Also it draws a rectangle around active window. When changing window position to new, old rectangle is deleted. So this makes pretty cool effect.
For more detail: Simple signal drawing on graphical LCD routines using Atmega8 microcontroller