You are on page 1of 2

Code: #include<lpc21xx.

h> #define pin_rs 1<<24 /*lcd rs pin*/ #define pin_rw 1<<


23 /*lcd rw pin*/ #define pin_en 1<<22 /*lcd en pin*/ #define pin_ctrl pin_rs|pi
n_rw|pin_en /*lcd control pins*/ #define lcd_d4 1<<10 /*lcd data pins D4,D5,D6,D
7*/
#define lcd_d5 1<<11
#define lcd_d6 1<<12
#define lcd_d7 1<<13
#define lcd_data lcd_d4|lcd_d5|lcd_d6|lcd_d7
#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 lcd_rw(x) ((x)?(IOSET1=pin_rw):(IOCLR1=pin_rw));
#define lcd_en(x) ((x)?(IOSET1=pin_en):(IOCLR1=pin_en));
#define data_in ((IOPIN0>>10)&(0x0F))
/*direction of the data pins as input*/ #define data_out(x) IOCLR0=lcd_data; IOS
ET0=(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 out
put for both data and control pins*/
#define lcd_dir_data_out IODIR0 |= lcd_data
#define lcd_dir_data_in IODIR0 &= ~(lcd_data)
#define delay_2n 4
static void delay(int);
static unsigned char busy_wait();
static void delay(int cnt) {
cnt <<= delay_2n; while(cnt--); }static unsigned char busy_wait() {
unsigned char status;
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);
}while(status & 0x80);
return (status); }
void lcd_write_4bit(unsigned char c) {
lcd_rw(0);
delay(10);
lcd_en(1);
delay(10);
data_out(c & 0x0F);
delay(10);
lcd_en(0);
delay(10);
}void lcd_cmd_write(unsigned char c) {
busy_wait();
lcd_rs(0);
delay(10);
lcd_write_4bit(c>>4);

lcd_write_4bit(c);
}static void lcd_data_write(unsigned char 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);}

You might also like