//USE PORTB FOR LCD,
//USE PORTA (a0,a1,a2,a3) FOR KEYPAD IN
//USE PORTC (c0,c1,c2,c3) FOR KEYPAD OUT
#include<16f877a.h>
#use delay(clock=20000000)
#fuses hs,noprotect,nowdt,nolvp
#byte porta=5
#byte portb=6
#byte portc=7
#define use_portb_lcd TRUE
#include<lcd.c>
int indata;
//row detection module
void getkey()
{
indata=0;
if(input(PIN_C0)==0)
{
indata=0;
}
else if(input(PIN_C1)==0)
{
indata=1;
}
else if(input(PIN_C2)==0)
{
indata=2;
}
else if(input(PIN_C3)==0)
{
indata=3;
}
}
void main()
{
int mysta;
byte i;
byte k;
setup_port_a(NO_ANALOGS);
set_tris_a(0x00);
set_tris_c(0x8F);
lcd_init();
lcd_putc("\fTRIAL1...!!!\n");
delay_ms(1000);
do
{
mysta=0;
//ENABLE 1ST COLUMN
porta=0xF7; //11110111
getkey();
if(indata==0)
{
k=1;
mysta=1;
}
else if(indata==1)
{
k=4;
mysta=1;
}
else if(indata==2)
{
k=7;
mysta=1;
}
else if(indata==3)
{
k='*';
mysta=1;
}
if(mysta==1)
{
lcd_putc(k+'0');
delay_ms(500);
mysta=0;
}
//ENABLE 2nd COLUMN
porta=0xFB;//11111011
getkey();
if(indata==0)
{
k=2;
mysta=1;
}
else if(indata==1)
{
k=5;
mysta=1;
}
else if(indata==2)
{
k=8;
mysta=1;
}
else if(indata==3)
{
k=0;
mysta=1;
}
if(mysta==1)
{
lcd_putc(k+'0');
delay_ms(500);
mysta=0;
}
//ENABLE 3rd COLUMN
porta=0xFD;//11111101
getkey();
if(indata==0)
{
k=3;
mysta=1;
}
else if(indata==1)
{
k=6;
mysta=1;
}
else if(indata==2)
{
k=9;
mysta=1;
}
else if(indata==3)
{
k='#';
mysta=1;
}
if(mysta==1)
{
lcd_putc(k+'0');
delay_ms(500);
mysta=0;
}
//ENABLE 4th COLUMN
porta=0xFE;//11111110
getkey();
if(indata==0)
{
k='A';
mysta=1;
}
else if(indata==1)
{
k='B';
mysta=1;
}
else if(indata==2)
{
k='C';
mysta=1;
}
else if(indata==3)
{
k='D';
mysta=1;
}
if(mysta==1)
{
lcd_putc(k+'0');
delay_ms(500);
mysta=0;
}
}while(1);
}