Solved

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

Posted on 2004-08-23
2
1,430 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

ScreenConnect 6.0 Free Trial

Want empowering updates? You're in the right place! Discover new features in ScreenConnect 6.0, based on partner feedback, to keep you business operating smoothly and optimally (the way it should be). Explore all of the extras and enhancements for yourself!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
How to setup iphone app subscription service 3 119
Problem with form project 66 316
distributed computing in Python 4 113
Acrinis True image 2 55
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…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use nested-loops in the C programming language.

919 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

14 Experts available now in Live!

Get 1:1 Help Now