EmbeddedRelated.com
Forums

4bit LCD C code

Started by cbhargava March 5, 2011
Hi,

I'm looking for a 4bit LCD "c" code to drive a hd47780 LCD with Launchpad. Is there any "C" library available? I check the files section but only found assembly code.

Any pointers would be appreciated.

Thanks.

Chetan

Beginning Microcontrollers with the MSP430

You can find this ! follow this

download FreeRTOS 6.1.1. (free)
in the directory example there is a lot of C code for many board
The MBC 2300 board ( keil ) have a build in LCD 16 chars X 2 lines and you can
see a driver in C code for init, clear and write on this kind of display

With msp430, the code will be very similar, just change the IO port and timing
Bye

Hi,

I can't find the example directory in the source tree.
Did I download the correct file?

Thanks.

Chetan
\FreeRTOSV6.1.1.zip\FreeRTOSV6.1.1\Source\
include\
portable\
croutine.c
list.c
queue.c
readme.txt
tasks.c
\FreeRTOSV6.1.1\Source\portable\GCC\MSP430F449\
port.c
portmacro.h

\FreeRTOSV6.1.1\Source\include\
croutine.h
FreeRTOS.h
list.h
mpu_wrappers.h
portable.h
projdefs.h
queue.h
semphr.h
StackMacros.h
task.h

\FreeRTOSV6.1.1\Demo\msp430_GCC\
ParTest\
serial\
FreeRTOSConfig.h
gdb.ini
main.c
makefile

--- In m..., Ren wrote:
>
> You can find this ! follow this
>
> download FreeRTOS 6.1.1. (free)
> in the directory example there is a lot of C code for many board
> The MBC 2300 board ( keil ) have a build in LCD 16 chars X 2 lines and you can
> see a driver in C code for init, clear and write on this kind of display
>
> With msp430, the code will be very similar, just change the IO port and timing
> Bye
>

