Password Based Locking System

            /* Timer header file*/

void timemdel(unsigned int con)
{
T0CTCR=0X0;
T0PR=59999;
T0MR0=con;
T0MCR|=1<<2;
T0TCR=0X02;
T0TCR=0X01;
while(T0TC!=T0MR0);
T0TC=0;
T0TCR=0;
}
void timeudel(unsigned int con)
{
T1CTCR=0X0;
T1PR=59;
T1MR0=con;
T1MCR|=1<<2;
T1TCR=0X02;
T1TCR=0X01;
while(T1TC!=T1MR0);
T1TC=0;
T1TCR=0;
}
                             /*lcd header file*/
#define RS (1<<16)
#define E (1<<17)
#define D4 (1<<10)
#define D5 (1<<11)
#define D6 (1<<12)
#define D7 (1<<13)
//void delay(void);
void lcd_init(void);
void lcd_cmd(int );
void lcd_string(char *str);
void lcd_conv(char );
void lcd_cmd(int cmd)
{
IOCLR0|=RS;
lcd_conv(cmd);
IOCLR0|=RS;
timeudel(1000);
}
void lcd_init(void)
{
IODIR0|=D4|D5|D6|D7;
IODIR0|=RS|E;
IOCLR0|=D4|D5|D6|D7;
IOCLR0|=RS|E;
lcd_cmd(0x02);
lcd_cmd(0x28);
lcd_cmd(0x0E);
lcd_cmd(0x01);
lcd_cmd(0x06);
}
void lcd_string(char *str)
{
while(*str!=0)
{
IOSET0|=RS;
lcd_conv(*str);
str++;
}
timeudel(1000);
}
void lcd_conv(char data)
{
int recv;
IOCLR0|=D4|D5|D6|D7;
recv=data>>4;
IOSET0=recv<<10;
IOSET0|=E;
timeudel(1000);
IOCLR0|=E;
timeudel(1000);
IOCLR0|=D4|D5|D6|D7;
recv=data;
IOSET0|=(recv<<10);
IOSET0|=E;
timeudel(1000);
IOCLR0|=E;
IOCLR0|=D4|D5|D6|D7;
}
                   /*Key pad Header file*/
#define c1 (1<<20)
#define c2 (1<<21)
#define c3 (1<<22)
#define r1 (1<<16)
#define r2 (1<<17)
#define r3 (1<<18)
#define r4 (1<<19)

char get_key(void)
{
IO1DIR=0x0f<<16;
  IO1CLR|=0xFF<<16;
IO1SET|=0xFF<<16;
while(1)
{
  IO1CLR|=r1;
IO1SET|=0x0E<16;
  if((IO1PIN&c1)==0)
  {
    while((IO1PIN&c1)==0);
return '1';
  }
  else if((IO1PIN&c2)==0)
  {
    while((IO1PIN&c2)==0);
return '2';
  }
  else if((IO1PIN&c3)==0)
  {
    while((IO1PIN&c3)==0);
return '3';
  }
   IO1CLR|=r2;
IO1SET|=0x0D<<16;
   if((IO1PIN&c1)==0)
  {
    while((IO1PIN&c1)==0);
return '4';
  }
else if((IO1PIN&c2)==0)
  {
    while((IO1PIN&c2)==0);
return '5';
  }
else if((IO1PIN&c3)==0)
  {
    while((IO1PIN&c3)==0);
return '6';
  }
  IO1CLR|=r3;
IO1SET|=0X0B<<16;
   if((IO1PIN&c1)==0)
  {
    while((IO1PIN&c1)==0);
return '7';
  }
else if((IO1PIN&c2)==0)
  {
    while((IO1PIN&c2)==0);
return '8';
  }
else if((IO1PIN&c3)==0)
  {
    while((IO1PIN&c3)==0);
return '9';
  }
IO1CLR|=r4;
  IO1SET|=0X07<<16;
     if((IO1PIN&c1)==0)
  {
    while((IO1PIN&c1)==0);
return '*';
  }
else if((IO1PIN&c2)==0)
  {
    while((IO1PIN&c2)==0);
return '0';
  }
else if((IO1PIN&c3)==0)
  {
    while((IO1PIN&c3)==0);
return '#';
  }
}
}
                      /*Main program*/
#include<lpc214x.h>
#include<string.h>
#include"timerdelay.h"
#include"lcd.h"
#include"keypad.h"
#define bit(x) (1<<x)
char flag=0;
char pwd[]="3333";
void lock(void);
int main(void)
{
char key[5];
int con=0;
lcd_init();
lcd_cmd(0x01);
lcd_string("press 1 to cha-");
lcd_cmd(0x01);
lcd_string("nge password");
flag=get_key();
if(flag=='1')
{
lcd_cmd(0x01);
lcd_string("New pwd : ");
for(con=0;con<4;con++){
pwd[con]=get_key();
lcd_string("*");}
     pwd[con]=0;
   }
while(1){
lcd_cmd(0x01);
lcd_string("password:");
//lcd_cmd(0xc0);
for(con=0;con<4;con++){
key[con]=get_key();
lcd_string("*");}
key[con]=0;
  if(strcmp(key,pwd)!=0)
  {
lcd_cmd(0x20);
    lcd_cmd(0x01);
lcd_string("Wrong password");
}
else {
lock();
}
}
}
void lock(void)
{
IO0DIR|=bit(19)|bit(20);
lcd_cmd(0x01);
lcd_string("lock is opening");
IO0SET|=bit(19);
timemdel(50);
IO0CLR|=bit(19);
timemdel(100);
lcd_cmd(0x01);
lcd_string("lock is closing");
IO0SET|=bit(20);
timemdel(50);
IO0CLR|=bit(20);
}


NOTE: Save header files as <filename>.h in a folder and include that folder in target options>c/c++>include paths
        
         got any questions comment below

Comments

Post a Comment

Popular posts from this blog

Building Digital thermometer using ADC in ARM7 (lpc2148)