作者:湖北师范学院 曾文亮 肖红霞 费潇潇
指导教师:梁赫西 闻辉
作品简介
随着社会物质财富的日益增长和人们生活水平的提高,安全成为现代居民最关心的问题之一。而锁自古以来就是把守门的铁将军,人们对它要求甚高,即要求可靠地防盗,又要使用方便,这也是制锁者长期以来研制的主题。如何实现家庭或公司的防盗这一问题也变的尤其突出,传统的机械锁由于其构造简单,被撬的事件屡见不鲜,再者,普通密码锁的密码容易被多次试探而破译,所以,考虑到单片机的优越性,一种基于单片机的电子密码锁应运而生。电子密码锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲睐。
本次我们小组制作的是一款基于IAP15F261S2开发板的8位密码锁,能防止多次试探而不被破译,从而有效地克服了现实生活中存在的许多缺点。
功能与使用:我们已经设定初始密码为8个8,连接电源线,1602液晶显示“Please input the password”提醒输入密码,此时需要按下确认键,液晶显示输入密码,密码用*号表示,当*数达到8位,此时系统将会自动检测与设定的初始密码是否相符,比如我们第一次输入8个1,与初始密码不符,则1602液晶将显示“The password is wrong”,提醒输入密码错误,要求重新输入密码;第二次输入8个2,与初始密码不符,第三次输入0.1.2.3.4.5.6.7.与初始密码依旧不符,三次输入错误,此时系统将会关闭,将不能再次输入。当我们输入8个8,与设定的初始密码相符,液晶将会显示“you are right”,输入密码正确,此时如果想修改初始密码,可以按下修改键,系统将会提醒输入新密码,比如我们输入8个0,此时液晶将会提醒再次输入新密码,如果我们输入8个1,第二次输入的新密码与前一次不符,需要重新输入新的密码。我们再两次输入8个0,当两次输入的新密码相同,1602液晶将会显示“Establishes successful”提醒修改密码成功,此时如果输入新密码,液晶将会显示“you are right”,输入密码正确,如果输入原始密码8个8,提醒输入密码错误,还有两次机会。另外,设计中还设有返回键,输入8位密码的过程中,失误,按错了键,可以按返回键,重新获得三次输入机会。,比如我们输入了4个8,一个1,按下返回键,重新输入8个8,系统将会提醒输入密码正确。
平台选型说明
以IAP15F261S2芯片为控核心制的开发板
设计说明
设计原理:我们本次设计的8位密码锁可以完成密码的检测,密码的修改与重新设定,以及在已知错误输入的重新返回输入。8位密码锁由3部分组成,他们分别是1602液晶显示模块,矩阵键盘模块,iap15f261s2单片机控制模块。
液晶显示模块:本系统设计的显示电路是为了给使用者以提示而设置的为了达到界面友好的目的,显示部分由液晶显示器LCD1602取代普通的数码管完成。开锁时,液晶显示“Please input the password”,此时按下键盘上的确认按键,利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。当密码输入达到8位,完成输入时,系统将会检测输入的密码与初始密码是否相符,如果输入的密码正确的话, LCD将会显示“you are right”,表示8位密码锁已经被打开;如果输入的密码是错误的,LCD将会显示“The password is wrong”,随后跳转到“Please input the password”提醒再次输入密码,如果三次输入的密码仍旧是错误的,液晶将会显示"This is the last time, " "Please try it tomorrow!",系统将会关闭,不能再输入密码了。
矩阵键盘模块:为了加强密码的保密性,采用一个4×4的矩阵式键盘可以任意设置用户的8位密码,从而提高密码的保密性,同时也能减少与单片机接口时所占用的I/O口线的数目,节省了单片机的宝贵资源,在按键比较多的时候,可以采用这种方法。4*4矩阵键盘共有16个键位,4根行线接口连P3口低四位,4根列线端口接P3口高四位。在按键未被按下时,每一条行线与列线的交叉处互不相通,当某个按键被按下后,该按键所在的行线与列线将会连通。这样在P3口的高4位和低4位中各有一位互相连通。通过行列扫描检测出这两位,即可识别出被按下的键。具体识别方式和按键功能完全由软件自定义。
单片机控制模块:本系统采用宏晶公司最新STC15系列IAP15F261S2芯片为控制核心,进行开发的设计,IAP在系统可编程/应用可编程,无需编程器,无需仿真器,可当仿真器使用。IAP15F261S2属于增强型8051CPU,1T,单时钟/机器周期速度比普通8051快十几倍,其片内有大容量2048字节的SRAM,大容量片内EEPROM,其共8通道10位高速ADC,速度可达到30万次/秒,另外在51单片机的基础上又重新定义和充分应用了许多端口,增添了许多功能,使我们的设计也更加的方便。
系统软件设计方面:本系统是在keil为开发平台,运用C语言进行8位密码锁程序的编写,具体分为矩阵键盘的编写,1602液晶与程序初始化的编写,密码修改程序的编写,以及主体文件的编写。
液晶显示程序部分:分别把液晶的E脚连接单片机P5_4端口,RW脚连接单片机P5_5端口,RS脚连接单片机P4_5,然后编写读入数据指令,读入命令指令,清屏指令,初始化,显示位置指令,以及写入字符数组与显示位置的指令。每次更新显示内容前,需清显示清空LCD原先的显示内容,清屏指令的指令码为0x01,即将P0口赋值0x01,,然后指示液晶清屏LCD1602要显示的内容是根据预先设置的字符串,每一次按键输入的指令不同或主程序执行的指令不同,显示的字符串的内容和长度将会不同。
程序如下:
sbit E=P5^4;
sbit RW=P5^5;
sbit RS=P4^5;
void cmd_w(uchar cmd)
{
RW=0;
RS=0;
E=1;
P0=cmd;
delay(1);
E=0;
}
void dat_w(uchar dat)
{
RW=0;
RS=1;
E=1;
P0=dat;
delay(1);
E=0;
}
void clear(void)
{
cmd_w(0x01);
cmd_w(0x02);
}
void init(void)
{
cmd_w(0x38);
cmd_w(0x0d);
}
void gotoxy(uchar x,uchar y)
{
if(x==1)
{cmd_w(0x80+y);}//第一行
else
{cmd_w(0xc0+y);}//第二行
}
void play(uchar *j,uchar k)
{
uchar i;
for(i=0;i
{
dat_w(*(j+i));
delay(20);
}
}
矩阵键盘的程序部分:主要包括延时程序和键盘扫描,键盘扫描通过给P3端口,送入oxfe,oxfd,oxfb,oxf7,逐步扫描看是否有键按下,通过按键的不同,给ki置不同的值,然后返回ki,不同的ki将对应不同的功能或数字,然后系统来执行不同的命令。
程序如下:
void delay(uint k)
{
k=k*3000;
while(k--);
}
uchar key()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch (temp)
{
case 0xee:ki=0; flag=1;break;
case 0xde:ki=1; flag=1;break;
case 0xbe:ki=2; flag=1;break;
case 0x7e:ki=3; flag=1;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch (temp)
{
case 0xed:ki=4; flag=1;break;
case 0xdd:ki=5; flag=1;break;
case 0xbd:ki=6; flag=1;break;
case 0x7d:ki=7; flag=1;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=0xf0;
}
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch (temp)
{
case 0xeb:ki=8; flag=1;break;
case 0xdb:ki=9; flag=1;break;
case 0xbb:ki=10; flag=1;break;
case 0x7b:ki=11; flag=1;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=0xf0;
}
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch (temp)
{
case 0xe7:ki=12;flag=1;break;
case 0xd7:ki=13;flag=1;;break;
case 0xb7:ki=14;flag=1;break;
case 0x77:ki=15;flag=1;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=0xf0;
}
}
}
return ki;
}
密码修改程序部分:当通过键盘输入的数字与初始密码数字之差等于0即sum_1==0,1602显示密码正确,按下确认键,然后清屏,显示修改密码,通过两次输入相同的新密码,sum_1==0,显示修改成功,如果两次输入的新密码不同,通过loop1指令,返回重新输入新的密码。
程序如下:
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[i];
delay(500);
}
chuli();
}
if (sum_1!=0)
{
clear();
goto loop1;
}
作品特色
该8位密码锁能充分利用了IAP15F261S2系统单片机软、硬件资源,引入了智能化分析功能,提高了系统的可靠性和安全性,另外,电子密码锁若与串行通信结合在一起将会成为宾馆、工厂、学校等需要进行统一管理的建筑群不可缺的商品。 机电一体化的电子密码锁,其功能大大超过弹子锁,且性能更稳定、更安全。其特点,首先保密性好,其次编码可变;其三误码输入保护与可复位重新输入;其四多位密码开锁方式,使用方便,另外也可以使用多种开锁方式。由于自身的优势,电子密码锁会受到越来越多人们的欢迎,使用会越来越广泛,同时,也将会被社会所接受认可,并与弹子锁平分秋色。
系统演示视频: