新简单六位数字密码锁.docx
《新简单六位数字密码锁.docx》由会员分享,可在线阅读,更多相关《新简单六位数字密码锁.docx(24页珍藏版)》请在冰点文库上搜索。
新简单六位数字密码锁
第1章绪论
1.1设计任务
(1)设置七个键位,分别是确认,数字1,数字2,数字3,数字4,数字5,数字6,工作有提示(设通电状态为红灯亮)。
(2)在单片机内部预设六位密码,在使用密码解锁器时,要按预设的密码依次输入才能完成解锁。
预设密码以外的数字都不能解开密码锁(如输入非6位或输入6位与预设密码不同的数字)。
(3)输入密码时,数码管同步显示输入的数字。
(4)输入正确后,有解锁提示(设为绿灯亮),输入错误后也有提示(设为红灯闪烁和鸣笛警告)
(5)输入错误后可以重输,要有复位功能。
1.2设计要求
利用AT89S52单片机的P2端口的P2.0--P2.6连接到7个按键开关上,分别是输入键数字1,数字2,数字3,数字4,数字5,数字6和确认键,P2.7接蜂鸣器。
启动时,按下电源开关,红色指示灯长亮,输入密码,而数码管显示输入的相应数字,然后按下确认键,若密码正确,绿灯亮,数码管熄灭,弱密码错误,红灯闪烁,蜂鸣器响,发出警报。
第2章系统方案设计
2.1硬件设计思想
2.1.1键盘设计
本设计使用7按键,从上到下,从左至右依次设为确认键,数字1,数字2,数字3,数字4,数字5,数字6,用来输入密码,如下图
图2.1键盘仿真图
2.1.2数字显示设计
使用共阳极七段数码管来显示输入的数字,图如下:
图2.2显示仿真图
2.1.3检验密码电路设计
使用LED灯和蜂鸣器来提示输入的密码是否正确,若密码正确,绿灯亮,若密码错误,红灯闪烁,蜂鸣器响,电路如图:
图2.3密码验证系统仿真图
2.2软件设计思想
电子密码锁工作的主要过程是从键盘开始输入密码,同时LED显示密码输入情况,按下确认键后判断密码的正确性,作出开锁或报警处理。
密码的设定,在此程序中密码是固定的,预设的密码为"532416"共6位密码。
在单片机内部预设六位密码,在使用密码解锁器时,要按预设的密码依次输入才能完成解锁。
预设密码以外的数字都不能解开密码锁(如输入非6位或输入6位与预设密码不同的数字)
输入密码时,数码管要在单片机的控制下同步显示输入的数字。
第3章电路设计
3.1电路原理
单片机最小系统。
一个AT89S52单片机做为控制电路,运用其P2口来实现密码的输入和蜂鸣器的报警,通过P0口给数码显示管高低不同电平信号,来实现输入密码的显示,P1接指示灯。
3.2电路原理图
图3.2电路原理图
第4章程序设计
4.1流程图
图4.1系统流程图
4.2算法描述
1、设计一个延时子程序
voiddelayms(unsignedintt)
{
unsignedinti,j;
for(i=t;i>0;i--)
for(j=114;j>0;j--);
}
2、主程序
voidinit()
voiddelayms(unsignedintt)
voidmain()
第5章程序清单与仿真结果
5.1程序清单
#include
sbitmm1=P2^0;//密码按键1-8
sbitmm2=P2^1;
sbitmm3=P2^2;
sbitmm4=P2^3;
sbitmm5=P2^4;
sbitmm6=P2^5;
sbitmmok=P2^6;
sbitl1=P1^0;
sbitl2=P1^2;
sbitfmq=P2^7;
voidinit()
{
P0=0xff;//禁止数码管显示
mm1=1;
mm2=1;
mm3=1;
mm4=1;
mm5=1;
mm6=1;
mmok=1;
fmq=1;
l1=1;
l2=1;
}
voiddelayms(unsignedintt)
{
unsignedinti,j;
for(i=t;i>0;i--)
for(j=114;j>0;j--);
}
voidmain()
{
unsignedcharmmsr,bn,bn1,bn2,bn3,bn4,bn5;
mmsr=0;
bn=0;
bn1=0;
bn2=0;
bn3=0;
bn4=0;
bn5=0;
mmsr=1;
init();
while
(1)
{
if(mmsr==1)
{
if(mm5==0)//系统8位程序密码532416
{
delayms(10);
if(mm5==0)
{
bn=1;
P0=0xff;//消隐
P0=0x92;//显示5
}
}
if((mm3==0)&(bn==1))
{
delayms(10);
if((mm3==0)&(bn==1))
{
bn1=1;
P0=0xff;//消隐
P0=0xb0;//显示3
}
}
if((mm2==0)&(bn1==1))
{
delayms(10);
if((mm2==0)&(bn1==1))
{
bn2=1;
P0=0xff;//消隐
P0=0xa4;//显示2
}
}
if((mm4==0)&(bn2==1))
{
delayms(10);
if((mm4==0)&(bn2==1))
{
bn3=1;
P0=0xff;//消隐
P0=0x99;//显示4
}
}
if((mm1==0)&(bn3==1))
{
delayms(10);
if((mm1==0)&(bn3==1))
{
bn4=1;
P0=0xff;//消隐
P0=0xf9;//显示1
}
}
if((mm6==0)&(bn4==1))
{
delayms(10);
if((mm6==0)&(bn4==1))
{
bn5=1;
P0=0xff;//消隐
P0=0x82;//显示6
}
}
if(mm1==0)
{
delayms(10);
if(mm1==0)
{
P0=0xff;//消隐
P0=0xf9;//显示1
}
}
if(mm2==0)
{
delayms(10);
if(mm2==0)
{
P0=0xff;//消隐
P0=0xa4;//显示2
}
}
if(mm3==0)
{
delayms(10);
if(mm3==0)
{
P0=0xff;//消隐
P0=0xb0;//显示3
}
}
if(mm4==0)
{
delayms(10);
if(mm4==0)
{
P0=0xff;//消隐
P0=0x99;//显示4
}
}
if(mm5==0)
{
delayms(10);
if(mm5==0)
{
P0=0xff;//消隐
P0=0x92;//显示5
}
}
if(mm6==0)
{
delayms(10);
if(mm6==0)
{
P0=0xff;//消隐
P0=0x82;//显示8
}
}
if(mmok==0)
{
delayms(10);
if(mmok==0)
{
if((bn==1)&(bn1==1)&(bn2==1)&(bn3==1)&(bn4==1)&(bn5==1))//密码成功
{
while
(1)
{
P0=0xff;
l2=0;
delayms(100);
}
}
else
{
while
(1)
{
P0=0xff;
fmq=0;
l1=0;
delayms(100);
l1=1;
delayms(100);
}
}
}
}
}
}
}
{
unsignedcharmmsr,bn,bn1,bn2,bn3,bn4,bn5;
mmsr=0;
bn=0;
bn1=0;
bn2=0;
bn3=0;
bn4=0;
bn5=0;
mmsr=1;
init();
while
(1)
{
if(mmsr==1)
{
if(mm5==0)//系统8位程序密码532416
{
delayms(10);
if(mm5==0)
{
bn=1;
P0=0xff;//消隐
P0=0x92;//显示5
}
}
if((mm3==0)&(bn==1))
{
if((mm1==0)&(bn3==1))
{
delayms(10);
if((mm1==0)&(bn3==1))
{
bn4=1;
P0=0xff;//消隐
P0=0xf9;//显示1
}
}
if((mm6==0)&(bn4==1))
{
delayms(10);
if((mm6==0)&(bn4==1))
{
bn5=1;
P0=0xff;//消隐
P0=0x82;//显示6
}
}
if(mm1==0)
{
delayms(10);
if(mm1==0)
{
P0=0xff;//消隐
P0=0xf9;//显示1
P0=0x92;//显示5
}
}
if(mm6==0)
{
delayms(10);
if(mm6==0)
{
P0=0xff;//消隐
P0=0x82;//显示8
}
}
if(mmok==0)
{
delayms(10);
if(mmok==0)
{
if((bn==1)&(bn1==1)&(bn2==1)&(bn3==1)&(bn4==1)&(bn5==1))//密码成功
{
while
(1)
{
P0=0xff;
l2=0;
delayms(100);
}
}
else
{
while
(1)
P0=0xff;
}
5.2仿真结果
1,开始仿真,按下开关,红灯亮
图5.1仿真图
2,输入正确的密码(532416),数码管显示相应的数字
图5.2输入数字“5”
图5.3输入数字“3”
图5.4输入数字“2”
图5.5输入数字“4”
图5.6输入数字“1”
图5.7输入数字“6”
3,(正确密码)按下确认键,绿灯亮
图5.8输入正确密码状态图
4,若输入错误密码,则红灯闪烁,蜂鸣器响(图内为导通状态)
图5.9输入错误密码状态图
第6章设计总结
6.1设计体会
通过这次课程设计和设计中遇到的问题,我积累了一定的经验,刚开始做设计时总是会犯一些错误,只有经过不停的改错不停的编译才能得到正确的程序。
这说明了作为软件编程人员是不能粗心大意的,一个程序的质量的高低与你细心与否有着一定的联系。
设计中要求有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确。
对错误的检查要求我要有足够的耐心,这对以后从事集成电路设计工作会有一定的帮助。
本次课程设计是我到目前为止觉得受益匪浅也是收获最大的一次实习。
身为通信专业的学生,设计是我们将来必需具备的技能。
而这次课程设计恰恰给我们提供了一个应用自己所学知识去勇于创新和实践的平台。
从通过理论设计,到仿真软件仿真,再到确定具体方案,再到安装实际电路,最后到调试电路、成型。
整个过程都需要我充分利用所学的知识进行思考、借鉴。
可以说,本次课程设计是针对前面所学的知识进行的一次比较综合的检验。
总的来说,这次课程设计虽然很累,但却是苦中有乐,非常充实。
在这次实习中,正确的思路是很重要的,只有你的设计思路是正确的,那你的设计才有可能成功。
因此我们在设计前必须做好充分的准备,认真查找详细的资料,为我们设计的成功打下坚实的基础,所以跑图书馆和上网、查资料成为了我每天的必修课。
本次课程设计不仅培养了我们的科学严谨的学习态度,使我们认识到不管做任何事都要付出一定的努力,才会有大的收获。
本次设计的完成,离不开刘老师的指导。
在此,非常感谢刘老师的指导和同学的帮助。
参考文献
[1]蔡美琴,张为民,沈新群等.MCS51系列单片机系统及其应用[M].北京:
高等教育出版社,1992.
[2]何立民.单片机应用技术选篇(5)[M].北京:
北京航空航天大学出版社,1997.
[3]杨光友.单片机微型计算机原理及接口技术[M].北京:
中国水利水电出版社,2002
[4]李广弟.单片机基础[M].北京:
北京航空航天大学出版社,1994
[5]阎石.数字电子技术基础(第三版).北京:
高等教育出版社,1989
致谢
感谢刘伟春老师对我的指导和悉心帮助和包容。
还有同组同学的团队合作,在李星亮老师的悉心指导下我们完成了这次课程设计。
课程设计的过程是苦的但也是快乐的。
感谢老师和同学的帮助没有你们就没有这编论文,没有你们不可能做出来,再感谢你们。
实物展示
密码错误后红灯亮并发出蜂鸣声
数字密码“5”
数字密码“3”
数字密码“2”
数字密码“4”
数字密码“1”
数字密码“6”
密码输入正确后绿灯亮