AVR library for lc7981Important
This page is kept in English to make it available to an international audience.
IdeaAfter discovering a quite cheap touchscreen lcd on the Roboternetz website,
I decided that such a display might be a useful addition to some of my projects.
Therefore I bought some of them and started to write a C-library to use them with an ATmega32.
All the other librarys available missed some of the features I needed or they had some inefficient code. (just my personal Opinion)
The result was a small and quite flexible library for the lc7981-chip which is used by this display.
- Textmode with scrolling (just like a on linux console)
- Plotting bitmaps of any size anywhere you want
- Plotting Text useing any Font you like anywhere
- Setting and clearing single Pixels (the killerfature)
I can hear you say now : 'That's just like any other library out there. So where's the point in using yours ?'
The lc7981 has to ways of setting Pixels.
The first is using it's set pixel command.
The advantage of plotting a bitmap with this command is that you get a simple short sourcecode,
and it is easy to place a bitmap anywhere you like on the screen.
A big disadvantage of doing it this way is that you'll need to transfer 2byte per pixel.
Plotting a 10x10px bitmap will result in 200 bytes of data being send.
The other approach is to transfer a byte directly into the display memory.
One byte represents 8 pixel of a display row.
Using this approach, transferring the 10x10 bitmap will require 4 bytes per row,
which results in 40 bytes in total.
The major disadvantage is that it is difficult to place a bitmap on an X-coordinate
that isn't a multiple of 8.
My library uses the second approach in combination with some tricky bit shift operations
to be able to plot a bitmap fast and at every X-ccordinate.
It needs some more computing time, but I thinks it's a good trade-off.
Wiring stuff upMy primary aim was the use the DataVision DG-16080-11 lcd,
therefore I'll provide some info how I wired it up here.
Using a plain lc7981 with some other lcd would be beyond the scope of this document.
See the datasheet here for the display pinout.
Connect each one of RS, RW and EN to a free pin of your controller. You'll have to specify the pins used in the lc7981.h.
RES (Reset) has to be high and CS has to be low, so they have to be connected to Vcc and Gnd.
The DB0-DB7 pins must be connect to one port of the AVR. Like for example PortB.
Connect DB0 to PB0, DB1 to PB1 and so on.
The Display supply voltage (pin 3) has to be connected to pin 17 and Gnd using a potentiometer.
The potentiometer will be used to adjust the contrast.
Just like it is done in this schematic by Flash2over.
I'll try to provide an own schematic as soon as possible.
LicenseThe Versions below 0.6 beta were released under GPL.
All newer versions including 0.6 and above are/will be realeased under MPL.
I won't support the old GPLed versions anymore.
You may ask why I changed my license.
The answer is rather simple:
I used GPL since it wanted my library to profit from bugs that get fixed and features that get written
by other people who use it.
What I did not think about was the following scenario :
Somebody uses my lib in an automated garden irrigation for his carrots.
He does not change anything or adds any feature.
He just uses my work, but he has to publish his source under GPL.
(Just in case he wants to publish it.)
I don't see any advantages in that.
(Not that I don't like gardening or carrots, but I can't see a relation to my work here.)
So I cause additional work for this poor guy and take away his freedom to chose an own license
without any advantages for me, my work or him and his work.
This is simply not what I intended to do in the first place.
Okay, you might complain that I could have used LGPL instead of MPL.
But it's terms are rather unclear to me and the rule of thumb with dynamic and static linking stuff
is ridiculous when you use a mircocontroller where you have to use static linking.
Therefore I use MPL so I still can profit from changes made to my code,
but other can use it how they want as long as they don't change it.
All the files can be obtained here : https://github.com/LongHairedHacker/avr-lc7981/archive/master.zip
The documentation can be found here
If you need the (not supported and not maintained) GPL Version or the latest development version use git to clone https://github.com/LongHairedHacker/avr-lc7981
I would not recommend using the GPL version..
If you have any questions feel free to ask using my mail adress, that can be found in the source code.
Have fun with your display
First published : 12.4.2010 16:47:49 Last edit : 12.4.2010 16:47:49 Viewed by 25110 visitors.