#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
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)