Solved

Writing to a 16x2 LCD in 4-bit Mode C code

Posted on 2004-08-23
2
1,419 Views
Last Modified: 2008-01-09
Hi I need to use an LCD (16x2) in 4-bit mode. I have found this assembly code and I need to translated to C. This is only to write to the LCD. Below this code I have posted the C code I have translated but it is not working...can anyone help me re-writing this?
DATA is the port use to send data and commands.
///////////////////////////////////////////////////
machine code

WRITE_2_NIBBLES:
 PUSH  ACC           ;Save A for low nibble
 ORL   DATA,#0F0h    ;Bits 4..7 <- 1
 ORL   A,#0Fh        ;Don't affect bits 0-3
 ANL   DATA,A        ;High nibble to display
 SETB  EN
 CLR   EN
 POP   ACC           ;Prepare to send
 SWAP  A             ;...second nibble
 ORL   DATA,#0F0h    ; Bits 4...7 <- 1
 ORL   A,#0Fh       ; Don't affect bits 0...3
 ANL   DATA,A        ;Low nibble to display
 SETB  EN
 CLR   EN
 RET
///////////////////////////////////////////////////////
C Code
static void WriteInstrReg (unsigned char Instr)
{
Ena = 0;                      
RS = 0;              // select instruction register
R_W= 0;            // write operation
Ena = 1;                // give operation start signal
_nop_ (); _nop_ ();        // wait
nibble = 0;
nibble |= Instr;
nibble &= 0xF0;
P2 = nibble;
Ena = 0;
delay1(64000);      // wait for LCD...is busy
nibble = 0;
Ena = 1;
Instr <<= (0x04);
nibble |= Instr;
nibble &= 0xF0;
P2 = nibble;
Ena = 0;
delay1(64000);    // wait for LCD...is busy
}
nibble is an unsigned char.
0
Comment
Question by:caleno
2 Comments
 
LVL 55

Accepted Solution

by:
Jaime Olivares earned 50 total points
ID: 11875429
You have not specified what microcontroller you are working on, so I will assume it is 8051 based.
You can search for a ready-made library written in C, take a look to this:
http://www.8051.co.kr/html/development/pdf/cpu_application_note/AtmelWM/ANM069.PDF
It is designed for an Atmel processor with a 4 bit display interface (brand doesn't matters).
Good luck,
Jaime.
0
 

Author Comment

by:caleno
ID: 11884745
Jaime, your assumption is right. The micro is from 8051 family. The Link you posted is very good. It helped a lot

Thanks!
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

Have you thought about creating an iPhone application (app), but didn't even know where to get started? Here's how: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Important pre-programming comments: I’ve never tri…
Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use conditional statements in the C programming language.

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now