Programming for Keypad in PIC18F4550

Topic Progress:

Code snippet

#include<xc.h>
#include<plib/delays.h>
#include "Config.h"
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 20000000
#endif

void delay_ms(unsigned char t);
void cmd(int a);
void data(char b);
char key(void);

int main()
{ 
    char a;
    TRISD=0;
    TRISA=0;
    TRISB=0xF0;
    cmd(0X38);
    cmd(0X80);
    cmd(0X01);
    cmd(0X06);
    cmd(0X0E); 
 while(1)
   {
  a=key();
  data(a);
   } 
}
char key()
{
  int e;
  while(1)
   {
   LATB = 0XF7;
   e = LATB&0xF0; 
   switch(e)
    {
 case 0x70: 
    while(LATBbits.LATB3==0);
    return('1');
 case 0xB0:
    while(LATBbits.LATB2==0);
    return('2');
 case 0xD0:
    while(LATBbits.LATB1==0);
    return('3');
 case 0xE0:
    while(LATBbits.LATB0==0);
    return('A');
   }
  }
}

void cmd(int a)
{
 LATD = a;
 LATA = 0x01;
 delay_ms(500);
 LATA = 0x00;
}

void data(char b) 
{ 
 LATD = b; 
 LATA = 0x05;
 delay_ms(500);
 LATA= 0x04;
}
void delay_ms(unsigned char t)
 {
 int i;
 for(i=0;i<=t;i++)
 Delay1KTCYx(5);
 }