基于单片机的电子密码锁及程序.docx
- 文档编号:24763546
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:19
- 大小:174.61KB
基于单片机的电子密码锁及程序.docx
《基于单片机的电子密码锁及程序.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子密码锁及程序.docx(19页珍藏版)》请在冰豆网上搜索。
基于单片机的电子密码锁及程序
基于单片机的电子密码锁设计
摘要
随着科技和人们的生活水平的提高,如何实现家庭防盗这一问题也变的尤为突出,传统的机械锁由于构造简单,被撬事件屡见不鲜。
电子密码锁保密性好,使用灵活性高,收到广大用户的青睐。
本设计是以单片机AT89C52作为密码锁的主控芯片与数据存储单元,结合外围的矩阵键盘输入、LCD显示、开锁、报警等,用C语言编写程序,并用KeiluVision4软件进行编译设计了一款可以更改密码,具有报警功能的电子密码控制系统。
本设计采用矩阵键盘对密码进行输入,具有较高的优势,减少了I/O口的占用数目。
密码的显示采用LCD显示屏实现,为确保安全性统一使用“*”显示密码,当重新设置密码时按下“修改”键,LCD显示屏显示数字。
采用蜂鸣器模拟报警系统,增加了密码锁的安全能力。
软件使用C语言编程,运用自上而下的模块化设计思想,使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。
测试结果表明,设计达到电子密码锁的功能。
关键字:
密码锁、AT89C52、矩阵键盘、报警
一、设计背景
随着社会科技的进步,锁已经发展到了密码锁、磁性锁、电子锁、激光锁、声控锁等等。
在传统钥匙的基础上,加了一组或多组密码,不同声音,不同磁场,不同声波,不同光束光波,不同图像来控制锁的开启,从而大大提高了锁的安全性。
当今安全信息系统应用越来越广泛,特别在机密保护、维护隐私和财产保护方面起到重大作用,而基于电子密码锁的安全系统是其中的一部分,运用非常广泛,研究它具有重大的现实意义。
电子密码锁可以在日常生活和现代办公中,住宅与办公室的安全防范、单位的文件档案、财务报表以及一些个人资料的保存等多种场合使用。
大大提高了主人物资的安全性。
目前使用的密码锁种类繁多,各具特色。
本文从经济实用的角度出发,采用AT89C52单机,研制了一款具有防盗自动报警功能的电子密码锁。
该密码锁设计方法合理,简单易行,成本低,符合住宅、办公室用锁要求,具有一定的推广价值。
2、设计目的
1.了解单片机开发系统的组成及结构;
2.掌握I/O口的操作方法;
3.能够熟练使用protues和keil软件进行连线和编程,并熟练掌握仿真方法;
4.掌握LCD显示屏的显示原理;
5.掌握C语言编程方法;
6.培养查找错误和改正错误的能力。
3、设计要求
本设计采用单片机为主控芯片,结合外围电路组成电子密码控制系统。
设计主要功能有:
1.设置6位密码,密码通过键盘输入,若密码正确,则锁打开,LCD显示“PasswordRightLockOpened!
”。
原始密码在首次开锁时为“000000”。
2.重新设置密码时,LCD显示“******”,按下“修改”键显示数值。
3.密码只能输入6位数字,无法输入多余数字。
4.具有自动报警功能:
当密码输入错误三次,报警,蜂鸣器响3秒。
5.LED数码管显示密码,为确保安全性所有密码均用“*”表示。
4、设计原理和硬件仿真方案
1.矩阵键盘
密码的输入用矩阵键盘实现,包括数字键和功能键。
具体功能设计如表一:
表一键盘具体功能设计表
按键
键名
功能
0~9
数字键
输入密码
新建
新建键
设定新密码
确认
确认键
比较密码
修改
修改键
显示密码
进入
进入键
允许输入密码
取消
取消键
取消输入密码
如图一所示,矩阵键盘的每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线即可组成有
个按键的键盘。
图一矩阵键盘
本次设计需要0~9十个数字按键、一个新建键、一个确认键、一个修改键、一个进入键和一个取消键共15个按键,所以选用4X4的矩阵按键。
在这种行列式矩阵键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段,还要对按键进行消抖处理。
当确认有按键按下后,就要识别是哪一个按键被按下。
本次设计使用的是线反转法。
给行线置为0x0f,给列线置为0xf0,再将行列进行逻辑或结果为0xff,当有按键按下时相应的按键位行列均为0,行列逻辑或不为0xff,由此可利用行列逻辑或后的值是否为0xff来判断是否有按键按下。
再根据扫描结果判断按下键的位置。
给相应的按键赋值即可实现数字键和功能键。
对功能键进行相应的软件编程即可实现按键功能。
使用矩阵键盘能减少键盘和单片机接口所占用的I/O线数目,当按键较多的时候通常采用这种方法。
2.开锁电路
在本次设计中用发光二极管代替电磁锁,二极管D1亮表示锁开,二极管灭表示没有开锁。
如图二所示,当输入密码与内置密码相配合时将P2.1置0,二极管亮,否则二极管不亮。
图二发光二级管电路
3.报警电路
报警电路由单片机和蜂鸣器组成,如图三所示,当P2.0为低电平时蜂鸣器发出声音报警。
每次输入的密码与正确密码进行比较,如果相同,锁开灯亮。
如果输入错误则用一个变量来记录输入错误的次数,当输入密码错误达到三次时,蜂鸣器工作发出报警声音,本次设计使用的是声音持续3秒蜂鸣器报警,即可听到“嘟——”3秒的响声。
图三报警电路
4.LCD显示电路
密码显示电路由单片机、排阻和LCD显示屏组成。
显示电路如图四所示。
为保证密码的保密性,本设计采用“*”显示所有输入密码,如图四所示。
当重设密码时,按下“修改”键显示数字,如图五所示。
本设计只允许输入数字密码6次,超过6次以后的数字无法输入。
图四LCD显示电路
图五重设密码LCD显示数字
5、软件程序设计
本系统软件设计由主程序、初始化程序、键盘扫描程序、密码输入程序、功能键定义程序、重置密码程序、LCD显示程序、中断延时程序、报警程序、延时程序组成。
如图六所示为主程序流程图,开始接上电源,程序进行初始化设置,然后在键盘上输入密码,此系统进行键盘扫描,判断密码是否正确,密码正确开锁,密码不正确统计错误密码次数加1。
在开锁情况下进行修改密码,点击确认密码修改成功,否则结束返回。
若密码修改成功则再执行之前的操作。
N
YNNYYYN
图六主程序流程图
六、系统调试
本次调试采用的是protues和keil软件进行仿真。
首先运用keil软件编写电子密码锁的源程序,本设计主要运用C语言编写。
源程序编写后运行生成目标文件供protues仿真调试。
图七为LED显示六位密码的情况
图七LCD显示密码图
当密码正确按下确认键发光二极管亮,锁开。
如图八
图八密码正确锁开灯亮
当密码输入错误三次蜂鸣器发出声音报警,如图九所示
图九蜂鸣器报警
由图九可以看到蜂鸣器接地端为蓝色,即此时为低电平,所以蜂鸣器正在发出报警声音。
Protues仿真电路图如图十所示
图十protues仿真电路图
七、设计总结与展望
课程设计是培养学生综合运用所学知识发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说是无处不在。
因此作为二十一世纪的大学生来说掌握单片机的开发技术是十分重要的。
本设计经过多次修改和整理,可以满足基本的要求。
密码正确,锁开;密码输入错误三次,报警;输入密码超过6位之后的数无效;LCD显示屏显示密码为“*”。
在设计的过程中遇到了各种各样的问题,譬如说断电密码保护的设计,由于电路和编程都过于复杂,本设计并未加入。
在编程的过程中问题也是很多,由于程序较长,当实现了这个功能另外一个功能有不能很好的实现,所以要做到模块与模块之间的衔接。
遇到的一些问题也经过努力一一克服。
回顾此次单片机课程设计,至今我仍感触颇多。
在设计过程中从理论到实践我们可以到很多很多东西,巩固了以前学过的知识,还懂得了如何将理论联系实际。
只有理论知识是远远不够的,只有将理论运用到实际中对我们来说才是有意义的,这样才能真正的为社会服务。
七、附录
源程序清单:
#include
#include
#defineucharunsignedchar
staticunsignedchartable[6]={0,0,0,0,0,0};
//Declarefunctions
ucharBusy_Check();
voidInitialize_LCD();
voidWrite_LCD_Data(uchardat);
voidWrite_LCD_Command(ucharcmd);
voidDisplay_String(ucharx,uchary,uchar*str);
voidDisplay_char(ucharhang,ucharlie,charsign);
//
voidwrite_add(ucharaddress,uchardate);//向AT24Cxx中的指定地址写入数据
ucharread_add(ucharaddress);//从AT24Cxx中的指定地址读取数据
voidinit();
ucharh=20;
sbittouch=P2^1;
sbittouch1=P2^2;
sbitspeaker=P2^0;
voiddelay(unsignedcharms)//延时**ms
{
unsignedchari;
while(ms--)
{
for(i=250;i>0;i--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
unsignedcharkeyscan()//扫描键盘
{
unsignedchartemp,y,j;
unsignedcharanjian[]={0xfe,0xfd,0xfb,0xf7};
for(y=0;y<4;y++)
{
P1=anjian[y];
temp=0x10;
for(j=0;j<4;j++)
{
if(!
(P1&temp))
{
return(j+y*4);
}
temp=_crol_(temp,1);
}
}
}
voidjudge()
{
P1=0xf0;
if(P1!
=0xf0)//判断是否有按键
{
delay(50);
delay(50);//消抖
if(P1!
=0xf0)
{
h=keyscan();
}
}
}
voidmain()
{
unsignedchara=1,i=0,k=0,l=1,m=1,n,f=0,s=0;
intq;
Initialize_LCD();
init();
Display_String(1,1,"WelcomeToUse");
Display_String(2,1,"");
touch1=0;
//第一个while循环
while
(1)
{
judge();
if(h<10)
{
if(h==table[i])
k++;
Display_String(2,a,"*");
a++;
i++;
if(a==7)
a=1;
if(i==6)
i=0;
h=16;
}
if(h==14)
{
Display_String(1,1,"InputPassword");
Display_String(2,1,"");
h=16;
touch=1;
touch1=0;
k=0;
l=1;
q=0;
}
if(h==12)
{
if(k==6)
{
Display_String(1,1,"PasswordRight");
Display_String(2,1,"LockOpened!
");
touch=~touch;
}
else
{
Display_String(1,1,"PasswordError");
Display_String(2,1,"");
l=0;
q++;
while(q==3)
{
speaker=0;
delay(200);
delay(200);
delay(200);
speaker=1;
q=0;
}
h=14;
}
delay(255);
k=0;
h=16;
while(l)
{
judge();
if(h==11)
{Display_String(1,1,"NewCode");
Display_String(2,1,"");
while(m==1)
{
judge();
touch1=~touch1;
if(h<10)
{
table[n]=h;
write_add(s,h);
s++;
Display_String(2,a,"*");
a++;
n++;
h=16;
if(n==6)
{
n=0;
s=0;
}
}
if(h==15)
{
if(n==0)
n=6;
s=6;
a--;
s--;
Display_String(2,a,"");
n--;
h=16;
}
if(h==13)
m=0;
}
if(h==13)
h=13;
f=1;
}
if(h==14)
{
l=0;
}
if(h==13)
{
Display_String(2,1,"");
for(n=0;n<6;n++)
Display_char(2,n+1,(uchar)(table[n]+48));h=13;l=0;f=1;}
k=0;
}
}
if(h==15)
{
a--;
Display_String(2,a,"");
k--;
i--;
h=16;
}
if(h==13)
{if(f==1)
{for(n=0;n<6;n++)
Display_char(2,n+1,(uchar)(table[n]+48));f=0;}
else
Display_String(2,1,"******");
delay(255);
delay(255);
Display_String(1,1,"WelcomeToUse");
Display_String(2,1,"");
l=1;a=1;k=0;n=0;m=1;
h=16;
}
}
for(s=0;s<6;s++)
{table[s]=read_add(s);
delay(50);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 电子 密码锁 程序