#include<reg51.h>
sbit output=P3^0;
void door_open();
void lcd_command(unsigned char comm);
void lcd_data(unsigned char disp);
unsigned int data_out,command=0x80,temp;
sfr lcd_data_pin=0xA0;
sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P1^2;
unsigned char card_id[12];
unsigned char current_byte = 0;
void delay(unsigned int count)
{
int i,j;
for(i=0;i<count;i++)
for(j=0;j<1275;j++);
}
void lcd_command(unsigned char comm) //Lcd command funtion
{
lcd_data_pin=comm;
en=1;
rs=0;
rw=0;
delay(1);
en=0;
}
void lcd_data(unsigned char disp) //Lcd data function
{
lcd_data_pin=disp;
en=1;
rs=1;
rw=0;
delay(1);
en=0;
}
lcd_string(unsigned char *disp) //Lcd string function
{
int x;
for(x=0;disp[x]!=0;x++)
{
lcd_data(disp[x]);
}
}
void lcd_ini() //Function to inisialize the LCD
{
lcd_command(0x38);
delay(5);
lcd_command(0x0F);
delay(5);
lcd_command(0x80);
delay(5);
}
void display() // Function to display the unique id
{
unsigned char count;
lcd_command(0xC1); //Place cursor to second position of second line
for(count=0;count<12;count++)
{
lcd_data(card_id[count]);
}
current_byte=0;
}
void compare()
{
int m;
for(m=0;m<12;m++)
{
if(card_id[m]=='a' && card_id[m+1]=='b' && card_id[m+2]=='c' && card_id[m+3]=='d' && card_id[m+4]=='e' && card_id[m+5]=='f' && card_id[m+6]=='a' && card_id[m+7]=='b' && card_id[m+8]=='c' && card_id[m+9]=='d' && card_id[m+10]=='e' && card_id[m+11]=='f'
|| card_id[m]=='1' && card_id[m+1]=='2' && card_id[m+2]=='3' && card_id[m+3]=='1' && card_id[m+4]=='2' && card_id[m+5]=='3' && card_id[m+6]=='4' && card_id[m+7]=='5' && card_id[m+8]=='6' && card_id[m+9]=='7' && card_id[m+10]=='8' && card_id[m+11]=='9')
{
display();
door_open();
}
}
}
void door_open()
{
lcd_command(0x01);
lcd_command(0x84);
lcd_string("WelcomE");
lcd_command(0xC0);
lcd_string("The door opened");
}
void recieve() interrupt 4
{
card_id[current_byte]=SBUF;
RI=0; // Reset the serial interrupt after recieving the byte
current_byte++;
}
void main()
{
output=0;
TMOD=0x20; //Enable Timer 1
TH1=0XFD;
SCON=0x50;
TR1=1;
EA=1;
ES=1; // Trigger Timer 1
lcd_ini();
lcd_command(0x81); //Place cursor to second position of first line
lcd_string("UNIQUE CARD ID:");
delay(200);
while(1)
{
while(current_byte!=12);
compare();
}
}