基于单片机的密码锁设计Word格式.docx
- 文档编号:17937652
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:24
- 大小:1.09MB
基于单片机的密码锁设计Word格式.docx
《基于单片机的密码锁设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的密码锁设计Word格式.docx(24页珍藏版)》请在冰豆网上搜索。
随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。
锁自古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又要使用方便,这也是制锁者长期以来研制的主题。
随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。
据有关资料介绍,电子密码锁的研究从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<
reg52.h>
intrins.h>
#defineulongunsignedlong
#defineuintunsignedint
#defineucharunsignedchar
#definescan_key_portP1/*定义矩阵按键端口*/
#definelcd_data_portP0/*定义LCD控制端口*/
ucharcodemun_to_char[]={"
0123456789ABCDEF"
};
/*定义数字跟ASCII码的关系*/
uchartemp,num,flag,sum=0,r;
ucharcodetable1[]="
Welcome!
(^_^)"
;
ucharcodetable2[]="
/*定义数字跟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;
sbitlcden=P2^4;
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()
50;
voidSpeaker_output3()
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;
}
voidwrite_data(uchardat1)
lcdrs=1;
P0=dat1;
voiddelay(uintz)
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
voidkeyscan()
ucharsccode,recode,out;
scan_key_port=0xf0;
/*发全"
0"
的行扫描码,列线输入*/
if((scan_key_port&
0xf0)!
=0xf0)/*若有键按下*/
delay_1ms
(2);
/*延时去抖动*/
sccode=0xfe;
/*逐行扫描初值*/
while((sccode&
0x10)!
=0)
scan_key_port=sccode;
/*输出行扫描码*/
=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;
case~0xb7:
num=2;
case~0x77:
num=3;
case~0xeb:
num=4;
case~0xdb:
num=5;
case~0xbb:
num=6;
case~0x7b:
num=7;
case~0xed:
num=8;
case~0xdd:
num=9;
}
{
case~0xbd:
num=10;
break;
case~0x7d:
num=11;
case~0xee:
num=12;
case~0xde:
num=13;
case~0xbe:
num=14;
case~0x7e:
num=15;
elsesccode=(sccode<
<
1)|0x01;
/*行扫描左移一位*/
}
/**********************主程序*****************************/
voidmain()
ucharm=0,w=0;
init();
for(r=0;
r<
15;
r++)
write_data(table1[r]);
write_com(0x80+0x40);
for(r=0;
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);
14;
delay_1ms(5);
write_data(table4[r]);
delay(1000);
16;
{
delay(20);
write_data(table6[r]);
mima();
while((pswd[m]==init_pswd[m])&
8)//再次比较
m++;
if(m>
=8)
mima1();
else
m=0;
write_com(0x80+0x40);
for(r=0;
{
delay_1ms(5);
write_data(table4[r]);
Speaker_output2();
/*喇叭发出声音*/
}
init();
delay(20);
write_data(table7[r]);
delay(1000);
mima();
while((pswd[m]==init_pswd[m])&
8)//第三次比较
m++;
if(m>
{
mima1();
else
{
init();
write_com(0x80+0x40);
for(r=0;
{
delay_1ms(100);
write_data(table12[r]);
if(flag==1&
num==13)
{delay(100);
break;
}
else{}
}
120;
{delay_1ms(100);
Speaker_output3();
keyscan();
else{}
write_com(0x0c);
}
voidmima()
{
ucharw=0;
//局部变量很重要
9;
write_data(table10[r]);
{
flag=0;
write_com(0x80+9+w);
if(flag==1&
num<
=9)
pswd[w]=num;
write_data(table3[w]);
w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 密码锁 设计