SUlSQyB0aGUgZXhhbXBsZSBjb2RlIGlzIGEgc2VwZXJhdGUgemlwIGZpbGUuIEJ1dCBpdHMg
YmVlbiBhZ2VzIHNpbmNlIEkgZG93bmxvYWRlZCBpdC4KCmNiaGFyZ2F2YSA8Y2JoYXJnYXZh
QHlhaG9vLmNvbT4gd3JvdGU6Cgo+SGksCj4KPkkgY2FuJ3QgZmluZCB0aGUgZXhhbXBsZSBk
aXJlY3RvcnkgaW4gdGhlIHNvdXJjZSB0cmVlLgo+RGlkIEkgZG93bmxvYWQgdGhlIGNvcnJl
Y3QgZmlsZT8KPgo+VGhhbmtzLgo+Cj5DaGV0YW4KPgo+Cj5cRnJlZVJUT1NWNi4xLjEuemlw
XEZyZWVSVE9TVjYuMS4xXFNvdXJjZVwKPmluY2x1ZGVcCj5wb3J0YWJsZVwKPmNyb3V0aW5l
LmMKPmxpc3QuYwo+cXVldWUuYwo+cmVhZG1lLnR4dAo+dGFza3MuYwo+Cj4KPlxGcmVlUlRP
U1Y2LjEuMVxTb3VyY2VccG9ydGFibGVcR0NDXE1TUDQzMEY0NDlcCj5wb3J0LmMKPnBvcnRt
YWNyby5oCj4KPlxGcmVlUlRPU1Y2LjEuMVxTb3VyY2VcaW5jbHVkZVwKPmNyb3V0aW5lLmgK
PkZyZWVSVE9TLmgKPmxpc3QuaAo+bXB1X3dyYXBwZXJzLmgKPnBvcnRhYmxlLmgKPnByb2pk
ZWZzLmgKPnF1ZXVlLmgKPnNlbXBoci5oCj5TdGFja01hY3Jvcy5oCj50YXNrLmgKPgo+XEZy
ZWVSVE9TVjYuMS4xXERlbW9cbXNwNDMwX0dDQ1wKPlBhclRlc3RcCj5zZXJpYWxcCj5GcmVl
UlRPU0NvbmZpZy5oCj5nZGIuaW5pCj5tYWluLmMKPm1ha2VmaWxlCj4KPgo+Cj4tLS0gSW4g
bXNwNDMwQHlhaG9vZ3JvdXBzLmNvbSwgUmVuw6kgPHJlbmUubGVmZWJ2cmVALi4uPiB3cm90
ZToKPj4KPj4gWW91IGNhbiBmaW5kIHRoaXMgISBmb2xsb3cgdGhpcwo+PiAKPj4gZG93bmxv
YWQgRnJlZVJUT1MgNi4xLjEuICAoZnJlZSkKPj4gaW4gdGhlIGRpcmVjdG9yeSBleGFtcGxl
ICB0aGVyZSBpcyBhIGxvdCBvZiBDIGNvZGUgZm9yIG1hbnkgYm9hcmQKPj4gVGhlIE1CQyAy
MzAwIGJvYXJkICgga2VpbCApICBoYXZlIGEgYnVpbGQgaW4gTENEIDE2IGNoYXJzICBYIDIg
bGluZXMgYW5kIHlvdSBjYW4KPj4gc2VlIGEgZHJpdmVyIGluIEMgY29kZSBmb3IgaW5pdCwg
Y2xlYXIgYW5kIHdyaXRlIG9uIHRoaXMga2luZCBvZiBkaXNwbGF5Cj4+IAo+PiBXaXRoIG1z
cDQzMCwgdGhlIGNvZGUgd2lsbCBiZSB2ZXJ5IHNpbWlsYXIsIGp1c3QgY2hhbmdlIHRoZSBJ
TyBwb3J0IGFuZCB0aW1pbmcKPj4gQnllCj4+Cj4KPgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQoKVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGUgbXNwNDMwIGdyb3Vw
LCBzZW5kIGFuIGVtYWlsIHRvOgptc3A0MzAtdW5zdWJzY3JpYmVAZWdyb3Vwcy5jb20KCllh
aG9vISBHcm91cHMgTGlua3MKCjwqPiBUbyB2aXNpdCB5b3VyIGdyb3VwIG9uIHRoZSB3ZWIs
IGdvIHRvOgogICAgaHR0cDovL2dyb3Vwcy55YWhvby5jb20vZ3JvdXAvbXNwNDMwLwoKPCo+
IFlvdXIgZW1haWwgc2V0dGluZ3M6CiAgICBJbmRpdmlkdWFsIEVtYWlsIHwgVHJhZGl0aW9u
YWwKCjwqPiBUbyBjaGFuZ2Ugc2V0dGluZ3Mgb25saW5lIGdvIHRvOgogICAgaHR0cDovL2dy
b3Vwcy55YWhvby5jb20vZ3JvdXAvbXNwNDMwL2pvaW4KICAgIChZYWhvbyEgSUQgcmVxdWly
ZWQpCgo8Kj4gVG8gY2hhbmdlIHNldHRpbmdzIHZpYSBlbWFpbDoKICAgIG1zcDQzMC1kaWdl
c3RAeWFob29ncm91cHMuY29tIAogICAgbXNwNDMwLWZ1bGxmZWF0dXJlZEB5YWhvb2dyb3Vw
cy5jb20KCjwqPiBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgZ3JvdXAsIHNlbmQgYW4gZW1h
aWwgdG86CiAgICBtc3A0MzAtdW5zdWJzY3JpYmVAeWFob29ncm91cHMuY29tCgo8Kj4gWW91
ciB1c2Ugb2YgWWFob28hIEdyb3VwcyBpcyBzdWJqZWN0IHRvOgogICAgaHR0cDovL2RvY3Mu
eWFob28uY29tL2luZm8vdGVybXMvCgo
cbhargava wrote:
> Hi,
>
> I can't find the example directory in the source tree.
> Did I download the correct file?
>
>
Ok, Best, Dan.

(With a pcf8574 it just takes two pins, and those pins can do a whole
lot more too. This was from an old 149 project, I wasn't worried about
eating pins or CPU time.)

Tested, works fine, you should be able to work out extra commands from
the data sheet:
~~~

#define LCD_MODE_BIT 0x02
#define LCD_R_W_BIT 0x04
#define LCD_ENABLE_BIT 0x08
#define LCD_BF_FLAG 0x10
#define LCD_CMD_MASK 0x0e
#define LCD_DATA_MASK 0xf0
#define LCD_PORT_OUT P4OUT
#define LCD_PORT_DIR P4DIR

void putchar( uint16_t in )
{
LCD_PORT_OUT= ( in & 0xf0 ) | LCD_MODE_BIT;
LCD_PORT_OUT|= LCD_ENABLE_BIT;
nop( );
LCD_PORT_OUT&= ~LCD_ENABLE_BIT;
//
LCD_PORT_OUT= ( ( in << 4 ) & 0xf0 ) | LCD_MODE_BIT;
LCD_PORT_OUT|= LCD_ENABLE_BIT;
nop( );
LCD_PORT_OUT&= ~LCD_ENABLE_BIT;
nop( );
LCD_PORT_OUT= 0;
brief_pause( 200 );
}

