Pic16F877A Mobile Keypad C Program

pic16f877a keypad and lcd circuit

#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;

}

}

}

free hit counter code
download free hit counter code