A typical monochrome graphic screen, which may use LCD, E Ink, LED, OLED, Vacuum Fluorescent or some other screen technology, consists of a large array of pixels that are triggered using a X and Y axis matrix of connections. The actual drive of each pixel is provided by a display controller IC. This may already be built into your screen, may need to be provided by you externally or may be built into the particular microcontroller or processor you are using. This display controller IC will constantly scan the matrix of pixels, turning on or off each pixel based on the data held in the IC’s memory. In its basic form the IC will have a data buffer to which you write data to tell the controller IC which pixels you want on and which you want off. This driver is designed to be used with any screen which can be controlled in this way, allowing its use with the simplest and also more sophisticated controllers.
The problem with displaying graphics and text on a monochrome screen is that you typically need to transfer pixel data as bytes which means that either the X or the Y axis of your screen is being addressed in 8 bit multiples. For example:-
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
| 23
22 21 20 19 18 17 16 |
||||||||||||||||||||||||||||||||
| 15
14 13 12 11 10 9 8 |
||||||||||||||||||||||||||||||||
| 7
6 5 4 3 2 1 0 |
In the above example the layout of a 32 x 24 pixel screen is shown. The controller IC has a data memory buffer that is laid out say as follows:-
Address, Pixels
0 Column 0, Rows 0:7
1 Column 0, Rows 8:15
2 Column 0, Rows 16:23
3 Column 1, Rows 0:7
||
95 Column 31, Rows 16:23
If you want to turn on the top left pixel you would write 0×01 to address 2 – easy enough. If you want to display a bitmap that you have in processor memory that is 8 bits high by 10 bits wide to be displayed with its bottom left corner 8 rows up and 5 columns in then no problem, your working with the screen and its layout. However, this is of course very limiting and as soon as you want to be able to display a bitmap that isn’t sized in 8 bit multiples in the byte based axis, or want to be able to display bitmaps at any position on the screen then things get a whole lot more complex. Even worse, what if you need to use the screen rotated by 90º? As you can see, having to work with a graphic screen and this byte addressing can severely limit what you are able to do with the screen. This driver solves this problem and allows you to display bitmap graphics and text of any size anywhere on the screen.



