接口lcd与pic 24 [英] interface lcd with pic 24
本文介绍了接口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
并计算你的日程安排。
Declarej
to bevolatile
and time your routine.
这篇关于接口lcd与pic 24的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文