You are on page 1of 2

//Keypad: 4x4 matrix

//Columns 1..4: PD0..PD3


//Rows 1..4: PD4..PD7
char hex_vals[]="0123456789ABCDEF";
unsigned int brd_read()
{
DDRD=0xf0;
PORTD=0xff;
unsigned int temp,temp1;
unsigned char a;
PORTD=0xef;//1110
delay(1000);
temp=PIND;
temp=temp|0xfff0;
PORTD=0xdf;//1101
delay(1000);
temp1=PIND;
temp1=(temp1<<4)|0xff0f;
temp=temp&temp1;
PORTD=0xbf;//1011
delay(1000);
temp1=PIND;
temp1=(temp1<<8)|0xf0ff;
temp=temp&temp1;
PORTD=0x7f;//0111
delay(1000);
temp1=PIND;
temp1=(temp1<<12)|0x0fff;
PORTD=0xff;
temp=temp&temp1;
temp=~temp;
return temp;
}
unsigned int key_val(unsigned int stat) //set key preferences here
{
if((stat&0x0001))
{return(1);}
else if((stat&0x0002))
{return(2);}
else if((stat&0x0004))
{return(3);}
else if((stat&0x0008))
{return(4);}
else if((stat&0x0010))
{return(5);}
else if((stat&0x0020))
{return(6);}
else if((stat&0x0040))
{return(7);}
else if((stat&0x0080))
{return(8);}
else if((stat&0x0100))
{return(9);}
else if((stat&0x0200))
{return(10);}
else if((stat&0x0400))
{return(11);}
else if((stat&0x0800))
{return(12);}
else if((stat&0x1000))
{return(13);}
else if((stat&0x2000))
{return(14);}
else if((stat&0x4000))
{return(15);}
else if((stat&0x8000))
{return(16);}
else
{return(0);}
}
void key_press() //waits till key is pressed
{
unsigned int key;
key=key_val(brd_read());
while(key==0)
{
key=key_val(brd_read());
}
}
void key_release() //waits till key is released
{ //at end of program makes keypress action
unsigned int key; //after reading key makes keyrelease action
key=key_val(brd_read());
while(key!=0)
{
key=key_val(brd_read());
}
}
int main (void)
{
lcd_init();
prints("welcome",0); //simlar to printf 2nd argument is delay between
delay(65535); //two successive characters
unsigned int key;
clrscr();
prints("Start Typing",0);
key_press();
key=key_val(brd_read());
delay(60000);
clrscr();
prints(hex_vals[key-1],0);
key_release();
while(1)
{
key=key_val(brd_read());
delay(60000);
if(key==0)
continue;
else
prints(hex_vals[key-1],0);
key_release();
}
}

You might also like