Maker Pro
Maker Pro

LCD with 8051

P

ParTizan

Jan 1, 1970
0
hi all,
i have a Silicon Laboratories 8051F330 micro controller development
board and a lumex LCD (data sheet - http://www.lumex.com/pdf/LCM-S01602DSF+A.pdf).

i am trying to connect the LCD to the 8051.
i tried to connected the LCD directly to the 8051, but that doesn't
seem to work.
any one have any suggestion?
and also does the LCD display anything if its connected correctly but
with out any setting on the 8051?

thank you
 
D

DaveM

Jan 1, 1970
0
ParTizan said:
hi all,
i have a Silicon Laboratories 8051F330 micro controller development
board and a lumex LCD (data sheet -
http://www.lumex.com/pdf/LCM-S01602DSF+A.pdf).

i am trying to connect the LCD to the 8051.
i tried to connected the LCD directly to the 8051, but that doesn't
seem to work.
any one have any suggestion?
and also does the LCD display anything if its connected correctly but
with out any setting on the 8051?

thank you

There's no indication as to the type of controller the display uses. In any
case, to make the display work, it has to be initialized by the uP in a specific
sequence. You need to get the initialization sequence and program it into your
uP.
Those instructions should be supplied by Lumex somewhere on their web site.
--
Dave M
MasonDG44 at comcast dot net (Just substitute the appropriate characters in the
address)

"In theory, there isn't any difference between theory and practice. In
practice, there is." - Yogi Berra
 
M

mpm

Jan 1, 1970
0
hi all,
i have a Silicon Laboratories 8051F330 micro controller development
board and a lumex LCD (data sheet -http://www.lumex.com/pdf/LCM-S01602DSF+A.pdf).

i am trying to connect the LCD to the 8051.
i tried to connected the LCD directly to the 8051, but that doesn't
seem to work.
any one have any suggestion?
and also does the LCD display anything if its connected correctly but
with out any setting on the 8051?

thank you

I am not familar with the F330, but am going to assume its just
another 8051 processor.
Yes, you can hook the LCD directly to an 8051.
You will have to initialize the LCD before you can use it.
This gets asked a lot, so you can probably find code on the web to do
it. (Or SED Archive)

Most people seem to get stuck because they do not wait long enough in
software for the LCD to accept the initialization commands, OR, they
try to use the LCD's BUSY flag before the LCD Busy flag has any real
meaning (i.e, not until AFTER the thing has been initialized).

If you just power the LCD up, you should see dark squares (usually all
positions, but sometimes only half of them depending on the display).
Be advised there is a contrast voltage on the LCD. Depending on the
setting, your LCD may not appear to be doing anything, but in reality,
its contrast setting may just be set to very, very faint. Check the
datasheet and try adjusting the contrast voltage to be sure.

If you can't get this LCD going, write back whether you've wired it in
4-bit or 8-bit mode (most likely you're in 8-bit?), and one of us can
post the init code for you. -mpm
 
D

Donald

Jan 1, 1970
0
ParTizan said:
hi all,
i have a Silicon Laboratories 8051F330 micro controller development
board and a lumex LCD (data sheet - http://www.lumex.com/pdf/LCM-S01602DSF+A.pdf).

i am trying to connect the LCD to the 8051.
i tried to connected the LCD directly to the 8051, but that doesn't
seem to work.
any one have any suggestion?
and also does the LCD display anything if its connected correctly but
with out any setting on the 8051?

thank you

Like these ?

http://www.google.com/search?hl=en&q=8051+lcd
 
M

MooseFET

Jan 1, 1970
0
Thats just the mechanical datasheet find the one that tells you about
the signals and read it carefully. Watch out for the legal timing.
I am not familar with the F330, but am going to assume its just
another 8051 processor.

It is an 8051 with added features and a 25MIPS throughput IIRC.
 
G

Gary Tait

Jan 1, 1970
0
hi all,
i have a Silicon Laboratories 8051F330 micro controller development
board and a lumex LCD (data sheet -
http://www.lumex.com/pdf/LCM-S01602DSF+A.pdf).

i am trying to connect the LCD to the 8051.
i tried to connected the LCD directly to the 8051, but that doesn't
seem to work.
any one have any suggestion?
and also does the LCD display anything if its connected correctly but
with out any setting on the 8051?

thank you

It looks like a standard HD447800 LCD, which have thousands of resources
and documents you can use.
 
P

ParTizan

Jan 1, 1970
0
It looks like a standard HD447800 LCD, which have thousands of resources
and documents you can use.

i already read the tutorial about the lcd's(my lcd data sheet -
http://www.lumex.com/pdf/LCM-S01602DSF+A.pdf). i also tried the to use
the program from the 8052.com tutorial on my Silicon Laboratories
8051F330 but it doesnt seem to work.

here is the code:

$NOMOD51

$include (c8051f330.inc) ; Include register definition file.

;-----------------------------------------------------------------------------
; RESET and INTERRUPT VECTORS
;-----------------------------------------------------------------------------

; Reset Vector
cseg AT 0
ljmp Main ; Locate a jump to the start of
; code at the reset vector.
DB0 EQU P0.0
DB1 EQU P0.1
DB2 EQU P0.2
DB3 EQU P0.3
DB4 EQU P0.4
DB5 EQU P0.5
DB6 EQU P0.6
DB7 EQU P0.7
EN EQU P1.5
RS EQU P1.7
RW EQU P1.6
LCDDATA EQU P0

WAIT_LCD:

CLR EN ;Start LCD command
CLR RS ;It's a command
SETB RW ;It's a read command
MOV LCDDATA,#0FFh ;Set all pins to FF initially
SETB EN ;Clock out command to LCD
MOV A,LCDDATA ;Read the return value
JB ACC.7,WAIT_LCD ;If bit 7 high, LCD still busy
CLR EN ;Finish the command
CLR RW ;Turn off RW for future commands
RET
; following program code.
INIT_LCD:

CLR RS
MOV LCDDATA,#38h
SETB EN
CLR EN
LCALL WAIT_LCD
CLR RS
MOV LCDDATA,#0Eh
SETB EN
CLR EN
LCALL WAIT_LCD
CLR RS
MOV LCDDATA,#06h
SETB EN
CLR EN
LCALL WAIT_LCD
RET

CLEAR_LCD:

CLR RS
MOV LCDDATA,#01h
SETB EN
CLR EN
LCALL WAIT_LCD
RET

WRITE_TEXT:

SETB RS
MOV LCDDATA,A
SETB EN
CLR EN
LCALL WAIT_LCD
RET

Main:
; Disable the WDT.
anl PCA0MD, #NOT(040h) ; clear Watchdog Enable bit

mov P0MDOUT, #00h
mov P1MDOUT, #00h
mov XBR0, #40h ; assignments
mov XBR1, #40h ; enable Crossbar

LCALL INIT_LCD
LCALL CLEAR_LCD
MOV A,#'H'
LCALL WRITE_TEXT
MOV A,#'E'
LCALL WRITE_TEXT
MOV A,#'L'
LCALL WRITE_TEXT
MOV A,#'L'
LCALL WRITE_TEXT
MOV A,#'O'
LCALL WRITE_TEXT
MOV A,#' '
LCALL WRITE_TEXT
MOV A,#'W'
LCALL WRITE_TEXT
MOV A,#'O'
LCALL WRITE_TEXT
MOV A,#'R'
LCALL WRITE_TEXT
MOV A,#'L'
LCALL WRITE_TEXT
MOV A,#'D'
LCALL WRITE_TEXT

END



and i can figure out were the problem is could some one send me a
working example?
i am a beginner so dont really know how to configure the ports. could
someone tell me if its done right in the example above?
tnx all
 
T

Tom2000

Jan 1, 1970
0
DB0 EQU P0.0
DB1 EQU P0.1
DB2 EQU P0.2
DB3 EQU P0.3
DB4 EQU P0.4
DB5 EQU P0.5
DB6 EQU P0.6
DB7 EQU P0.7
EN EQU P1.5
RS EQU P1.7
RW EQU P1.6
LCDDATA EQU P0

From the pinouts, it appears that your LCD uses the HD44780 interface,
found on just about all inexpensive parallel LCD displays these days.

I don't use anything from the 8051 family, but I've driven '44780 LCDs
with several other MCU's using the following method.

First, I use the "4-bit" interface. I connect MCU output lines to
DB4-DB7, EN, and RS. I ground the LCD's R/W input, and leave DB0-DB3
open.

The EN line is your clock line. It idles low, is raised for a
millisecond or so to clock data on the DB lines, then is returned low.

The RS line is your command/data line. Set it high to indicate that
the info you're clocking on the DB lines is data, or set it low to
indicate that the DB info represents a command.

My output routine takes a byte as its input, splits it into two
nibbles, then clocks those two nibbles to the DB lines, high nibble
first, MSbit on DB7. (Make sure that the calling routine sets the RS
line to the correct state before sending the byte.)

-place high nibble on DB lines
-EN high
-pause 1 millisecond
-EN low
-pause 1 mS
-place low nibble on DB lines
-EN high
-pause 1 mS
-EN low
-pause 1 mS

In your program, wait about 1 second after powerup before you try to
initialize the LCD (or, for that matter, anything else.) Then send
the following sequence:

This is the initialization sequence that puts the LCD into the 4-bit
mode:

1. $33
2. $32

folowed by three other bytes that put the LCD into 2-line display
mode, no display shift, cursor off, and 5x7 font:

3. $28
4. $0c
5. $06

While sending these five initialization bytes, I pause 15 milliseconds
between each byte. After the display has been intialized, I don't add
interbyte pauses for any other LCD traffic.

By the way - this stuff is simple! I think that the problem folks
have when driving an LCD is that they try to make it too complicated.
Keep your routine simple, and I'm sure all will go well.

Good luck!

Tom



==========================================


Here's some C code from my most recent project:



// ============= LCD Driver Routines =============//

void SendStr(const char* str, const byte addr)
{
// Send string at addr, if addr <> 0,
// or cursor position if addr == 0

int i = 0;

if (addr != 0)
Lcmd(addr);
while (str != 0)
Ldat(str[i++]);
}

void Lcmd(byte Cmd)
{
// Sends a byte to LCD in command mode

PORTC &= B11101111; // RS low
Lout(Cmd);
}

void Ldat(byte Dat)
{
// Sends a byte to LCD in data mode

PORTC |= B00010000; // RS high
Lout(Dat);
}

void Lout(byte Dat)
{
// Sends Dat to LCD. Calling routine sets RS to Command (Low) or
// Data (High) mode

clock2LCD(Dat >> 4); // Place high nibble on low bits
clock2LCD(Dat & B00001111); // Send low nibble
}

void clock2LCD(byte nibble)
{
// Clock low 4 bits of nibble to LCD

PORTC &= B11110000;
PORTC |= nibble;
PORTB |= B00000100; // Strobe data using EN
delay(1);
PORTB &= B11111011;
delay(1);
}


==========================================
 
G

Gary Tait

Jan 1, 1970
0
I don't use anything from the 8051 family, but I've driven '44780 LCDs
with several other MCU's using the following method.

It it is just, the 8051, configured the right way for CPU bus mode, can in
theory, directly run an LCD character display in 8-bit mode.
 
Top