标题:
单片机电子密码锁1602液晶显示Proteus仿真程序资料
[打印本页]
作者:
shllan
时间:
2019-11-25 21:01
标题:
单片机电子密码锁1602液晶显示Proteus仿真程序资料
电子密码锁的主要功能。
(1)共8位密码,每位的取值范围为1~8。
(2)用户可以自行设定和修改密码。
(3)按每个密码键时都有声、光提示。
(4)若键入的8位开锁密码不完全正确,则报警5秒钟,以提醒他人注意。
(5)开锁密码错3次要报警10分钟,报警期间输入密码无效,以防窃贼多次试探密码。
(6)键入的8位开锁密码完全正确才能开锁,开锁时要有1秒的提示音。
(7)密码键盘上只允许有8个密码按键和1个发光管。锁内有备用电池,只有内部上电复位时才能设置或修改密码,因此,仅在门外按键是不能修改或设置密码的。
(8)密码设定完毕后要有2秒的提示音。
电路图.jpg
(1.16 MB, 下载次数: 55)
下载附件
2019-11-25 20:59 上传
单片机源程序如下:
#include"at89x51.h"
#include"key.h"
#include"lcd.h"
uchar code show_0[]="Please input the password:";
uchar code show_1[]="The cipher is:" ;
uchar code show_2[]="********";
uchar code show_3[]="The password is wrong!";
uchar code show_4[]="This is the last time,";
uchar code show_5[]="Please try it tomorrow!";
uchar code show_6[]="you are right!";
uchar code show_7[]="Please input the new cipher:";
uchar code show_8[]="Input it again!";
uchar code show_9[]="Establishes successful! ";
uchar code show_10[]="(^_^)";
uchar init_pswd[]={8,8,8,8,8,8,8,8};
uchar pswd[8]={0};
uchar pswd_1[8]={0};
void play(uchar *j,uchar k) //K是显示的个数,j是地址
{
uchar i;
for(i=0;i<k;i++)
{
dat_w(*(j+i));
delay(20);
}
}
main()
{
uchar j=0,i=0,sum_1=0;
loop:init();
clear();
gotoxy(1,0);
play(show_0,16);
gotoxy(2,0);
play(show_0+17,10);
/****密码输入****/
do
{
key();
}
while(ki!=15);
clear();
gotoxy(1,0);
play(show_1,15);
do
{
flag=0;
key();
gotoxy(2,0);
if(flag==1&&ki<=9)
{
pswd[i]=ki;
play(show_2,i);
i++;
}
if(ki==14) //14则退出.
break;
}
while(i<=8);
for(i=0;i<=7;i++)
{
sum_1=init_pswd[i]-pswd[i]+sum_1;
if(sum_1!=0)
{
clear();
j++;
if(j==3)
{
clear();
gotoxy(1,0);
play(show_4,16);
gotoxy(2,0);
play(show_4+16,14);
delay(500);
delay(500);
clear();
gotoxy(1,0);
play(show_5+7,16);
gotoxy(2,5);
play(show_10,5);
while(1); //三次输入密码失败,自锁
}
gotoxy(1,0);
play(show_3,16);
gotoxy(2,5);
play(show_3+15,7);
delay(500);
clear();
gotoxy(1,0);
play(show_8,15);
goto loop;
}
if(sum_1==0)
{
clear();
gotoxy(1,0);
play(show_6,15);
do
{
key();
}
while(ki!=13);
loop1:clear();
gotoxy(1,0);
play(show_7,13);
gotoxy(2,0);
play(show_7+13,15);
/****第一次输密码***/
i=0;
do
{
flag=0;
key();
if(flag==1&&ki<=9)
{
pswd[i]=ki;
i++;
clear();
gotoxy(1,0);
play(show_2,i);
}
}while(i<=7);
clear();
gotoxy(1,0);
play(show_8,15);
/***第二次输密码****/
i=0;
sum_1=0;
do
{
flag=0;
key();
if(flag==1&&ki<=9)
{
pswd_1[i]=ki;
i++;
clear();
gotoxy(1,0);
play(show_2,i);
}
}
while(i<=7);
for(i=0;i<=7;i++)
{
sum_1=sum_1+ pswd_1[i]-pswd[i];
}
if(sum_1==0)
{
clear();
gotoxy(1,2);
play(show_9,12);
gotoxy(2,2);
play(show_9+13,11);
for(i=0;i<=7;i++)
{
init_pswd[i]=pswd[1];
}
while(1);
}
if(sum_1!=0)
{
clear();
goto loop1;
}
}
}
}
复制代码
.png
(26.77 KB, 下载次数: 62)
下载附件
2019-11-25 20:59 上传
全部资料51hei下载地址:
电子密码锁1602液晶显示资料.rar
(366.88 KB, 下载次数: 82)
2019-11-25 20:59 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1