In this program we are going to count the number of times a switch pressed,and displaying it on a LCD .. and each time the switch pressed a LED will lighted up.
First create a new project and add a c main file like in the steps for Blinking a LED using MPLAB X , PIC16F877A
Components

1. PIC16F877A micro controller
2. animated LED
3. A toggle switch
4.16x2 LCD display
Steps in the program
1. define the ports for easy usage
Defines the control pins of LCD to the 0th,1st and 2nd pin of PORT D
#define RS RD0
#define RW RD1
#define EN RD2
Defines the data port of the LCD to PORT B
#define DATA PORTC
Defines switch in the 0th pin of PORT C
#define S RC0
Defines LED on the 3rd pin of PORT D
#define L RD3
* Author: Ebin Ephrem
 
*/
C
First create a new project and add a c main file like in the steps for Blinking a LED using MPLAB X , PIC16F877A
Components

1. PIC16F877A micro controller
2. animated LED
3. A toggle switch
4.16x2 LCD display
Steps in the program
1. define the ports for easy usage
Defines the control pins of LCD to the 0th,1st and 2nd pin of PORT D
#define RS RD0
#define RW RD1
#define EN RD2
Defines the data port of the LCD to PORT B
#define DATA PORTC
Defines switch in the 0th pin of PORT C
#define S RC0
Defines LED on the 3rd pin of PORT D
#define L RD3
2. Function declarations .. here we declare 3 functions  and all the 3 functions is for LCD
void LCD_CMD(unsigned int value); //This function is pass the LCD commands
void LCD_DAT(unsigned int value); // this is for pass the DATA to the LCD which is to displayed 
void LCD_INIT(); //this to initialize the LCD
void delay(); // this is to delay the LCD commands 
for more refer the    Interfacing LCD with PIC16F877A in MPLAB X
3. next is main function .. in main function we make 
- PORT C as input where we have connected the switch
 - PORT D as output where we have connected the LED and control pins of LCD
 - PORT B as outout where we have connected DATA pins of LCD
 
    TRISC  =0x0F;
    TRISD  =0x00;
    TRISB = 0x00;
4. The function LCD_INIT(); is called for initializing the LCD
5. Declared a variable called count, and initialized it to zero
   int count;
   count=0;
6.  we put the LED off 
7. now we are going for a infinite loop by 
    while(1)
    { 
     }
8. In the loop we are checking switch is ON or OFF condition
 if the switch is ON ; LED is on and count is incremented by 1 and display the value of count in LCD 
if the Switch is OFF it wait for the condition when the Switch is ON 
schematic diagram 
full Program
 ###################################################################################
    /*
 * File:   switchcount.c* Author: Ebin Ephrem
*/
#include<htc.h>
__CONFIG(0x193A);
C
#define RS RD0
#define RW RD1
#define EN RD2
#define DATA PORTB
#define S RC0
#define L RD3
void LCD_CMD(unsigned int value);
void LCD_DAT(unsigned int value);
void LCD_INIT();
void delay();
void main(void)
{
    TRISC  =0x0F;
    TRISD  =0x00;
    TRISB = 0x00;
 LCD_INIT();
 int count;
 count=0;
 L=0;
  while(1)
  {
  if( S == 1)
         {
       while(S==1);
              L= ~L;
                     count = count+1;
               LCD_CMD(0x01);
           delay ();
       LCD_DAT('0' + (count % 10));
  }
       }
 }
void LCD_INIT()
 {
    LCD_CMD(0x01);
    delay ();
    LCD_CMD(0x38);
    delay ();
    LCD_CMD(0x0F);
    delay ();
    LCD_CMD(0x06);
    delay ();
    LCD_CMD(0x0c);
    delay ();
    LCD_CMD(0x80);
    delay ();
}
void LCD_CMD(unsigned int  value)
{
    DATA =  value;
    RS=0;
    RW=0;
    EN=1;
    delay ();
    EN=0;
    delay ();
 }
void LCD_DAT(unsigned int value)
{
    DATA= value ;
    RS=1;
    RW=0;
    EN=1;
    delay ();
    EN=0;
    delay();
}
void delay(void)
{
    int counter = 0;
    for (counter = 0; counter<1000; counter++) {
        ;
    }
}

