Program Flow
Program Flow
int i,j,a[7];
int y;
//function for swapping lsbyte and msbyte of data
unsigned char xch(unsigned char data1)
{
unsigned char temp,temp1;
temp=data1;
data1=data1>>4;
temp1=data1;
data1=temp;
data1=data1<<4;
data1=data1|temp1;
return(data1);
}
void clr_lcd()
{
send_command(0x01);
_delay_us(10);
send_command(0x02);
_delay_us(10);
}
void PASB()
{
PORTD=0x10;
_delay_us(10);
PORTD=0x00;
_delay_us(10);
}
void C_lenth()
{
if(i>7)
{
clr_lcd();
lcd_gotoxy(1,1);
lcd_print("Pass too long");
lcd_gotoxy(1,2);
lcd_print("Press R");
}
}
void inc()
{
C_lenth();
i=i+1;
y=y+1;
_delay_ms(5);
}
int main()
{
int exit=0;
int m=0;
unsigned char k,b[7]={8,8,9,0,8,8,5};
DDRB=0x00;
PINB=0x00;
DDRD=0xF0;
PIND=0xF0;
PORTD=0x00;
//initialize lcd
lcdinit();
lcd_gotoxy(1,1);
lcd_print("P for Pass");
while(1)
{
while(PINB==0x40)
{
for(int n=0;n<=100;n++)
{
PASB();
}
clr_lcd();
lcd_gotoxy(1,1);
lcd_print("Enter pass");
i=0;
y=1;
for(;;)
{
if(PIND==0x02)
{
for(int n=0;n<=200;n++)
{
PASB();
}
i=i-1;
j=i;
goto exit;
}
if(PINB==0x01)
{
if(PINB==0x01)
{
PASB();
lcd_gotoxy(y,2);
lcd_print("1");
}
if(PINB==0x00)
{
a[i]=1;
inc();
}
}
if(PINB==0x02)
{
if(PINB==0x02)
{
PASB();
lcd_gotoxy(y,2);
lcd_print("5");
}
if(PINB==0x00)
{
a[i]=5;
inc();
}
}
if(PINB==0x04)
{
if(PINB==0x04)
{
PASB();
lcd_gotoxy(y,2);
lcd_print("9");
}
if(PINB==0x00)
{
a[i]=9;
inc();
}
}
if(PINB==0x08)
{
if(PINB==0x08)
{
PASB();
lcd_gotoxy(y,2);
lcd_print("0");
}
if(PINB==0x00)
{
a[i]=0;
inc();
}
}
if(PINB==0x10)
{
if(PINB==0x10)
{
PASB();
lcd_gotoxy(y,2);
lcd_print("6");
}
if(PINB==0x00)
{
a[i]=6;
inc();
}
}
if(PINB==0x20)
{
if(PINB==0x20)
{
PASB();
lcd_gotoxy(y,2);
lcd_print("2");
}
if(PINB==0x00)
{
a[i]=2;
inc();
}
}
if(PINB==0x80)
{
if(PINB==0x80)
{
PASB();
lcd_gotoxy(y,2);
lcd_print("7");
}
if(PINB==0x00)
{
a[i]=7;
inc();
}
}
if(PIND==0x01)
{
if(PIND==0x01)
{
PASB();
lcd_gotoxy(y,2);
lcd_print("3");
}
if(PIND==0x00)
{
a[i]=3;
inc();
}
}
if(PIND==0x04)
{
if(PIND==0x04)
{
PASB();
lcd_gotoxy(y,2);
lcd_print("8");
}
if(PIND==0x00)
{
a[i]=8;
inc();
}
}
if(PIND==0x08)
{
if(PIND==0x08)
{
PASB();
lcd_gotoxy(y,2);
lcd_print("4");
}
if(PIND==0x00)
{
a[i]=4;
inc();
}
}
}
exit:
for(k=0;k<=j;k++)
{
if(a[k]==b[k])
{
if(k==j)
{
clr_lcd();
lcd_gotoxy(0,0);
lcd_print("correct pass");
for(int n=0;n<500;n++)
{
PORTD=0x50;
_delay_us(500);
PORTD=0x40;
_delay_us(500);
}
PORTD=0x00;
_delay_ms(1000);
for(int n=0;n<500;n++)
{
PORTD=0x30;
_delay_us(500);
PORTD=0x20;
_delay_us(500);
}
m=1;
}
}
else
{
m=m+1;
if(m==1)
{
clr_lcd();
lcd_gotoxy(1,1);
lcd_print("incorrect pass");
lcd_gotoxy(1,2);
lcd_print("2time leftPRES P");
break;
}
if(m==2)
{
clr_lcd();
lcd_gotoxy(1,1);
lcd_print("incorrect pass");
lcd_gotoxy(1,2);
lcd_print("1time leftPRES P");
break;
}
if(m==3)
{
clr_lcd();
lcd_gotoxy(1,1);
lcd_print("Too many attempt");
lcd_gotoxy(1,2);
lcd_print("DOOR IS LOCKED");
_delay_ms(20);
for(int n=0;n<3;n++)
{
for(int s=0;s<=150;s++)
{
PORTD=0x10;
_delay_us(30);
PORTD=0x00;
_delay_us(30);
}
_delay_ms(70);
}
_delay_ms(10000);
}
}
}
}
}
}