في مشروع قفل لوحة المفاتيح هذا ، استخدمنا متحكم AT89S52 ، أحد سلسلة متحكم 8051 من شركة ATMEL corp. أنا هنا أستخدم لوحة مفاتيح 4X4 لأخذ مدخلات من المستخدم (لإدخال كلمة المرور) وعرض النتائج المقابلة على شاشة LCD مقاس 16 × 2.
نظرًا لأن AT89S52 لا يحتوي على مذبذب داخلي خاص به ، لذلك نحتاج إلى توفير بلورة خارجية تبلغ 11.0592 ميجا هرتز لجعلها تعمل. أنا أستخدم IC منظم الجهد 7805 لتحويل 9V إلى خرج 5V المطلوب.
#include
#include
#include
#include
sbit LEDg=P2^4;
sbit LEDr=P2^3;
//// FUNCTIONS FOR LOCK image on LCD////
void lock()
{
Lcd8_Cmd(72);
Lcd8_Write_Char(0);
Lcd8_Write_Char(14);
Lcd8_Write_Char(10);
Lcd8_Write_Char(10);
Lcd8_Write_Char(31);
Lcd8_Write_Char(27);
Lcd8_Write_Char(31);
Lcd8_Cmd(0xcf);
Lcd8_Write_Char(1);
}
void open()
{
Lcd8_Cmd(72);
Lcd8_Write_Char(14);
Lcd8_Write_Char(10);
Lcd8_Write_Char(2);
Lcd8_Write_Char(2);
Lcd8_Write_Char(31);
Lcd8_Write_Char(27);
Lcd8_Write_Char(31);
Lcd8_Cmd(0xcf);
Lcd8_Write_Char(1);
}
//// FUNCTION INPUTTING VALES FROM USERS AND STORING THEM TO AN ARRAY////
void input(char arr[])
{ unsigned char i=0,k=0,N[16];
Lcd8_Cmd(0xc0);
while(k!='#')
{
k=Read_Keypad();
if(k && k!='#')
{
N[i++]=k;
Lcd8_Write_Char('*');
}
}
strcpy(arr,N);
arr[i]='';
}
void main()
{
unsigned char P[16]={"000"}; ///default password
while(1)
{ unsigned char p[16],s[16],j;
LEDg=0;LEDr=1;
Lcd8_Init();
lock();
Lcd8_Cmd(0x80);
Lcd8_Write_String("ENTER PASSWORD");
input(p);
if(strcmp(p,P)==0)
{
Lcd8_Init();
open();
Lcd8_Cmd(0x80);
Lcd8_Write_String("ACCESS GRANTED");
LEDr=0;LEDg=1;
while(Read_Keypad()!='#')
{}
}
else if(strcmp(p,"*")==0)
{
Lcd8_Init();
lock();
Lcd8_Cmd(0x80);
Lcd8_Write_String("CURRENT PASSWORD");
input(p);
if(strcmp(p,P)==0)
{
Lcd8_Init();
lock();
Lcd8_Cmd(0x80);
Lcd8_Write_String("NEW PASSWORD");
input(s);
Lcd8_Init();
lock();
Lcd8_Cmd(0x80);
Lcd8_Write_String("CONFIRM PASSWORD");
input(p);
if(strcmp(p,s)==0)
{ j=strlen(s);
strcpy(P,s);
P[++j]='';
Lcd8_Init();
lock();
Lcd8_Cmd(0x80);
Lcd8_Write_String("CHANGE");
Lcd8_Cmd(0xc0);
Lcd8_Write_String("SUCCESSFULL");
while(Read_Keypad()!='#')
{}
}
else
{
Lcd8_Init();
lock();
Lcd8_Cmd(0x80);
Lcd8_Write_String("CHANGE");
Lcd8_Cmd(0xc0);
Lcd8_Write_String("UNSUCCESSFULL");
while(Read_Keypad()!='#')
{}
}
}
else
{
Lcd8_Init();
lock();
Lcd8_Cmd(0x80);
Lcd8_Write_String("WRONG PASSWORD");
delay_msec(2000);
}
}
else
{
Lcd8_Init();
lock();
Lcd8_Cmd(0x80);
Lcd8_Write_String("ACCESS DENIED");
LEDr=0;delay_msec(250); LEDr=1;delay_msec(250);
LEDr=0;delay_msec(250);
LEDr=1;delay_msec(250);
LEDr=0;delay_msec(250);
LEDr=1;delay_msec(250);
}
}
}
----------------------------------------------------------------------------------
CODE (delay.h)
----------------------------------------------------------------------------------
void delay_msec(int time)
{int i=0;
while(i{TMOD=0x10;
TH1=0xfc;
TL1=0x65;
TR1=1;
while(TF1==0);
TR1=0;
TF1=0;
i++;
}
}
--------------------------------------------------------------------------------------
CODE (lcd.h)
--------------------------------------------------------------------------------------
#include
//LCD Module Connections
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
//End LCD Module Connections
char *string;
//LCD 8 Bit Interfacing Functions
void Lcd8_Cmd(unsigned char value)
{
P3=value;
RS=0;
RW=0;
E=1;
delay_msec(1);
E=0;
}
void Lcd8_Init()
{
Lcd8_Cmd(0x38); //function set
Lcd8_Cmd(0x0C); //display on,cursor off,blink off
Lcd8_Cmd(0x01); //clear display
Lcd8_Cmd(0x06); //entry mode, set increment
}
void Lcd8_Write_Char(unsigned char value)
{
P3=value;
RS=1;
RW=0;
E=1;
delay_msec(1);
E=0;
}
void Lcd8_Write_String(char *a)
{
int i;
string=a;
for(i=0;a[i]!='';i++)
Lcd8_Write_Char(a[i]);
}
void Lcd8_Shift_Right()
{ int j;
for(j=0;j{Lcd8_Cmd(0x1C);delay_msec(100);}
}
void Lcd8_Shift_Left()
{ int k;
for(k=0;k{Lcd8_Cmd(0x18);delay_msec(100);}
}
------------------------------------------------------------------------------
CODE (keypad.h)
------------------------------------------------------------------------------
sbit R1 = P1^0;
sbit R2 = P1^1;
sbit R3 = P1^2;
sbit R4 = P1^3;
sbit C1 = P1^4;
sbit C2 = P1^5;
sbit C3 = P1^6;
sbit C4 = P1^7;
//End Keypad Connections
char Read_Keypad()
{
C1=C2=C3=C4=1;
R1=0;
R2=1;
R3=1;
R4=1;
if(C1==0){while(C1==0);return '1';}
if(C2==0){while(C2==0);return '2';}
if(C3==0){while(C3==0);return '3';}
if(C4==0){while(C4==0);return 'A';}
R1=1;
R2=0;
R3=1;
R4=1;
if(C1==0){while(C1==0);return '4';}
if(C2==0){while(C2==0);return '5';}
if(C3==0){while(C3==0);return '6';}
if(C4==0){while(C4==0);return 'B';}
R1=1;
R2=1;
R3=0;
R4=1;
if(C1==0){while(C1==0);return '7';}
if(C2==0){while(C2==0);return '8';}
if(C3==0){while(C3==0);return '9';}
if(C4==0){while(C4==0);return 'C';}
R1=1;
R2=1;
R3=1;
R4=0;
if(C1==0){while(C1==0);return '*';}
if(C2==0){while(C2==0);return '0';}
if(C3==0){while(C3==0);return '#';}
if(C4==0){while(C4==0);return 'D';}
return 0;
}