This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Lcd initialization

hi, guys I have a doubt regarding interfacing lcd to arm7.
I have an lpc2148 development board. This board did have a lcd interfacing example. I also have another program I got from internet. I see that the function to initialize the lcd are written in different ways in both the examples.
In the example I got with the board the "void lcd_init()" is little complex. But the other example I got from internet the has "void init_lcd( void )" written in a simple way.
I have edited and tried the codes in different ways and I see only the code I received with the board works.
I am new to ARM, but I don't think this should be correct, we should be able to make new codes. Hoping someone can understand my doubt.

CODE THAT CAME WITH THE DEVELOPMENT BOARD

#include <LPC214x.H>

#define  LCD_RS     (1<<10)
#define  LCD_RW     (1<<12)
#define  LCD_EN     (1<<13)
#define  LCD_D4     (1<<20)
#define  LCD_D5     (1<<21)
#define  LCD_D6     (1<<22)
#define  LCD_D7     (1<<23)

#define  LCD_DATA_MASK   (LCD_D7|LCD_D6|LCD_D5|LCD_D4)
#define  LCD_IOALL_MASK  (LCD_D7|LCD_D6|LCD_D5|LCD_D4|LCD_RS|LCD_EN|LCD_RW)
//***************************
void enable_lcd(void)
{
  unsigned int i;
  IOSET0 = LCD_EN;
  for (i=0;i<400000;i++);
  IOCLR0 = LCD_EN;
}
//**************************
void lcd_init()
{
  unsigned int i;

  PINSEL1  = 0x00000000;
  IODIR0 |= LCD_IOALL_MASK;
  for (i=0;i<1000;i++);

  IOCLR0 = (LCD_IOALL_MASK);
  IOSET0 = (LCD_D5|LCD_D4);
  enable_lcd();
  for (i=0;i<100;i++);

  IOCLR0 = (LCD_IOALL_MASK);
  IOSET0 = (LCD_D5|LCD_D4);
  enable_lcd();
  for (i=0;i<100;i++);

  IOCLR0 = (LCD_IOALL_MASK);
  IOSET0 = (LCD_D5|LCD_D4);
  enable_lcd();
  delay(10000);
  while(busy_lcd());

  IOCLR0 = (LCD_IOALL_MASK);
  IOSET0 = (LCD_D5);
  enable_lcd();
  delay(10000);
  while(busy_lcd());

  lcd_write_control(0x28);
  lcd_write_control(0x0C);
  lcd_write_control(0x06);
  lcd_write_control(0x01);
  lcd_write_control(0x0F);
  lcd_write_control(0x01);
  for (i=0;i<100000;i++);
}
//*****************************
char busy_lcd(void)
{
  unsigned long busy_status;
  unsigned int i;

  IODIR0 &= LCD_DATA_MASK;
  IOCLR0 = LCD_RS;
  IOSET0 = LCD_RW;
  IOSET0 = LCD_EN;

  for (i=0;i<1000;i++);
  busy_status = (IOPIN1 & 0x80000000);
  if(busy_status == 0x80000000)
  {
  IOCLR0 = LCD_EN;
        IOCLR0 = LCD_RW;
        IODIR0 |= LCD_IOALL_MASK;
    return 1;
  }
  else
  {
    IOCLR0 = LCD_EN;
        IOCLR0 = LCD_RW;
        IODIR0 |= LCD_IOALL_MASK;
    return 0;
  }
}
//******************************
void lcd_out_data4(unsigned char val)
{
IOCLR0 = (LCD_DATA_MASK);
IOSET0 = (val<<20);

}
//**********************************
void lcd_write_byte(unsigned char val)
{

  lcd_out_data4((val>>4)&0x0F);

  enable_lcd();

  lcd_out_data4(val&0x0F);
  enable_lcd();

  delay(100000);
 // while(busy_lcd());
}
//**********************************
void lcd_write_control(unsigned char val)
{
  IOCLR0 = LCD_RS;
  lcd_write_byte(val);
}
//**********************************
void lcd_write_ascii(unsigned char c)
{
  IOSET0 = LCD_RS;
  lcd_write_byte(c);
}
//********************************
void goto_cursor(unsigned char i)
{
  i |= 0x80;
  lcd_write_control(i);
}
//*******************************
void lcd_print(unsigned char* str)
{
  int i;
  for (i=0;i<16 && str[i]!=0;i++)
  {
     lcd_write_ascii(str[i]);
  }
}
//******************************
void delay(unsigned long int count1)
{
  while(count1 > 0) {count1--;}
}



I will copy the other code in the below thread

Parents Reply Children