关于电子的一份毕业设计书.docx
《关于电子的一份毕业设计书.docx》由会员分享,可在线阅读,更多相关《关于电子的一份毕业设计书.docx(21页珍藏版)》请在冰点文库上搜索。
关于电子的一份毕业设计书
课程设计(论文)说明书
题目:
院(系):
专业:
学生姓名:
学号:
指导教师:
职称:
20年月日
摘要
随着电子产品向智能化和微型化的不断发展,单片机已成为电子产品研制和开发中首选的控制器。
随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,安全性能低,无法满足人们的需要。
本设计从经济实用的角度出发,采用美国Atmel公司的单片机AT89S51与低功耗CMOS型E2PROMAT24C02作为主控芯片与数据存储器单元,结合外围的键盘输入、显示、报警、开锁等电路,用汇编语言编写主控芯片的控制程序,设计了一款可以多次更改密码具有报警功能的电子密码锁。
经实验证明,该密码锁具有设计方法合理,简单易行,成本低,安全实用等特点,符合住宅、办公室用锁要求,具有推广价值。
关键词:
密码锁;单片机;安全性
目录
引言…………………………………………………………………1
1设计方案……………………………………………………………1
1.1电子密码锁的设计分析…………………………………………………………1
1.2设计要求…………………………………………………………………………2
2硬件电路设计………………………………………………………2
2.1单片机AT89S51简介……………………………………………………………2
2.1.1ATS89S51………………………………………………………………………2
2.1.2ATS89S51主要特性……………………………………………………………2
2.2整体硬件原理图…………………………………………………………………3
2.3键盘设计…………………………………………………………………………4
2.3.1矩阵键盘和行列式键盘………………………………………………………4
2.3.2扫描原理………………………………………………………………………5
2.3.3键盘设计图……………………………………………………………………5
2.4液晶显示设计……………………………………………………………………5
3程序设计…………………………………………………………6
3.1程序设计内容……………………………………………………………………6
3.2C语言源程序……………………………………………………………………6
4心得体会…………………………………………………………6
谢辞…………………………………………………………………7
参考文献……………………………………………………………8
附录…………………………………………………………………9
引言
随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别,IC卡辨认)已在国内外相继面世。
但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱,柜,门等。
而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失,损坏等特点.加上其成本较高,一定程度上限制了这类产品的普及和推广。
鉴于目前的技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。
1设计方案
1.1电子密码锁的设计分析
在日常的生活和工作中,住宅与部门的安全防范,单位的文件档案,财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高,成本低,功耗低,易操作等优点。
在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少,安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。
随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理,专家分析系统等功能,从而使密码锁具有很高的安全性,可靠性,应用日益广泛。
在国内外电子防盗锁应用于金融业,其根本的作用是"授权",即被"授权"的人才可以存取钱物。
广义上讲,金融业的"授权"主要包括以下三种层次的内容:
1,授予保管权,如使用保管箱,保险箱和保险柜;2,授予出入权,如出入金库,运钞车和保管室;3,授予流通权,如自动存取款。
目前,金融行业电子防盗锁的应用主要集中在前两个层面上。
下面将介绍几种在金融行业中使用较多的电子防盗锁以及它们的技术发展方向。
当然,以上所说的授权技术再高超,都必须由精良的"锁具"担当承载结构部件,实现开启,闭锁的功能,而且承担实体防护作用,抵抗住或尽量延迟破坏行为,让电子防盗锁"软硬不吃"。
一般情况下,锁具防盗的关键是锁身外壳,闭锁的部件(如伸缩的锁舌或锁栓,锁扣盒锁扣板以及依靠电磁力直接闭锁的电磁部件等)的强度(应有足够的机械强度和刚度,能够承受一定数值,一定方向的静压力和冲击力以及力矩),锁止型式(能承受某些方式和工具的作用),配合间隙(防止采用机械的,电子的方法探入锁具内部而被开启)和布局(将薄弱的,与锁的开启直接相关的零部件和电路置于壳体保护之下,并且不易被识别出来)。
提高电子防盗锁之防护能力的必然途径是报警,在许多场所有人值守,有电视监控,具有报警功能,可以综合物理防范和人力防范两种作用。
报警的前提是具备探测功能,根据电子防盗锁的使用场所和防护要求,可选择多种多样的探测手段。
在中国的城市金融业中,实现联网报警已经成为对各金融网点的基本要求。
根据国内外的实践经验,安全防范风险等级很有必要,即依据使用的防盗报警器材的性能,安装布局和人员值守状况等,可以评估被防护物或区域的防护能力,得出风险等级,其中,电子防盗锁的性能至关重要。
1.2设计要求
设计一个密码锁,其功能有:
1.设置8位密码,密码通过键盘输入,若密码正确,则将锁打开;2.密码可以由用户自己修改设定(只支持6位密码),修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作;3.报警功能(用二极管仿真).密码输入正确或错误报警设备会出现相关提示。
2.硬件电路设计
2.1单片机AT89S51简介
2.1.1AT89S51
AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4Kb的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准8051指令系统及引脚。
它集Flash程序存储器,既可在线编程(ISP)也可用传统方法进行编程及通8位微处理器于单片芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。
2.1.2AT89S51主要特性
MCS-51兼容4K字节可编程闪烁存储器寿命1000写/擦;循环数据保留时间:
10年;全静态工作:
0Hz-24Hz;三级程序存储器锁定128*8位;内部RAM32可编程I/O线两个;16位定时器/计数器,5个中断源可编程串行通道,低功耗的闲置和掉电模式,片内振荡器和时钟电路。
图1单片机
2.2整体硬件原理图
硬件部分包括键盘部分,显示部分以及用单片机编程用到的的连接口部分。
图2
硬件原理图
2.3键盘设计
2.3.1矩阵键盘和行列式键盘
键盘设计一般采用行列式键盘,能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。
在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
这次设计中采用的就是矩阵键盘。
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图5所示。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。
2.3.2扫描原理
把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知道是哪个键被按下。
比如说扫描码送入01111111,前面的0111是代表此时扫描第一行P1。
0列,而后面的1111是让读取的4行接脚先设为VDD,若此时第一行的第三列按键被按下,那读取的结果就会变成01111101(注意1111变成1101),其中LSB的第三个bit会由1变成0,这是因为这个按键被按下之后,会被垂直的扫描码电位short,而把读取的LSB的bit电位拉到0,此即为扫描原理。
由於这种按键是机械式的开关,当按键被按下时,键会震动一小段时间才稳定,为了避免让8051误判为多次输入同一按键,我们必须在侦测到有按键被按下,就Delay一小段时间,使键盘以达稳定状态,再去判读所按下的键,就可以让键盘的输入稳定。
2.3.3键盘设计图
如图,按键0到9是对应输入数字“0”到“9”,按键Del删除一位输入的
数字,按键enter是确认键。
图3键盘设计图
2.4液晶显示设计
显示部分包括液晶和LED发光二极管。
液晶显示提示消息,如输入密码正确,液晶显示“OK”;而发光二极管发亮,表示开锁;发光二极管灭,表示没有开锁。
图4液晶部分原理图
3.程序设计
3.1程序设计内容
(1).4×4矩阵键盘识别;
(2).液晶显示,当密码输入完后,按下确认键,进行密码比较,如果密码正确,液晶显示“OK”。
在密码输入过程中,若输入错误,可以利用“DEL”键删除刚才输入的错误的数字。
每输入一个数字需等待1秒才能继续输入下一个数字。
3.2C语言源程序
程序及流程图见附录
4.心得体会
从开始进行设计密码锁到完成实现密码锁功能,我找了很多资料,并应用了protel99se软件进行画图和仿真,并运用单片机知识进行编程以完成设计要求的功能。
我已经尽了自己的最大努力,也从中学到了很多知识,获益匪浅。
谢辞
感谢学院给我们提供这样的实践动手机会,并通过课程设计使我们能够有机会将书本上学到的知识运用到的实际中去。
在课设过程中施娟老师给了我很多的指导和帮助,并监督我及时完成了本次课程设计,在此特别感谢施娟老师和给予我帮助的同学。
参考文献
[1]刘文涛.MCS-51单片机培训教程(C51)版.电子工业出版社,2005.8.
[2]王宜怀.单片机原理及其嵌入式应用教程.北京希望电子出版社,2002.8.
[3]邵贝贝.单片机嵌入式应用的在线开发方法.清华大学出版社,2006.3.
[4]龚运新.单片机C语言开发技术.清华大学出版社,2006.10.
[5]JeanJ.Labrosse著.嵌入式系统构件.袁勤勇等译.北京:
机械工业出版社,2002.
附录
PCB图:
C语言程序流程图:
C语言源程序:
#include"reg52.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitfmq=P3^3;
sbitRS=P2^4;
sbitRW=P2^5;
sbitEN=P2^6;
ucharcodetable0[]="shemi:
";
ucharcodetable1[]="kaimi:
";
ucharcodesuccess[]="OK";
ucharj=0;
ucharshemi[10]={0,0,0,0,0,0,0,0,0,0};//设密值装载体
ucharkaimi[10]={0,0,0,0,0,0,0,0,0,0};//开密值装载体
//ucharn=0;//次数
//延时子程序
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidfmqxiang()
{ucharz=20;
while(z--)
{fmq=0;
delay(20);
fmq=1;
delay(20);}
}
voidwrite_cmd(ucharcmd)//1602写指令
{
RS=0;RW=0;EN=0;P0=cmd;delay(5);EN=1;delay(5);EN=0;
}
voidwrite_date(uchardate)//1602写数据
{
RS=1;RW=0;EN=0;P0=date;delay(5);EN=1;delay(5);EN=0;
}
voidchushihua_LCD()
{uchari;
write_cmd(0x38);write_cmd(0x0c);write_cmd(0x06);write_cmd(0x01);write_cmd(0x80);
for(i=0;i<16;i++)
{write_date(table0[i]);
delay(5);
}
write_cmd(0x80+0x40);
for(i=0;i<16;i++)
{write_date(table1[i]);
delay(5);
}
}
keyscan()//键盘扫描
{
uchartemp,key;
P1=0xFE;//扫描第一行按键;
temp=P1;temp&=0xF0;
if(temp!
=0xf0)
{
delay(5);
temp=P1;
temp&=0xf0;
if(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0x7E:
key=10;break;
case0xBE:
key=11;break;
case0xDE:
key=12;break;
case0xEE:
key=13;break;
default:
break;
}
while(temp!
=0xf0)//等待松手
{
temp=P1;
temp=temp&0xf0;
}
return(key);
}
}
P1=0xFD;//扫描第二行按键;
temp=P1;temp&=0xF0;
if(temp!
=0xf0)
{
delay(5);
temp=P1;
temp&=0xf0;
if(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0x7D:
key=14;break;
case0xBD:
key=15;break;
case0xDD:
key=16;break;
case0xED:
key=17;break;
default:
break;
}
while(temp!
=0xf0)//等待松手
{
temp=P1;
temp=temp&0xf0;
}
return(key);
}
}
P1=0xFB;//扫描第三行按键;
temp=P1;temp&=0xF0;
if(temp!
=0xf0)
{
delay(5);
temp=P1;
temp&=0xf0;
if(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0x7B:
key=18;break;
case0xBB:
key=19;break;
case0xDB:
key=1;break;
case0xEB:
key=1;break;
default:
break;
}
while(temp!
=0xf0)//等待松手
{
temp=P1;
temp=temp&0xf0;
}
return(key);
}
}
P1=0xF7;//扫描第四行按键;
temp=P1;temp&=0xF0;
if(temp!
=0xf0)
{
delay(5);
temp=P1;
temp&=0xf0;
if(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0x77:
key=20;break;
case0xB7:
key=21;break;
case0xD7:
key=22;break;
case0xE7:
key=23;break;
default:
break;
}
while(temp!
=0xf0)//等待松手
{
temp=P1;
temp=temp&0xf0;
}
return(key);
}
}
}
voidshemima()//设密部分
{
ucharkey1,m=10;
key1=keyscan();
if(key1==20)
{
write_cmd(0x80+0x06);
write_cmd(0x0f);//光标闪烁
while(m)
{
key1=keyscan();
if((key1>=10)&&(key1<=19))
{
write_date('*');
m--;
shemi[j]=key1;
j++;
}
if(key1==22)
m=0;
}
write_cmd(0x0c);
}
}
voidjiemima()//解密系统
{
ucharkey1,i,m=10,k=0;
j=0;//全局变量j清零
key1=keyscan();
if(key1==23)
{
write_cmd(0x80+0x46);
write_cmd(0x0f);//光标闪烁
while(m)
{
key1=keyscan();
if((key1>=10)&&(key1<=19))
{
write_date('*');
m--;
kaimi[j]=key1;
j++;
}
if(key1==22)
m=0;
}
write_cmd(0x0c);
for(i=0;i<10;i++)
{
if(shemi[i]==kaimi[i])
k++;
}
if(k==10)
{
write_cmd(0x38);write_cmd(0x0c);write_cmd(0x06);write_cmd(0x01);write_cmd(0x80);
for(i=0;i<16;i++)
{
write_date(success[i]);
delay(5);
}
}
else
fmqxiang();
}
}
voidmain()
{ucharkey2;
chushihua_LCD();
while
(1)
{key2=keyscan();//没有按键按下key2的值总为0;
while(!
key2)
key2=keyscan();//判断按键按下时执行以下语句
shemima();
jiemima();
}
}