接口lcd与pic 24 [英] interface lcd with pic 24

查看:105
本文介绍了接口lcd与pic 24的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨我想在Lcd上显示字符串。我正在探索16板。我坚持延迟你可以帮助我..我的代码如下

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

#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++);
}

/****************************************************************************/

推荐答案

声明 j volatile 并计算你的日程安排。
Declare j to be volatile and time your routine.


这篇关于接口lcd与pic 24的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