/* Code copyright to “Circuits Bazaar” for Educational purposes .
you can’t use it for commercial
purpose */
#include<reg51.h>
#define port P1
#define dataport P2
#define key P3
#define sec 100
sbit rs = port^0;
sbit rw = port^1;
sbit en = port^2;
sbit col1=key^4;
sbit col2=key^5;
sbit col3=key^6;
sbit row1=key^0;
sbit row2=key^1;
sbit row3=key^2;
sbit row4=key^3;
sbit buzzer=P1^3;
sbit lock_output=P1^4;
sbit wrong_pass= P1^5;
sbit relay = P1^6;
int check=0;
int digit[4]={0,0,0,0};
int dig_one=4;
int dig_two=4;
int dig_three=3;
int dig_four=0;
int i,count=0;
void delay(unsigned int msec) //Time delay function
int i,j ;
for(i=0;i<msec;i++)
    for(j=0;j<1275;j++);
void lcd_cmd(unsigned char item) //Function to send command to LCD
dataport = item;
rs= 0;
rw=0;
en=1;
delay(1);
en=0;
return;
void lcd_data(unsigned char item) // Function to send data to LCD
dataport = item;
rs= 1;
rw=0;
en=1;
delay(1);
en=0;
return;
void lcd_data_string(unsigned char *str) // Function to send string to LCD
int i=0;
while(str[i]!='\0')
    lcd_data(str[i]);
    i++;
    //delay(10);
return;
}
void lcd(unsigned char str[10]) // Function to send string to LCD
lcd_cmd(0x38);
lcd_cmd(0x0e);
lcd_data_string(str);
void ans()
if(check>3)
    lcd_cmd(0x01);
    lcd_cmd(0x82);
    lcd_data_string(" LOCK OPEN");
    lock_output=1;
    wrong_pass=0;
    relay=~relay;
else
    lcd_cmd(0x01);
    lcd_cmd(0x81);
    lcd_data_string("WRONG PASSWORD");
    lock_output=0;
    wrong_pass=1;
    count++;
    delay(750);
void code_check() // Function to check password
if(i<=3 )
    switch((i+1))
    case 1: {
        if(dig_one==digit[0])
            check=check+1;
        break;
    case 2: {
        if(dig_two==digit[1])
        {
            check=check+1;
        break;
    case 3: {
        if(dig_three==digit[2])
            check=check+1;
        break;
    case 4: {
        if(dig_four==digit[3])
            check=check+1;
        break;
if(i==3)
{
    ans();
void display(int a) //Display function
switch(a)
    case 1:{
     lcd_data('1');
     delay(30);
     digit[i]=1;
     code_check();
     break;
    case 2:{
     lcd_data('2');
     delay(30);
     digit[i]=2;
     code_check();
     break;
    case 3:{
     lcd_data('3');
 delay(30);
 digit[i]=3;
 code_check();
 break;
case 4:{
 lcd_data('4');
 delay(30);
 digit[i]=4;
 code_check();
 break;
case 5:{
 lcd_data('5');
 delay(30);
 digit[i]=5;
 code_check();
 break;
case 6:{
 lcd_data('6');
 delay(30);
 digit[i]=6;
 code_check();
 break;
 }
case 7:{
 lcd_data('7');
 delay(30);
 digit[i]=7;
 code_check();
 break;
case 8:{
 lcd_data('8');
 delay(30);
 digit[i]=8;
 code_check();
 break;
case 9:{
 lcd_data('9');
 delay(30);
 digit[i]=9;
 code_check();
 break;
case 0:{
 lcd_data('0');
 delay(30);
    digit[i]=0;
    code_check();
    break;
void check_col1()
row1=row2=row3=row4=1;
row1=0;
if(col1==0)
display(1);
row1=1;
row2=0;
if(col1==0)
display(4);
row2=1;
row3=0;
if(col1==0)
display(7);
row3=1;
row4=0;
if(col1==0)
{
    row4=1;
void check_col2()
row1=row2=row3=row4=1;
row1=0;
if(col2==0)
display(2);
row1=1;
row2=0;
if(col2==0)
display(5);
row2=1;
row3=0;
if(col2==0)
display(8);
row3=1;
row4=0;
if(col2==0)
display(0);
row4=1;
}
void check_col3()
row1=row2=row3=row4=1;
row1=0;
if(col3==0)
display(3);
row1=1;
row2=0;
if(col3==0)
display(6);
row2=1;
row3=0;
if(col3==0)
display(9);
row3=1;
row4=0;
if(col3==0)
    row4=1;
void main()
{
lock_output=wrong_pass              =0;
buzzer=1;
lcd_cmd(0x01);
col1=col2=col3=1;
relay=0;
lcd_cmd(0x38);
lcd_cmd(0x0C);
lcd_cmd(0x83);
lcd("WELCOME");
delay(500);
while(1)
    lcd_cmd(0x01); //Clear LCD screen
    lock_output=0;
    wrong_pass=0;
    lcd_cmd(0x81); // Set cursor on position first of first line
    lcd("ENTER PASSWORD");
    check=0;
    row1=row2=row3=row4=0;
    while(col1==1 && col2==1 && col3==1);
    for(i=0;i<4;i++)
    delay(100);
    lcd_cmd(0xc4+i);
    row1=row2=row3=row4=0;
    while(col1==1 && col2==1 && col3==1);
    row1=row2=row3=row4=0;
    if(col1==0)
    check_col1();
    else
        if(col2==0)
        check_col2();
        else
        if(col3==0)
        check_col3();
    if(count==4)
    lcd_cmd(0x01);
    lcd_cmd(0x86);
    lcd("SORRY");
    lcd_cmd(0xc1);
    lcd("NO MORE TRIALS");
    buzzer=0;
    while(1);