#include "p18f452.h"
#include <stdio.h>
#include <delays.h>
#include <timers.h>
// HS-PLL Enabled, Internal External Osc. Switch Over OFF Disabled
#pragma config OSC = HS, OSCS = OFF
// Power Up Timer: OFF Disabled
#pragma config PWRT = ON
// Brown Out Reset: OFF, Brown Out Voltage: OFF Disabled
#pragma config BOR = OFF, BORV = 27
// Watchdog Timer: OFF Disabled, Watchdog Postscaler: 1:128
#pragma config WDT = OFF, WDTPS = 128
// CCP2 Mux: OFF Disabled (RB3)/ON Enable (RC1)
#pragma config CCP2MUX = ON
// Stack Overflow Reset: OFF Disabled
#pragma config STVR = OFF
// Low Voltage ICSP:OFF Disabled
#pragma config LVP = OFF
// Background Debugger Enable: OFF Disabled
#pragma config DEBUG = OFF
// Code Protection Block 0-3: OFF Disabled
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF
// Boot Block Code Protection: OFF Disabled
#pragma config CPB = OFF
// Data EEPROM Code Protection: OFF Disabled
#pragma config CPD = OFF
// Write Protection Block 0-3: OFF Disabled
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF
// Boot Block Write Protection: OFF Disabled
#pragma config WRTB = OFF
// Configuration Register Write Protection: OFF Disabled
#pragma config WRTC = OFF
// Data EEPROM Write Protection: OFF Disabled
#pragma config WRTD = OFF
// Table Read Protection Block 0-3: OFF Disabled
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF
// Boot Block Table Read Protection: OFF Disabled
#pragma config EBTRB = OFF
#define RS PORTAbits.RA0
#define dirRS TRISAbits.TRISA0
#define RW PORTAbits.RA1
#define dirRW TRISAbits.TRISA1
#define E PORTAbits.RA2
#define dirE TRISAbits.TRISA2
#define DATALCD PORTC
#define dirDATA TRISC
#define LCDBusy PORTCbits.RC7
void LCDdata (unsigned char);
void busylcd(void);
void LCDinit (void);
void LCDDelay( void );
void lcdcmd(unsigned char);
void stringtoLCD(unsigned char *m);
unsigned char * itoa (unsigned int value, unsigned char * string);
unsigned char dataString[10];
char data[]="HELLO";
void main (void) // main function
{
int integer,i,integer1;
unsigned char *biginin;
i=0;
biginin=&dataString[0];
TRISC = 0;
PORTC = 0;
dirRS = 0;
LCDinit();
while (1) // this is how to make a never ending loop.
{
lcdcmd(0x1);
lcdcmd(0x2);
LCDDelay();
i++;
integer=i;
LCDDelay();
itoa (integer, biginin);
stringtoLCD(dataString);
lcdcmd(0xC0);
LCDDelay();
stringtoLCD(data);
}
}
//////////////////////////////////////////////////////////////////////////////////////
//LCD finctions------------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////////////////////
void LCDdata (unsigned char value)
{
busylcd();
TRISC = 0;
DATALCD = value;
RS=1;
RW=0;
E=1;
LCDDelay();
E=0;
}
//--------------------------------------------------------------------------------------
void LCDinit(void)
{
TRISA=0;
lcdcmd(0x38); //set 8-bit mode and 2 lines
lcdcmd(0x10); //cursor move & shift left
lcdcmd(0x06); //entry mode = increment
lcdcmd(0x0d); //display on - cursor blink on
lcdcmd(0x01); //clear display
}
//-------------------------------------------------------------------------------------
void busylcd(void)
{
RS=0;
RW=1;
TRISC=255;
E=0;
LCDDelay();
E=1;
while(LCDBusy==1){
E=0;
LCDDelay();
E=1;
}
}
//-------------------------------------------------------------------------------------
void lcdcmd(unsigned char temp)
{
busylcd();
RS=0;
RW=0;
TRISC=0;
DATALCD=temp;
E=1;
LCDDelay();
E=0;
}
//--------------------------------------------------------------------------------------
void LCDDelay(void)
{
int i=0;
for (i=0;i<250;i++);
}
//---------------------------------------------------------------------------------------
void stringtoLCD(unsigned char *m)
{
unsigned char i;
i = 0;
while(m[i] != 0)
{
LCDdata(m[i]);
i++;
}
}