Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
#include<reg51.h>
//Function declarations
void cct_init(void);
void delay(int);
void lcdinit(void);
void writecmd(int);
void writedata(char);
void ReturnHome(void);
void display();
void display2();
//*******************
//Pin description
/*
P2.4 to P2.7 is data bus
P1.0 is RS
P1.1 is E
*/
//********************
// Defines Pins
sbit RS = P1^0;
sbit E = P1^1;
unsigned char card_id[12];
unsigned char tag[12] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '1', '2', '3' };
unsigned char read_id[12];
unsigned char current_byte = 0;
void recieve() interrupt 4 //Function to recieve data serialy from RS232
{
card_id[current_byte]=SBUF;
RI=0; // Reset the serial interrupt after recieving the byte
current_byte++;
}
// ***********************************************************
// Main program
//
void main(void)
{
cct_init(); //Make all ports zero
TMOD=0x20; //Enable Timer 1
TH1=0XFD;
SCON=0x50;
TR1=1;
EA=1;
ES=1;
lcdinit(); //Initilize LCD
writedata('U'); //write
writedata('n'); //write
writedata('i'); //write
writedata('q'); //write
writedata('u'); //write
writedata('e'); //write
writedata(' '); //write
writedata('C'); //write
writedata('a'); //write
writedata('r'); //write
writedata('d'); //write
writedata(' '); //write
writedata('I'); //write
writedata('d');
ReturnHome(); //Return to 0 position
while(1)
{
while(current_byte!=12);
display();
delay(50000);
if(tag == read_id) {
display2();
}
}
}
void display() // Function to display the unique id
{
unsigned char count;
writecmd(0xC1); //Place cursor to second position of second line
for(count=0;count<12;count++)
{
writedata(card_id[count] + 48);
read_id[count] = card_id[count] + 48;
}
current_byte=0;
}
void display2() // Function to display the unique id
{
unsigned char count;
writecmd(0xC1); //Place cursor to second position of second line
for(count=0;count<12;count++)
{
writedata(tag[count]);
}
}
void cct_init(void)
{
P0 = 0x00; //not used
P1 = 0x00; //not used
P2 = 0x00; //used as data port
P3 = 0x00; //used for generating E and RS
}
void delay(int a)
{
int i;
for(i=0;i<a;i++); //null statement
}
void writedata(char t)
{
RS = 1; // This is data
P2 &= 0x0F; // Make P2.4 to P2.7 zero
P2 |= (t&0xF0); // Write Upper nibble of data
E = 1; // => E = 1
delay(150);
E = 0; // => E = 0
delay(150);
P2 &= 0x0F; // Make P2.4 to P2.7 zero
P2 |= ((t<<4)&0xF0);// Write Lower nibble of data
E = 1; // => E = 1
delay(150);
E = 0; // => E = 0
delay(150);
}
void writecmd(int z)
{
RS = 0; // This is command
P2 &= 0x0F; // Make P2.4 to P2.7 zero
P2 |= (z&0xF0); // Write Upper nibble of data
E = 1; // => E = 1
delay(150);
E = 0; // => E = 0
delay(150);
P2 &= 0x0F; // Make P2.4 to P2.7 zero
P2 |= ((z<<4)&0xF0);// Write Lower nibble of data
E = 1; // => E = 1
delay(150);
E = 0; // => E = 0
delay(150);
}
void lcdinit(void)
{
///////////// Reset process from datasheet /////////
delay(15000);
P2 &= 0x0F; // Make P2.4 to P2.7 zero
P2 |= (0x30&0xF0); // Write 0x3
E = 1; // => E = 1
delay(150);
E = 0; // => E = 0
delay(150);
delay(4500);
P2 &= 0x0F; // Make P2.4 to P2.7 zero
P2 |= (0x30&0xF0); // Write 0x3
E = 1; // => E = 1
delay(150);
E = 0; // => E = 0
delay(150);
delay(300);
P2 &= 0x0F; // Make P2.4 to P2.7 zero
P2 |= (0x30&0xF0); // Write 0x3
E = 1; // => E = 1
delay(150);
E = 0; // => E = 0
delay(150);
delay(650);
P2 &= 0x0F; // Make P2.4 to P2.7 zero
P2 |= (0x20&0xF0); // Write 0x2
E = 1; // => E = 1
delay(150);
E = 0; // => E = 0
delay(150);
delay(650);
/////////////////////////////////////////////////////
writecmd(0x28); //function set
writecmd(0x0c); //display on,cursor off,blink off
writecmd(0x01); //clear display
writecmd(0x06); //entry mode, set increment
}
void ReturnHome(void) //Return to 0 location
{
writecmd(0x02);
delay(1500);
}