void lcd_command( uint16_t cmd )
{
LCD_PORT_OUT= ( cmd & 0xf0 );
LCD_PORT_OUT|= LCD_ENABLE_BIT;
nop( );
LCD_PORT_OUT&= ~LCD_ENABLE_BIT;
//
LCD_PORT_OUT= ( ( cmd << 4 ) & 0xf0 );
LCD_PORT_OUT|= LCD_ENABLE_BIT;
nop( );
LCD_PORT_OUT&= ~LCD_ENABLE_BIT;
nop( );
LCD_PORT_OUT= 0;
brief_pause( 3000 );
}
void lcd_init( )
{
//lcd
LCD_PORT_OUT= 0;
LCD_PORT_DIR|= LCD_DATA_MASK | LCD_CMD_MASK;

//assume VCC+ > 20ms away

//first init
LCD_PORT_OUT= 0x30;
LCD_PORT_OUT|= LCD_ENABLE_BIT;
nop( );
LCD_PORT_OUT&= ~LCD_ENABLE_BIT;
//pause should be set by mclk div, > 4.1ms
brief_pause( 15000 );

//second init
LCD_PORT_OUT|= LCD_ENABLE_BIT;
nop( );
LCD_PORT_OUT&= ~LCD_ENABLE_BIT;
//pause should be set by mclk div, > 100us
brief_pause( 500 );

//four bit mode
LCD_PORT_OUT= 0x20;
LCD_PORT_OUT|= LCD_ENABLE_BIT;
nop( );
LCD_PORT_OUT&= ~LCD_ENABLE_BIT;
brief_pause( 1000 );

//from here 'lcd_command can be used
//operational mode 5x8 1/16 duty( two lines )
lcd_command( 0x28 );
brief_pause( 1000 );

//display off
lcd_command( 0x08 );
brief_pause( 1000 );

//display on, no cursor, no blink...
lcd_command( 0x0c );
brief_pause( 1000 );
LCD_PORT_OUT= 0;
}

