Note: PORT's connection will be different based on the kit you are using by the manufacturer for PIC18F.
Program:
#include <pic18f4550.h> #define LCD_EN PORTCbits.RC1 // LCD Enable #define LCD_RS PORTCbits.RC0 // Register Set // To generate delay void delay() { unsigned int i; for(i=0;i<5000;i++); } unsigned char string1[] = {'C','O','D','I','N','G'}; unsigned char string2[] = {'A','T','H','A','R','V','A'}; // To Write Data in Command Register void sendCommand(unsigned char command) { LCD_RS = 0; // To Select Command Register delay(); // Whatever data you want to store in command register // that data should be placed on data bus // PORTB is connected to Data-bus // to latch this data enable terminal should be at logic 1 and 0 // i.e High to Low pulse LCD_EN = 1; delay(); PORTB = command; delay(); LCD_EN = 0; delay(); } // To Write Data in Data Register void sendData(unsigned char lcd_data) { LCD_RS = 1; // Select Data Register delay(); LCD_EN = 1; delay(); PORTB = lcd_data; // ACSII value of data delay(); LCD_EN = 0; delay(); } void main() { unsigned int i; unsigned char p; TRISB = 0x00; // PORTB as Output TRISCbits.RC0 = 0; // PORTC 0 as Output TRISCbits.RC1 = 0; // PORTC 1 as Output // Initialize LCD sendCommand(0x38); // Select 16X2 LCD sendCommand(0x0E); // Display on and Cursor On sendCommand(0x0E); // Clear LCD // to display 2 string while(1) { sendCommand(0x80); // First Position of First Row for(i=0;i<6;i++) { p = string1[1]; sendData(p); } sendCommand(0xC0); // First Position of Second Row for(i=0;i<7;i++) { p = string2[i]; sendData(p); } delay(); } return; }