基于单片机的密码锁设计.docx
- 文档编号:4984295
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:24
- 大小:1.09MB
基于单片机的密码锁设计.docx
《基于单片机的密码锁设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的密码锁设计.docx(24页珍藏版)》请在冰豆网上搜索。
基于单片机的密码锁设计
摘要…………………………………………………………………………………………………………………3
1设计目的……………………………………………………………………………………………………4
2设计要求…………………………………………………………………………………………………….5
3设计内容…………………………………………………………………………………………………….6
3.1、具体硬件电路设计…………………………………………………………………………….6
3.1.1、键盘输入模块设………………………………………………6
3.1.2、单片机最小系统设计…………………………………………7
3.1.3、LCD显示模块设计……………………………………………7
3.1.4、声光报警模块设计……………………………………………7
3.2、软件设计……………………………………………………………………………………………8
3.2.1、主程序流程图…………………………………………………9
3.2.2、LCD显示模块流程图…………………………………………10
总结与致谢……………………………………………………………………………………………………11
参考文献………………………………………………………………………………………………………12
附录………………………………………………………………………………………..13
摘要
随着科技和人们的生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统机械锁由于构造简单,被撬事件屡见不鲜;电子密码锁在日常生活中的作用越来越明显。
本电子密码锁是基于单片机的设计,主要划分为四大模块,由单片机最小系统、矩阵键盘、LCD显示、声光报警模块等组成。
单片机最小系统的主要功能是对外部输入的数据进行处理,显示电路将所要操作的步骤显示出来,指导用户使用,报警电路是对输入错误密码时的警告报警。
系统能完成开锁、密码输入错误报警、密码删除、密码修改等基本功能。
电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐。
本设计以单片机AT89C51作为密码锁监控装置的检测和控制核心,分为主机控制和从本设计以单片机AT89C51作为密码锁监控装置的检测和控制核心,分为主机控制和从机执行机构,实现钥匙信息在主机上的初步认证注册、密码信息的加密、钥匙丢失报废等功能。
根据51单片机之间的串行通信原理,这便于对密码信息的随机加密和保护。
而且采用键盘输入的电子密码锁具有较高的优势。
采用数字信号编码和二次调制方式,不仅可以实现多路信息的控制,提高信号传输的抗干扰性,减少错误动作,而且功率消耗低;反应速度快、传输效率高、工作稳定可靠等。
软件设计采用自上而下的模块化设计思想,以使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。
测试结果表明,本系统各项功能已达到本设计的所有要求。
关键词:
解锁;单片机;LCD显示;报警
1设计目的
随着电子技术和计算机技术的飞速发展,单片机性能不断完善,性能价格比显著提高,技术日趋完善。
由于单片机具有体积小、重量轻、价格便宜、功耗低、控制功能强及运算速度快等特点,因而在国民经济建设、军事及家用电器等各个领域均得到了广泛的应用。
本设计利用单片机及附加电子元器件实现数据采集和控制算法,来完成某一实际功能,检验并提高同学对整体电路设计和把握能力,了解单片机系统设计流程,以及电路板的实际制作和调试能力。
同时也加强对数字电路、单片机和微机原理等课程知识的实际应用能力,也为同类产品的进一步发展奠定理论和实践基础。
随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。
锁自古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又要使用方便,这也是制锁者长期以来研制的主题。
随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。
据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。
这种锁是通过键盘输入一组密码完成开锁过程。
研究这种锁的初衷,就是为提高锁的安全性。
由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。
电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。
电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC卡锁,生物锁等。
但较实用的还是按键式电子密码锁。
20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显进展。
在我国电子锁整体水平尚处于国际七十年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。
但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。
国内的不少企业也引进了世界上先进的技术,发展前景非常可观。
希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。
2设计要求
1、总共可以设置8位密码,每位密码值范围为1~8.
2、用户可以自行设定和修改密码。
3、按每个密码键时都有声音提示。
4、若键入的8位开锁密码不完全正确,则报警5s,以提醒他人注意。
5、开锁密码连续错3次要报警1分钟,报警期间输入密码无效,以防窃贼多次试探密码。
6、键入的8位开锁密码完全正确才能开锁,开锁时要有1s的提示音。
7、电磁锁的电磁线圈每次通电5s,然后恢复初态。
8、密码设定完毕后要有提示音。
3设计内容
本设计的系统总方案设计方框图如图1所示。
图1系统总设计方框图
3.1、具体硬件电路设计
3.1.1、键盘输入模块设计:
键盘选用4*4矩阵,具有数字键0-9、开锁键、删除键、修改密码键和消除报警键等。
4*4键盘输入模块如图2所示。
图24*4键盘输入模块电路图
3.1.2、单片机最小系统设计:
本设计选用STC89C51单片机作为控制核心。
STC89C51是具有高性能和低功耗优点的8位可编程控制器,内核具有丰富的指令集和32个通用工作寄存器,可以通过软件编程来实现电子密码锁设计中的各项要求和功能,而且单片机的I/O口也足够使用,硬件电路连接比较简单。
单片机最小系统如图3所示[3]。
图3单片机最小系统电路图
3.1.3、LCD显示模块设计:
LCD显示模块选用LCD1602作为主液晶显示器。
此液晶显示屏能输入两行的字母或数字,功能比较简单,通用性强。
本次设计中要显示输入密码的数据值和各功能的提示,使用LCD1602液晶来作为显示模块比较直观形象。
LCD显示模块如图4所示。
图4LCD显示模块电路图
3.1.4、声光报警模块设计:
采用声和光两种方式的双重效果进行报警,如果错误密码输入次数超过三次则报警灯闪烁而且蜂鸣器会报警,这样就能多角度进行密码错误报警。
声光报警模块如图5所示。
图5声光报警模块电路图
3.2、软件设计
3.2.1、主程序流程图:
主程序主要完成LCD初始化、检查有无按键按下、以及调用显示、密码修改程序等等。
主程序流程图如图6所示。
图6主程序流程图
3.2.2、LCD显示模块流程图:
本系统使用LCD1602实现显示,参照LCD1602的使用手册进行初始化和程序编写就可以显示,即在程序编写中添加LCD1602的驱动程序。
这里的驱动程序主要包括:
初始化函数、设置显示坐标、写字符函数及写字符串函数。
在时钟界面时显示时间的运行,在密码锁界面时主要显示提示信息和输入的密码,当然,当输入密码数字时,输出不是显示数字,而是用“*”显示代替。
LCD1602的部分读写控制时序程序如图7所示。
图7LCD显示模块流程图
总结与致谢
这一次做的电子密码锁及LCD显示。
原理看似简单,但过程让我深深感受到再简单的电路图,理论与实际也会有一定的差入。
在参考书原理图的基础上经过了个人的改进,让功能更完善,特别是程序的调试,花的时间最多,也是最难的一个地方。
通过本次设计,培养了创新意识和综合素质,更好地掌握了电子产品设计与制作的工艺和流程,提高个人基本能力、实验及设计能力和独立工作能力,基本知识更加牢固,会看图、会测量、会查资料在设计的过程和设计说明书的撰写过程中,老师给予了我热心的帮助和大力的支持,给我提了诸多的宝贵意见,拓宽了我的思路。
在此我向老师致以崇高的敬意和衷心的感谢!
参考文献
[1]李朝青,单片机原理及接口技术(简明修订版)[M].北京:
北京航空航天大学出版社,1998
[2]李全利.单片机原理及接口技术[M].高等教育出版社,2003
[3]PROTEL99SE电路设计与制板[M].械工业出版社,2007
[4]StevenF.Barrett.DaneilJ.Pack.EmbeddedSystem[M].北京:
电子工业出版社,2006
[5]周立功.LPC900系列Flash单片机应用技术[J].北京航空航天大学出版社,2004
[6]黄智伟.全国大学生电子设计竞赛训练教程[M].北京:
电子工业出版社,2005
附录一:
系统设计总原理图
附录二:
系统设计程序
/*头文件*/
#include
#include
#defineulongunsignedlong
#defineuintunsignedint
#defineucharunsignedchar
#definescan_key_portP1/*定义矩阵按键端口*/
#definelcd_data_portP0/*定义LCD控制端口*/
ucharcodemun_to_char[]={"0123456789ABCDEF"};/*定义数字跟ASCII码的关系*/
uchartemp,num,flag,sum=0,r;
ucharcodetable1[]="Welcome!
(^_^)";
ucharcodetable2[]="0123456789ABCDEF";/*定义数字跟ASCII码的关系*/
ucharcodetable3[]="*********";
ucharcodetable4[]="Codeiswrong!
";
ucharcodetable5[]="Youareright!
";
ucharcodetable6[]="Thesecondtime!
";
ucharcodetable7[]="Thelasttime!
";
ucharcodetable8[]="Inputnewcode:
";
ucharcodetable9[]="Modifyright!
!
!
";
ucharcodetable10[]="Password:
";
ucharcodetable11[]="Wuzirong";
ucharcodetable12[]="Calling....";
ucharcodetable13[]="";
ucharcodetable14[]="Inputagain:
";
ucharcodetable15[]="Modifyerror!
!
!
";
ucharinit_pswd[8]={1,2,3,4,5,6,7,8};//初始化密码
ucharpswd[8]={0};
sbitlcdrs=P1^7;/*定义LCD控制端口*/
sbitlcdrw=P1^6;/*定义LCD控制端口*/
sbitlcden=P2^4;/*定义LCD控制端口*/
sbitSpeaker_port=P2^7;/*喇叭控制端口*/
/*****************************************子函数声明*/
voiddelay(uintz);
voidinit();//初始化子函数
voidwrite_com(ucharcom);//写指令子函数
voidwrite_data(uchardat1);//写数据子函数
voidkeyscan();
voidmima();
voidmima1();
voiddelete();
voiddelay_1ms(ucharx);
/************************************************液晶驱动*/
/*********************/
/*喇叭发声简单程序*/
voidSpeaker_output()
{
uchari;
for(i=0;i<100;i++)
{
Speaker_port=0;
delay_1ms(0.5);
Speaker_port=1;
delay_1ms
(1);
}
}
voidSpeaker_output2()
{
uchari;
for(i=0;i<50;i++)
{
Speaker_port=0;
delay_1ms
(1);
Speaker_port=1;
delay_1ms
(1);
}
}
voidSpeaker_output3()
{
uchari;
for(i=0;i<100;i++)
{
Speaker_port=0;
delay_1ms
(1);
Speaker_port=1;
delay_1ms
(2);
}
}
/*1MS为单位的延时程序*/
voiddelay_1ms(ucharx)
{
ucharj;
while(x--){for(j=0;j<125;j++);}
}
voidinit()
{
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
voidwrite_com(ucharcom)//写指令
{
lcdrs=0;
lcdrw=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_data(uchardat1)
{
lcdrs=1;
lcdrw=0;
P0=dat1;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidkeyscan()
{
ucharsccode,recode,out;
scan_key_port=0xf0;/*发全"0"的行扫描码,列线输入*/
if((scan_key_port&0xf0)!
=0xf0)/*若有键按下*/
{
delay_1ms
(2);/*延时去抖动*/
if((scan_key_port&0xf0)!
=0xf0)/*若有键按下*/
{
sccode=0xfe;/*逐行扫描初值*/
while((sccode&0x10)!
=0)
{
scan_key_port=sccode;/*输出行扫描码*/
if((scan_key_port&0xf0)!
=0xf0)/*本行有键按下*/
{
recode=(scan_key_port&0xf0)|0x0f;
scan_key_port=0xff;/*释放按键扫描端口*/
out=((~sccode)+(~recode));
switch(out)
{case~0xe7:
num=0;flag=1;Speaker_output();/*喇叭发出声音*/break;
case~0xd7:
num=1;flag=1;Speaker_output();/*喇叭发出声音*/break;
case~0xb7:
num=2;flag=1;Speaker_output();/*喇叭发出声音*/break;
case~0x77:
num=3;flag=1;Speaker_output();/*喇叭发出声音*/break;
case~0xeb:
num=4;flag=1;Speaker_output();/*喇叭发出声音*/break;
case~0xdb:
num=5;flag=1;Speaker_output();/*喇叭发出声音*/break;
case~0xbb:
num=6;flag=1;Speaker_output();/*喇叭发出声音*/break;
case~0x7b:
num=7;flag=1;Speaker_output();/*喇叭发出声音*/break;
case~0xed:
num=8;flag=1;Speaker_output();/*喇叭发出声音*/break;
case~0xdd:
num=9;flag=1;Speaker_output();/*喇叭发出声音*/break;
}
switch(out)
{
case~0xbd:
num=10;flag=1;break;
case~0x7d:
num=11;flag=1;break;
case~0xee:
num=12;flag=1;break;
case~0xde:
num=13;flag=1;break;
case~0xbe:
num=14;flag=1;break;
case~0x7e:
num=15;flag=1;break;
}
}
elsesccode=(sccode<<1)|0x01;/*行扫描左移一位*/
}
}
}
}
/**********************主程序*****************************/
voidmain()
{
ucharm=0,w=0;
init();
for(r=0;r<15;r++)
{
delay_1ms
(2);
write_data(table1[r]);
}
write_com(0x80+0x40);
for(r=0;r<15;r++)
{
delay_1ms
(2);
write_data(table11[r]);
}
write_com(0x0c);
do
{
keyscan();
}
while(num!
=15);
mima();
while((pswd[m]==init_pswd[m])&m<8)//密码比较
{
m++;
}
if(m>=8)//密码正确
{
delay(200);
Speaker_output3();/*喇叭发出声音*/
keyscan();
while(flag==1&&num==13);
mima1();
}
else//密码有误
{
m=0;
write_com(0x80+0x40);
for(r=0;r<14;r++)
{
delay_1ms(5);
write_data(table4[r]);
}
delay(1000);
init();
for(r=0;r<16;r++)
{
delay(20);
write_data(table6[r]);
}
delay(1000);
mima();
while((pswd[m]==init_pswd[m])&m<8)//再次比较
{
m++;
}
if(m>=8)
{
mima1();
}
else
{
m=0;
write_com(0x80+0x40);
for(r=0;r<14;r++)
{
delay_1ms(5);
write_data(table4[r]);
Speaker_output2();/*喇叭发出声音*/
}
delay(1000);
init();
for(r=0;r<14;r++)
{
delay(20);
write_data(table7[r]);
}
delay(1000);
mima();
while((pswd[m]==init_pswd[m])&m<8)//第三次比较
{
m++;
}
if(m>=8)
{
mima1();
}
else
{
init();
write_com(0x80+0x40);
for(r=0;r<14;r++)
{
delay_1ms(100);
write_data(table12[r]);
Speaker_output3();/*喇叭发出声音*/
keyscan();
if(flag==1&&num==13)
{delay(100);
break;
}
else{}
}
for(r=0;r<120;r++)
{delay_1ms(100);
Speaker_output3();/*喇叭发出声音*/
keyscan();
if(flag==1&&num==13)
{delay(100);
break;
}
else{}
}
write_com(0x0c);
}
}
}
}
voidmima()
{
ucharw=0;//局部变量很重要
init();
for(r=0;r<9;r++)
{
delay(20);
write_data(table10[r]);
}
do
{
flag=0;
keyscan();
write_com(0x80+9+w);
if(flag==1&&num<=9)
{
pswd[w]=num;
write_data(table3[w]);
w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 密码锁 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)