sachin26
Newbie level 4
respected sir,
i m using 4-BIT mode PROGRAMMING for interfacing with LCD jhd 162A by PIC16F689.
here is my connections. coding is done in HITEC C..
/* RC7=LCD ENABLE
RC5=LCD RS
RC3=LCD DB7
RC2=LCD DB6
RC1=LCD DB5
RC0=LCD DB4
*/
my code:
#include<pic.h>
#include<htc.h>
#define LCD_EN 0x80
#define LCD_RS 0x20
#define _XTAL_FREQ 4000000
void lcd_reset()
{
SSPEN=0;
ANSEL=0X00;
ANSELH=0X00;
TRISC=0X00;
INTCON=0X00;
__delay_ms(40);
PORTC = 0x03+LCD_EN; /*FUNCTION SET,
8-BIT INTERFACE DATA LENGTH,
ENABLE LCD*/
PORTC = 0x03; /*FUNCTION SET,
8-BIT INTERFACE DATA LENGTH*/
__delay_ms(10); /* DELAY OF 10ms*/
PORTC = 0x03+LCD_EN;
PORTC = 0x03;
__delay_ms(1); /* DELAY OF 1ms*/
PORTC = 0x03+LCD_EN;
PORTC = 0x03;
__delay_ms(1); /* DELAY OF 1ms*/
PORTC = 0x02+LCD_EN; /*FUNCTION SET,
4-BIT INTERFACE DATA LENGTH*/
PORTC = 0x02;
__delay_ms(1); /* DELAY OF 1ms*/
}
void lcd_cmd (char cmd)
{
PORTC = ((cmd >> 4) & 0x0F)|LCD_EN; /*shift nibbles & mask lower nibble,
enable high */
__delay_us(50);
PORTC = ((cmd >> 4) & 0x0F);
__delay_us(200);
PORTC = (cmd & 0x0F)|LCD_EN;
__delay_us(50);
PORTC = (cmd & 0x0F);
__delay_us(200);
__delay_us(200);
}
void lcd_init ()
{
lcd_reset(); /* Call LCD reset */
lcd_cmd(0x28); /* 4-bit mode - 2 line - 5x7 font. */
lcd_cmd(0x08); // lcd display off
lcd_cmd(0x01); /*LCD CLEAR*/
lcd_cmd(0x0f); /* Display on,cursor on ,blink on.*/
lcd_cmd(0x06); /* Automatic Increment - No Display shift.*/
lcd_cmd(0x80); /* Address DDRAM with 0 offset 80h. */
}
void lcd_data (unsigned char * dat)
{
int i=0;
while((*(dat+i)!='\0'))
{
PORTC = (((*(dat+i) >> 4) & 0x0F)|LCD_EN|LCD_RS);
__delay_us(50);
PORTC = (((*(dat+i) >> 4) & 0x0F)|LCD_RS);
PORTC = ((*(dat+i) & 0x0F)|LCD_EN|LCD_RS);
__delay_us(50);
PORTC = ((*(dat+i) & 0x0F)|LCD_RS);
i++;
__delay_us(50);
__delay_us(50);
}
}
void main()
{
char *x = "SACHIN";
lcd_init();
while(1)
{
lcd_data((x));
}
}
my code is working perfectly... but there is nothing is displayed on LCD.. even contrast is also not varying..
please help me if something is getting wrong..
i m using 4-BIT mode PROGRAMMING for interfacing with LCD jhd 162A by PIC16F689.
here is my connections. coding is done in HITEC C..
/* RC7=LCD ENABLE
RC5=LCD RS
RC3=LCD DB7
RC2=LCD DB6
RC1=LCD DB5
RC0=LCD DB4
*/
my code:
#include<pic.h>
#include<htc.h>
#define LCD_EN 0x80
#define LCD_RS 0x20
#define _XTAL_FREQ 4000000
void lcd_reset()
{
SSPEN=0;
ANSEL=0X00;
ANSELH=0X00;
TRISC=0X00;
INTCON=0X00;
__delay_ms(40);
PORTC = 0x03+LCD_EN; /*FUNCTION SET,
8-BIT INTERFACE DATA LENGTH,
ENABLE LCD*/
PORTC = 0x03; /*FUNCTION SET,
8-BIT INTERFACE DATA LENGTH*/
__delay_ms(10); /* DELAY OF 10ms*/
PORTC = 0x03+LCD_EN;
PORTC = 0x03;
__delay_ms(1); /* DELAY OF 1ms*/
PORTC = 0x03+LCD_EN;
PORTC = 0x03;
__delay_ms(1); /* DELAY OF 1ms*/
PORTC = 0x02+LCD_EN; /*FUNCTION SET,
4-BIT INTERFACE DATA LENGTH*/
PORTC = 0x02;
__delay_ms(1); /* DELAY OF 1ms*/
}
void lcd_cmd (char cmd)
{
PORTC = ((cmd >> 4) & 0x0F)|LCD_EN; /*shift nibbles & mask lower nibble,
enable high */
__delay_us(50);
PORTC = ((cmd >> 4) & 0x0F);
__delay_us(200);
PORTC = (cmd & 0x0F)|LCD_EN;
__delay_us(50);
PORTC = (cmd & 0x0F);
__delay_us(200);
__delay_us(200);
}
void lcd_init ()
{
lcd_reset(); /* Call LCD reset */
lcd_cmd(0x28); /* 4-bit mode - 2 line - 5x7 font. */
lcd_cmd(0x08); // lcd display off
lcd_cmd(0x01); /*LCD CLEAR*/
lcd_cmd(0x0f); /* Display on,cursor on ,blink on.*/
lcd_cmd(0x06); /* Automatic Increment - No Display shift.*/
lcd_cmd(0x80); /* Address DDRAM with 0 offset 80h. */
}
void lcd_data (unsigned char * dat)
{
int i=0;
while((*(dat+i)!='\0'))
{
PORTC = (((*(dat+i) >> 4) & 0x0F)|LCD_EN|LCD_RS);
__delay_us(50);
PORTC = (((*(dat+i) >> 4) & 0x0F)|LCD_RS);
PORTC = ((*(dat+i) & 0x0F)|LCD_EN|LCD_RS);
__delay_us(50);
PORTC = ((*(dat+i) & 0x0F)|LCD_RS);
i++;
__delay_us(50);
__delay_us(50);
}
}
void main()
{
char *x = "SACHIN";
lcd_init();
while(1)
{
lcd_data((x));
}
}
my code is working perfectly... but there is nothing is displayed on LCD.. even contrast is also not varying..
please help me if something is getting wrong..