CgpNYXJrIEV2ZXJldHQgPG1hcmN1c3dheW51c0B5YWhvby5jb20+IHdyb3RlOgoKPklJUkMg
dGhlIGV4YW1wbGUgY29kZSBpcyBhIHNlcGVyYXRlIHppcCBmaWxlLiBCdXQgaXRzIGJlZW4g
YWdlcyBzaW5jZSBJIGRvd25sb2FkZWQgaXQuCj4KPmNiaGFyZ2F2YSA8Y2JoYXJnYXZhQHlh
aG9vLmNvbT4gd3JvdGU6Cj4KPj5IaSwKPj4KPj5JIGNhbid0IGZpbmQgdGhlIGV4YW1wbGUg
ZGlyZWN0b3J5IGluIHRoZSBzb3VyY2UgdHJlZS4KPj5EaWQgSSBkb3dubG9hZCB0aGUgY29y
cmVjdCBmaWxlPwo+Pgo+PlRoYW5rcy4KPj4KPj5DaGV0YW4KPj4KPj4KPj5cRnJlZVJUT1NW
Ni4xLjEuemlwXEZyZWVSVE9TVjYuMS4xXFNvdXJjZVwKPj5pbmNsdWRlXAo+PnBvcnRhYmxl
XAo+PmNyb3V0aW5lLmMKPj5saXN0LmMKPj5xdWV1ZS5jCj4+cmVhZG1lLnR4dAo+PnRhc2tz
LmMKPj4KPj4KPj5cRnJlZVJUT1NWNi4xLjFcU291cmNlXHBvcnRhYmxlXEdDQ1xNU1A0MzBG
NDQ5XAo+PnBvcnQuYwo+PnBvcnRtYWNyby5oCj4+Cj4+XEZyZWVSVE9TVjYuMS4xXFNvdXJj
ZVxpbmNsdWRlXAo+PmNyb3V0aW5lLmgKPj5GcmVlUlRPUy5oCj4+bGlzdC5oCj4+bXB1X3dy
YXBwZXJzLmgKPj5wb3J0YWJsZS5oCj4+cHJvamRlZnMuaAo+PnF1ZXVlLmgKPj5zZW1waHIu
aAo+PlN0YWNrTWFjcm9zLmgKPj50YXNrLmgKPj4KPj5cRnJlZVJUT1NWNi4xLjFcRGVtb1xt
c3A0MzBfR0NDXAo+PlBhclRlc3RcCj4+c2VyaWFsXAo+PkZyZWVSVE9TQ29uZmlnLmgKPj5n
ZGIuaW5pCj4+bWFpbi5jCj4+bWFrZWZpbGUKPj4KPj4KPj4KPj4tLS0gSW4gbXNwNDMwQHlh
aG9vZ3JvdXBzLmNvbSwgUmVuw6kgPHJlbmUubGVmZWJ2cmVALi4uPiB3cm90ZToKPj4+Cj4+
PiBZb3UgY2FuIGZpbmQgdGhpcyAhIGZvbGxvdyB0aGlzCj4+PiAKPj4+IGRvd25sb2FkIEZy
ZWVSVE9TIDYuMS4xLiAgKGZyZWUpCj4+PiBpbiB0aGUgZGlyZWN0b3J5IGV4YW1wbGUgIHRo
ZXJlIGlzIGEgbG90IG9mIEMgY29kZSBmb3IgbWFueSBib2FyZAo+Pj4gVGhlIE1CQyAyMzAw
IGJvYXJkICgga2VpbCApICBoYXZlIGEgYnVpbGQgaW4gTENEIDE2IGNoYXJzICBYIDIgbGlu
ZXMgYW5kIHlvdSBjYW4KPj4+IHNlZSBhIGRyaXZlciBpbiBDIGNvZGUgZm9yIGluaXQsIGNs
ZWFyIGFuZCB3cml0ZSBvbiB0aGlzIGtpbmQgb2YgZGlzcGxheQo+Pj4gCj4+PiBXaXRoIG1z
cDQzMCwgdGhlIGNvZGUgd2lsbCBiZSB2ZXJ5IHNpbWlsYXIsIGp1c3QgY2hhbmdlIHRoZSBJ
TyBwb3J0IGFuZCB0aW1pbmcKPj4+IEJ5ZQo+Pj4KPj4KPj4KCgotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KClRvIHVuc3Vic2NyaWJlIGZyb20gdGhlIG1zcDQzMCBn
cm91cCwgc2VuZCBhbiBlbWFpbCB0bzoKbXNwNDMwLXVuc3Vic2NyaWJlQGVncm91cHMuY29t
CgpZYWhvbyEgR3JvdXBzIExpbmtzCgo8Kj4gVG8gdmlzaXQgeW91ciBncm91cCBvbiB0aGUg
d2ViLCBnbyB0bzoKICAgIGh0dHA6Ly9ncm91cHMueWFob28uY29tL2dyb3VwL21zcDQzMC8K
CjwqPiBZb3VyIGVtYWlsIHNldHRpbmdzOgogICAgSW5kaXZpZHVhbCBFbWFpbCB8IFRyYWRp
dGlvbmFsCgo8Kj4gVG8gY2hhbmdlIHNldHRpbmdzIG9ubGluZSBnbyB0bzoKICAgIGh0dHA6
Ly9ncm91cHMueWFob28uY29tL2dyb3VwL21zcDQzMC9qb2luCiAgICAoWWFob28hIElEIHJl
cXVpcmVkKQoKPCo+IFRvIGNoYW5nZSBzZXR0aW5ncyB2aWEgZW1haWw6CiAgICBtc3A0MzAt
ZGlnZXN0QHlhaG9vZ3JvdXBzLmNvbSAKICAgIG1zcDQzMC1mdWxsZmVhdHVyZWRAeWFob29n
cm91cHMuY29tCgo8Kj4gVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGdyb3VwLCBzZW5kIGFu
IGVtYWlsIHRvOgogICAgbXNwNDMwLXVuc3Vic2NyaWJlQHlhaG9vZ3JvdXBzLmNvbQoKPCo+
IFlvdXIgdXNlIG9mIFlhaG9vISBHcm91cHMgaXMgc3ViamVjdCB0bzoKICAgIGh0dHA6Ly9k
b2NzLnlhaG9vLmNvbS9pbmZvL3Rlcm1zLwoK
Thanks Dan,

That was helpful. I will try to enhance it. I already compiled your code with mspgcc4 after a few modifications.

Thanks.

Chetan Bhargava

--- In m..., Dan Bloomquist wrote:
>
> Ok, Best, Dan.
>
> (With a pcf8574 it just takes two pins, and those pins can do a whole
> lot more too. This was from an old 149 project, I wasn't worried about
> eating pins or CPU time.)
>
> Tested, works fine, you should be able to work out extra commands from
> the data sheet:

Sorry, I forgot tell you this:
the LCD code is in the IAR( or keil) LPC23XX ( ARM7)

you must download freeRTOS for this processeur

Bye

Thanks,

I'll take a look.

--- In m..., Ren wrote:
>
> Sorry, I forgot tell you this:
> the LCD code is in the IAR( or keil) LPC23XX ( ARM7)
>
> you must download freeRTOS for this processeur
>
> Bye
>

Some time ago I wrote a library for 8051. I might as well port it.

Thanks.

--- In m..., "cbhargava" wrote:
>
> Thanks,
>
> I'll take a look.
>
>
>
> --- In m..., Ren wrote:
> >
> > Sorry, I forgot tell you this:
> > the LCD code is in the IAR( or keil) LPC23XX ( ARM7)
> >
> > you must download freeRTOS for this processeur
> >
> > Bye
>