Pic16F877A Mobile Keypad C Program

#include <16F877A.h>
#include <stdio.h>
#include <string.h>
#if defined(__PCM__)
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=2000000)
//#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) //using CCS Compiler
#endif
byte const val[]={’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9′,’*',’0′,’#',
‘.’,'A’,'D’,'G’,'J’,'M’,'P’,'S’,'V’,'Y’,'+’,'@’,
‘,’,'B’,'E’,'H’,'K’,'N’,'Q’,'T’,'W’,'Z’,'`’,'^’,
‘-’,'C’,'F’,'I’,'L’,'O’,'R’,'U’,'X’,’ ‘,’$',’&’};
void cmd(char r)
{
output_e (0×00);
output_d (r);
output_e (0×02);
delay_us (10);
output_e (0×00);
delay_ms (10);
}
void init_lcd()
{
unsigned char x[] = { 0×34,0×0c,0×01,0×80,0×06};
unsigned char i;
for( i = 0 ; i < 5 ; i++ )
{
cmd(x[i]);
}
}
void display(char s)
{
output_e (0×01);
output_d (val[s-1]);
output_e (0×03);
delay_ms (20);
output_e (0×01);
delay_ms (20);
}
void main()
{
char gg,Rowdt,resul,i;
init_lcd ();
while(TRUE)
{
Rowdt = 0b11111011;
resul=0;
gg=0;
for(i=0;i<5;i++)
{
output_a(Rowdt);
delay_ms(10);
gg = input_b();
delay_ms(10);
gg |= 0xf8;
if(gg!=0xff)
{
if(gg!=0b11111011)
{
resul=(~gg)+(i*3);
}
else
{
resul=3+(i*3);
}
display(resul);
}
Rowdt=(Rowdt<<1)+1;
}
}
}
