Interfacing LCD in 4bit Mode With lpc2138
Interfacing LCD in 4bit Mode With lpc2138
with LPC2138
Code:
#include<lpc21xx.h>
#define lcd_rs(x) ((x)?(IOSET1=pin_rs):(IOCLR1=pin_rs)); /*lcd_rs(x) if x=1 will set the lcd_rs pin will clear if x=0*/
#define data_out(x) IOCLR0=lcd_data; IOSET0=(x & 0x0F)<<10; /*direction of the data pins and control pins
as output*/
#define lcd_all_dir_out IODIR0 |= lcd_data ; IODIR1 |= pin_ctrl; /*setting as output for both data and control pins*/
#define delay_2n 4
{
cnt <<= delay_2n;
while(cnt--);
do
lcd_dir_data_in;
delay(10);
lcd_rs(0);
delay(10);
lcd_rw(1);
delay(10);
lcd_en(1);
delay(10);
status= (data_in<<4)&(0xF0);
lcd_en(0);
delay(10);
lcd_en(1);
delay(10);
status |=data_in;
lcd_en(0);
delay(10);
lcd_dir_data_out;
delay(10);
return (status);
}
void lcd_write_4bit(unsigned char c)
lcd_rw(0);
delay(10);
lcd_en(1);
delay(10);
delay(10);
lcd_en(0);
delay(10);
busy_wait();
lcd_rs(0);
delay(10);
lcd_write_4bit(c>>4);
lcd_write_4bit(c);
busy_wait();
lcd_rs(1);
delay(10);
lcd_write_4bit(c>>4);
lcd_write_4bit(c);
}
void lcd_putchar(char c)
lcd_data_write(c);
void lcd_init()
lcd_all_dir_out;
delay(10);
lcd_rs(0);
lcd_write_4bit(0x3);
delay(10);
lcd_write_4bit(0x3);
delay(10);
lcd_write_4bit(0x3);
lcd_write_4bit(0x2);
lcd_cmd_write(0x28);
lcd_cmd_write(0x0C);
lcd_cmd_write(0x06);
int retval = 0;
retval = -1;
} else {
if( x == 0 )
return retval;
void lcd_clear()
lcd_cmd_write(0x01);
lcd_gotoxy(0,0);
while(*str)
lcd_putchar(*str++);
main()
lcd_init();
lcd_clear();
lcd_gotoxy(0,0);
lcd_print("hypernuclide.com");
}