Click here to Skip to main content
15,891,529 members

interface lcd with pic 24

Member 9671224 asked:

Open original thread
hi i want to display string on Lcd. i m doing work on explore 16 board. i stuck with delay can u plz help me..my code is as follow
C++
#include "../../support/PIC24F/h/p24FJ128GA010.h"
#include "lcd_1.h"
#include "delay.h"

_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & ICS_PGx2 & FWDTEN_OFF)
_CONFIG2(IESO_OFF & FCKSM_CSDCMD & OSCIOFNC_ON & FNOSC_PRI & POSCMOD_XT)

int main()
{
     init_lcd();

     lcd("ABCDEFG");
     
   while (1);
}
/**************************************************/

 /************************LCD.h*************************/

#include "p24FJ128GA010.h"


void Init_LCD( void );		        // initialize display
void lcd_cmd( char cmd );	        // write command to lcd
void lcd_data(unsigned char str );		    // write data to lcd
void lcd_data_string(unsigned char *str);
void lcd(unsigned char str [10]);
/************************************************************************/

/***********************LCD.c**********************************/
#include "../../support/PIC24F/h/p24FJ128GA010.h"
#include "lcd_1.h"


/*
   For Explorer 16 board, here are the data and control signal definitions
   RS -> RB15
   E  -> RD4
   RW -> RD5
   DATA -> RE0 - RE7
*/

// Control signal data pins
#define  RW  LATDbits.LATD5       // LCD R/W signal
#define  RS  LATBbits.LATB15      // LCD RS signal
#define  E   LATDbits.LATD4       // LCD E signal
//#define  E   LATFbits.LATF1       // LCD E signal

// Control signal pin direction
#define  RW_TRIS	TRISDbits.TRISD5
#define  RS_TRIS	TRISBbits.TRISB15
#define  E_TRIS		TRISDbits.TRISD4
//#define  E_TRIS		TRISFbits.TRISF1

// Data signals and pin direction
#define  DATA      LATE           // Port for LCD data
#define  DATAPORT  PORTE
#define  TRISDATA  TRISE          // I/O setup for data Port




void init_lcd(void)
{
    DATA &= 0xFF00;
    RW = 0;                       // R/W state set low
    RS = 0;                       // RS state set low
    E = 0;                        // E state set low

	/* set data and control pins to outputs */
	 TRISDATA &= 0xFF00;
 	RW_TRIS = 0;                  // RW pin set as output
	RS_TRIS = 0;                  // RS pin set as output
	E_TRIS = 0;                   // E pin set as output

	/* LCD initialization sequence */
	DATA &= 0xFF00;
 	   lcd_cmd(0x0038);
   	 lcd_cmd(0x000E);
   
}

void lcd_cmd( char cmd )          // subroutiune for lcd commands
{
//  TRISD &= 0xFF00;              // ensure RD0 - RD7 are outputs
    DATA &= 0xFF00;               // prepare RD0 - RD7
    DATA |= cmd;                  // command byte to lcd
    RW = 0;                       // ensure RW is 0
    RS = 0;
    E = 1;                        // toggle E line
    Nop();
    Nop();
    Nop();
    E = 0;
}

void lcd_data(unsigned char str )        // subroutine for lcd data
{
//  TRISD &= 0xFF00;              // ensure RD0 - RD7 are outputs
    RW = 0;                         // ensure RW is 0
    RS = 1;                       // assert register select to 1
    DATA &= 0xFF00;               // prepare RD0 - RD7
    DATA |= str;                 // data byte to lcd
    E = 1;
    Nop();
    Nop();
    Nop();
    E = 0;                       // toggle E signal
    RS = 0;                      // negate register select to 0
}

void lcd_data_string(unsigned char *str)
{
    int i=0;
    while(str[i]!='\0');
    {
        lcd_data(str[i]);
        i++;
        delay_sec(2);
    }
}

void lcd(unsigned char str[10])
{
 
    lcd_cmd(0x0001);
    lcd_cmd(0x0080);
    lcd_data_string(str);
}
/********************************************************************************/

/***************Delay.h*******************/
#include "p24FJ128GA010.h"
#include "lcd_1.h"

#define Fosc 8000000                    // FRC Fosc = 8MHz


void delay_sec(unsigned char seconds);


/********************************************/
 /**************************************delay.c************************************/
include "p24FJ128GA010.h"
#include "lcd_1.h"
#include "delay.h"

void delay_sec(unsigned char seconds)
{
    unsigned char i,j;
    for(i=0;i<seconds;i++)>
        for(j=0;j<10000;j++);
}

/****************************************************************************/
Tags: PIC

Plain Text
ASM
ASP
ASP.NET
BASIC
BAT
C#
C++
COBOL
CoffeeScript
CSS
Dart
dbase
F#
FORTRAN
HTML
Java
Javascript
Kotlin
Lua
MIDL
MSIL
ObjectiveC
Pascal
PERL
PHP
PowerShell
Python
Razor
Ruby
Scala
Shell
SLN
SQL
Swift
T4
Terminal
TypeScript
VB
VBScript
XML
YAML

Preview



When answering a question please:
  1. Read the question carefully.
  2. Understand that English isn't everyone's first language so be lenient of bad spelling and grammar.
  3. If a question is poorly phrased then either ask for clarification, ignore it, or edit the question and fix the problem. Insults are not welcome.
  4. Don't tell someone to read the manual. Chances are they have and don't get it. Provide an answer or move on to the next question.
Let's work to help developers, not make them feel stupid.
Please note that all posts will be submitted under the http://www.codeproject.com/info/cpol10.aspx.



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900