Problem in pci lcd programming

Status
Not open for further replies.

philip12

Newbie level 1
Joined
Feb 13, 2013
Messages
0
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,280
Activity points
1,280
Hi friends, please could you help me. I am trying to write a simple program using pic16f877a to interface with lcd jh162a..
I don't know what's wrong with my code. The code i've used is given below:

#include<htc.h>
#include<stdint.h>
#define _XTAL_FREQ 6000000
#define delay 10000

//PORTBbits.RB0 --R/W pin; PORTBbits.RB1 --RS pin; PORTBbits.RB6 -- Enable pin
void Busylcd(void)
{
TRISD = 0xff;
do
{
PORTBbits.RB6 = 0;
PORTBbits.RB1 = 0;
PORTBbits.RB0 = 1;
__delay_ms(2);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_us(40);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_ms(2);
}while(PORTDbits.RD7);
PORTBbits.RB6 = 0;
PORTBbits.RB0 = 0;
TRISD = 0x00;
}

/*void Writecmdlcd(char cmd)
{
TRISD = 0x00;
Busylcd();
PORTBbits.RB1 = 0;
PORTBbits.RB0 = 0;
PORTD = cmd;
PORTBbits.RB6 = 1;
__delay_us(delay);
PORTBbits.RB6 = 0;
}*/


void Writedatalcd(char data)
{
TRISD = 0x00;
Busylcd();
PORTBbits.RB1 = 1;
PORTBbits.RB0 = 0;
PORTD = data;
__delay_us(10);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_us(40);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
}

void init_lcd()
{
//Power On delay routine through software
TRISD = 0x00;PORTD = 0x00;
TRISB = 0x00;PORTB = 0x00;
__delay_ms(50);

//Write the 1st command 0x30
PORTBbits.RB0 = 0;
PORTBbits.RB1 = 0;
PORTBbits.RB6 = 0;
PORTD = 0x30;
__delay_ms(2);
PORTBbits.RB6 = 1;
__delay_ms(2);
PORTBbits.RB6 = 0;
__delay_ms(2);

__delay_ms(10);//Minimum delay of 4.1ms

//Write the 2nd command

PORTBbits.RB0 = 0;
PORTBbits.RB1 = 0;
PORTBbits.RB6 = 0;
PORTD = 0x30;
__delay_ms(2);
PORTBbits.RB6 = 1;
__delay_ms(2);
PORTBbits.RB6 = 0;
__delay_ms(2);

__delay_us(200);//Minimum delay of 100us
//Write the 3rd command
PORTBbits.RB0 = 0;
PORTBbits.RB1 = 0;
PORTBbits.RB6 = 0;
PORTD = 0x30;
__delay_ms(2);
PORTBbits.RB6 = 1;
__delay_ms(2);
PORTBbits.RB6 = 0;
__delay_ms(2);

//Write the 4th command; Busy Flag should be ready from now

//Function set command--1st try
PORTBbits.RB0 = 0;
PORTBbits.RB1 = 0;
PORTBbits.RB6 = 0;
PORTD = 0x30;
__delay_ms(2);
PORTBbits.RB6 = 1;
__delay_ms(2);
PORTBbits.RB6 = 0;
__delay_ms(2);

PORTD = 0x00;
TRISD = 0xff;
Busylcd();
__delay_ms(10);//Minimum delay of 4.5ms

//Function set command--2nd try
PORTBbits.RB0 = 0;
PORTBbits.RB1 = 0;
PORTBbits.RB6 = 0;
PORTD = 0x30;
__delay_ms(2);
PORTBbits.RB6 = 1;
__delay_ms(2);
PORTBbits.RB6 = 0;
__delay_ms(2);
PORTD = 0x00;
TRISD = 0xff;
Busylcd();
__delay_us(200);//Minimum delay of 100us

//Function set command--3rd go
PORTBbits.RB0 = 0;
PORTBbits.RB1 = 0;
PORTBbits.RB6 = 0;
PORTD = 0x30;
__delay_ms(2);
PORTBbits.RB6 = 1;
__delay_ms(2);
PORTBbits.RB6 = 0;
__delay_ms(2);
PORTD = 0x00;
TRISD = 0xff;
//Check if LCD is busy
Busylcd();

//Function set command
PORTBbits.RB0 = 0;
PORTBbits.RB1 = 0;
PORTBbits.RB6 = 0;
PORTD = 0x30;
__delay_us(100);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_us(40);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_ms(10);
PORTD = 0x00;
TRISD = 0xff;
Busylcd();

//Display OFF

PORTBbits.RB0 = 0; PORTBbits.RB1 = 0; PORTBbits.RB6 = 0;
PORTD = 0x08;
__delay_us(100);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_us(40);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_us(10);
PORTD = 0x00;
TRISD = 0xff;
Busylcd();
__delay_ms(5);

//Display Clear
PORTBbits.RB0 = 0; PORTBbits.RB1 = 0; PORTBbits.RB6 = 0;
PORTD = 0x01;
__delay_us(100);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_us(40);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_us(10);
PORTD = 0x00;
TRISD = 0xff;
Busylcd();
__delay_ms(5);

//Display ON, Cursor ON
PORTBbits.RB0 = 0; PORTBbits.RB1 = 0; PORTBbits.RB6 = 0;
PORTD = 0x0E;
__delay_us(100);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_us(40);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_us(10);
PORTD = 0x00;
TRISD = 0xff;
Busylcd();
__delay_ms(5);

//Entry mode set
PORTBbits.RB0 = 0; PORTBbits.RB1 = 0; PORTBbits.RB6 = 0;
PORTD = 0x06;
__delay_us(100);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_us(40);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_us(10);
PORTD = 0x00;
TRISD = 0xff;
Busylcd();
__delay_ms(5);

//DDRAM address set
PORTBbits.RB0 = 0; PORTBbits.RB1 = 0; PORTBbits.RB6 = 0;
PORTD = 0x80;
__delay_us(100);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_us(40);
PORTBbits.RB6 = 1;
__delay_us(10);
PORTBbits.RB6 = 0;
__delay_us(10);
PORTD = 0x00;
TRISD = 0xff;
Busylcd();
__delay_ms(5);

//Init procedure ends
}


//Main Program begins

void main()
{
ADCON1 = 0x06;
TRISC = 0x00;
PORTC = ~0x00;
TRISB = 0x00; PORTB = 0x00;__delay_ms(1);
TRISD = 0x00; PORTD = 0x00;__delay_ms(1);
init_lcd();
PORTC = ~0x01;
Writedatalcd(0x41);
PORTC = ~0x03;
while(1)
{PORTC = ~0x03; __delay_ms(500);
PORTC = 0x03;__delay_ms(500);}
}
----------------------------------------------------------------------
Thanks friends
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…