密码锁.docx
- 文档编号:9360313
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:30
- 大小:776.57KB
密码锁.docx
《密码锁.docx》由会员分享,可在线阅读,更多相关《密码锁.docx(30页珍藏版)》请在冰点文库上搜索。
密码锁
第1章系统总体方案设计
1.1密码锁技术的发展趋势
在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高、成本低、功耗低、易操作等优点。
在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。
随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。
随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。
但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。
而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。
加上其成本较高,一定程度上限制了这类产品的普及和推广。
鉴于目前的技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。
1.2课题设计任务
设计一个具有特定功能的密码锁。
该密码锁上电或按键复位后能自动显示系统提示符“204”,进入准备工作状态。
该密码锁具有系统原始密码888888,用户可以设定并存储用户密码,密码输入时应处于保密显示状态,密码输入正确时应显示密码输入正确提示信息,否则,显示密码输入错误提示信息。
1.3功能设计要求
设计一个具有特定功能的密码锁。
该密码锁上电或按键复位后能自动显示系统提示符“z04”(学生班级与学号简码),进入准备工作状态。
按下开始按钮后,显示P.用户可以输入密码;输入8位密码后,按确定键。
输入正确显示d,显示d后可按修改键修改密码,按修改密码键后显示E,代表用户可以设置一个8位的密码,修改密码后,按确认键则会显示c代表修改成功;若输入密码错误则显示F,并点亮二极管,按开始键又会进入密码读取,密码比较,密码可修改的流程中。
1.4设计方案及工作原理
1.4.1设计方案
密码锁电路设计总体设计方框图如图1-1所示,密码锁采用单片机AT89S52,,用8位LED共阳数码管显示。
图1-1总体设计方框图
整体设计思路:
按键接到单片机的P0口,P2口分别接数码管的段控和位控,蜂鸣器接到单片机的P3.1口线上,开始状态显示z04,当按下开始键b后,数码管最高位显示P.视为可以输入密码;每输入一个键显示一杠,当输入完8个键后按确定键a,若输入密码正确则显示d,密码输入正确时可按f键,按f键后显示E代表可输入修改密码;输入完8个密码后按a确定后,显示c,代表修改密码成功,按b键后回到P.,等待密码输入。
若输入密码错误则显示F,蜂鸣器叫,二极管点亮,按开始键b后又显示P.,等待输入密码。
该系统采用单片机AT89S52作为控制核心,该系统可以完成运输控制、信号识别及显示功能的实现。
由于用了单片机,其技术比较成熟,应用起来比较方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。
整个系统具有极其灵活的可编程性,能够方便进行功能的扩展和更改。
AT89S52单片机特点:
1、可靠性好:
单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以“烧”写到ROM上,许多信号通道都在同一芯片上,故可靠性好。
2、扩展性好:
单片机有一般计算机所必须的器件,如总线、串并行的输入及输出引脚,可扩展为各种规模的微型计算机系统。
3、控制功能强:
单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳转指令。
1.4.2密码锁工作原理
密码锁的工作原理是采用单片机最小系统,程序用动态显示组号。
AT89S521单片机由微处理器,存储器,I/O口以及特殊功能寄存器SFR等部分构成。
其存储器在物理上设计成数据存储器和程序存储器两个独立的空间,片内数据存储器有128个字节,片内程序存储器容量为4KB。
AT89S52有4个八位并行I/O口:
P0口,P1口,P2口和P3口,各接口均由接口锁存器,输出驱动器和输入缓冲器组成。
P1口是唯一的单功能口,仅能够用作通用的数据输入/输出口。
P3口是双功能口,除了具有数据输入/输出功能外,每条口线还具有第二功能,如P3.0口是串行输入口线,P3.1口是串行输出口线。
在需要外部数据存储器和程序存储器扩展时,P0口可作为分时复用的低八位地址/数据总线,P2口可作为高八位的地址总线,P3口也可作为AT89S5的一些特殊功能口,同时为闪烁编程和编程校验接受一些控制信号。
第2章硬件系统设计
2.1硬件电路简介
硬件电路应该能够完成以下功能:
在用户输入密码的时候,密码为保密状态,当用户输入密码正确时可修改密码,修改后的密码能够使用,并给出输入密码正确的提示信息。
密码输入错误时有提示信息,并还可以再次输入密码。
P1.0-P1.7口线为4*4矩阵式键盘的信号输入口,其中b为开始键,a为确定键,f为修改密码键;P0.0-P0.7口为数码管的段选控制口;P2.0-P2.7口为数码管的位选控制口;二极管接P3口,P3.1口为蜂鸣器控制口,硬件电路如图2-1所示。
图2-1系统硬件电路图
2.2硬件系统各模块功能介绍
2.2.1矩阵键盘电路单元
使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。
其原理如图2-2。
图2-2矩阵键盘
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。
在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
当确认有按键按下后,下一步就要识别哪一个按键按下。
对键的识别通常有两种方法:
一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。
如图2-2所示的4×4键盘,首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。
方法是:
向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。
如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。
判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。
方法是:
依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。
具体的功能设计如表2-1:
表2-1按键功能
按键
0-9键
b键
a键
f键
键名
数字键
开始键
确定键
重设密码键
2.2.2显示电路单元
采用两个八段的数码管显示,它是共阳极型的由低电平点亮数码管显示器。
显示由P2.0-P2.7口输出的数字代码,段码采用同相驱动,输入端加低电平,选中的数码段被点亮。
如图2-3所示:
图2-3显示单元电路
2.2.3蜂鸣音频电路单元
AT89S52芯片外接有蜂鸣电路,用来发出报警声。
蜂鸣器在用户输入密码为错误时报警信号。
蜂鸣硬件电路比较简单,在P3.7口接上一只三极管、电阻和蜂鸣器即可,如图2-4所示:
图2-4蜂鸣音频电路
2.2.4复位电路单元
外部中断和内部中断并存,单片机有硬件复位端,只要输入持续4个周期的高电平即可实现复位。
硬件复位后的寄存器和存储器都可恢复到初始值。
本设计的复位电路如图2-5所示:
图2-5复位电路
2.2.5二极管电路单元
如图2-6将二极管的阳极共同接地,在需要做指示时,给低电平点亮。
图2-6二极管电路
2.2.6晶体振荡电路单元
如图2-7晶振电路,使用12Mhz晶振,使单片机的机器周期为1us。
图2-7晶体振荡电路
2.3硬件电路元器件简介
2.3.1protel原理图
见附录B
2.3.2PCB图
PCB顶层布线图见附录C
PCB顶层布线图见附录D
2.3.3元器件布局图
见附录E
2.3.4元器件清单
见附录F
第3章软件系统设计
3.1占用单片机资源情况
P1.0-P1.7是作为密码按键输入;P2.0-P2.76口为数码管的段选控制口;P3.1口为蜂鸣器控制口。
该密码锁上电或按键复位后能自动显示系统提示符“204”,进入准备工作状态。
3.2软件设计思路
密码锁工作的主要过程是LED数码管提示开始输入密码,通过键盘输入密码,同时LED显示密码输入情况,按下确认键后判断密码的正确性,作出开锁或报警处理。
当输入密码正确时可修改密码。
密码的设定,此程序的初始密码放在一个数组中,假设预设的密码为"88888888"共8位密码。
由于采用4*4矩阵式键盘完成密码的输入,那么将a-f按键为功能键,0-9个按键为数字键。
在输入过程中,输入以为密码显示一杠,接着根据显示杠的数目来确定输入密码的位数,直到8位密码都已经输入完毕;输入完后按确认功能键之后,才能完成密码的输入过程。
进入密码的判断比较处理状态并给出相应的处理过程。
3.3程序流程框图
(1)系统主程序流程图
如图3-1所示函数开始运行后显示204,按b键后显示P.,代表可输入密码,输完8个密码后等待确认键按下,确认键按下后调用mmchuli函数进行处理,然后有循环。
函数结束。
图3-1系统主函数流程图
(2)输入密码函数
如图3-2所示输入函数流程图,在输入密码时指定的密码键为0-9这十个数字,若输入其它符号,如a-f则为无效的密码。
当输入的密码为0-9这十个数,把这些密码用一个table[8]保存。
如果输入完后则返回。
图3-2输入密码函数流程图
(3)密码处理函数
如图3-3所示为密码函数流程图,判断输入的密码与原来的密码是否相同,若相同,则输出输入密码正确的提示,此次设计采用显示d代表输入正确,在输入正确时可以修改密码,修改密码后提示输入正确并返回。
若输入错误则显示错误信息,并蜂鸣器报警,二极管点亮,返回。
图3-3密码处理函数流程图
(4)键扫程序流程图
如图3-4所示,先调键处理,再判断是否有键按下,如果没有键按下,则返回,如果有键按下,去抖延时5ms,再调键处理,如果没键按下就返回,如果有键按下,计算并保持键值,就保存键值并返回。
(5)显示程序流程图
如图3-5首先送段控来控制数码管的显示字形,接着再送位控来控制不同位的数码管显示。
图3-4键扫函数流程图图3-5显示函数流程图
第4章操作与调试
4.1软件调试
软件调试的任务是利用AVR单片机ISP下载编程软件进行仿真调试,发现和纠正程序错误,同时也能发现仿真结果故障。
程序的调试的基本步骤如下:
1、硬件连接
将下载线一端与计算机USB口相连,另一端10PIN插头插入目标电路板的ISP口,然后给目标板上电。
连接过程一定要保证目标板和计算机可靠连接。
2、下载软件的启动
本软件为绿色,不需安装,打开文件夹avr_fighter,双击其中的可执行文件AVR_fighter即可。
下载软件AVR_fighterFORUSBASP的主界面如图4-1:
图4-1AVR_fighterFORUSBASP的主界面
3、下载软件的使用
软件设置:
在上数第二行菜单中选择“编程选项”。
在“芯片选择”方框中选择单片机型号。
这时可点击“读取”按钮来读取芯片的特征字,以验证硬件各部分是否正确。
点击第一行菜单中“装FLASH”按钮,在弹出的窗口中选择“hex文件”并点击“打开”按钮。
图4-2装flash界面
1在“编程选项”方框中点击“编程”按钮,这时就会出现表示程序下载过程的进度条,接下来系统会提示写入成功。
要擦除程序时只需单击“擦除”按钮即可。
2在“BOOTLOAD”及加密方框中可以设置加密位。
AT89S51/52的加密请选择“Lock2或Lock3”。
3在“熔丝位”方框中可以设置熔丝位。
4“选项及操作说明”方框用来显示上述操作,并提示结果。
5点击“读FLASH”按钮可以读取单片机芯片内的内容,读取操作完成后,可以点击第二行菜单中选择“FLASH内容”按钮,在弹出的窗口中显示FLASH内容,这时可以对程序进行查看、编辑,并可保存到指定位置(*.BIN文件格式)。
4.2数码管实物仿真结果
1、显示“204”,程序复位或上电后默认显示“204”如图4-3。
图4-3显示204
2、按下8个密码后显示8“—”,如图4-4所示
图4-4显示输入8位密码
3、输入密码正确显示“d”,如图4-5
图4-4密码输入正确
4.3仿真结论
虽然该设计能满足基本的设计要求,但是目前,电子密码锁仍处在不断完善的过程中,同时密码锁的功能实现形式也是多种多样,不仅可以通过数字编码来实现,而且可以通过单片机控制来达到目的。
由于时间与学识的限制,本课程设计的硬件电路系统中还有一些方面需要改进,所设计的密码锁不够高级,当用户觉得密码输入错误时无法修改,只能从新输入,本设计未设计一个复位键,造成了用户使用不便,若想获得更严谨的密码锁,还得努力研究。
总结与体会
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从画原理图、pcb板的布局以及画法、制板到编写程序、到软件调试,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,每天编写程序,一编就编到凌晨,但当问题解决后心里无比的开心。
同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机c语言掌握得不好,通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,在同学的帮助下,终于游刃而解,非常感谢!
参考文献
[1]单片微型计算机与接口技术(第3版),北京:
电子工业出版社,2010.7
[2]单片机实用技术教程,北京:
人民邮电出版社.2009.10
[3]何为民.低功耗单片微机系统设计[M].北京:
北京航空航天大学出版社,1994.
[4]李华.MCS-51系列单片机实用接口技术[M].北京:
北京航空航天大学出版社,
1996.
[5]马忠梅,单片机的C语言Windows环境编程宝典[M],北京:
北京航空航天大学出版社,2003.6
[6]李光飞,单片机C程序设计指导[M],北京:
北京航空航天大学出版社,2003.01
[7]马忠梅.单片机应用程序设计(第四版)[M].北京:
北京航空航天大学出版社,2006。
附录A密码锁总程序
/*初始密码为8个8
b为开始键
a为确定键
f为修改键
P.显示为可以输入密码
d显示为输入密码正确
E显示为可输入修改密码
F显示为输入密码错误
*/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitP3_1=P3^1;
ucharv;
uchardis_code[]={0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58};//初始密码88888888
ucharcjmm[]={0x50,0x50,0x51,0x51,0x52,0x52,0x53,0x53,0x54,0x54};
//超级密码
ucharcodemm[]={0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59};//0-9
//*****************显示代码数组共阳代码表格,分别对应:
0,1,2,3,4,5,6,7,8,9,P.,灭,d,e,c,-,F***************//
ucharcodetable1[]={0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80,0x90,0x0c,0xff,0xa1,0x86,0xc6,0xbf,0x8e};
ucharled[8]={11,11,11,11,11,2,0,4,};
ucharledp[8]={10,11,11,11,11,11,11,11};//p点显示
ucharledd[8]={12,11,11,11,11,11,11,11};//d点显示
ucharledf[8]={16,11,11,11,11,11,11,11};//f点显示
uchartable[8];
ucharn=0,i,x;
/************************************************************************
函数名:
delay(uintms);
功能:
延时函数
************************************************************************/
voiddelay(uintms)
{
ucharz;
while(ms--)
{
for(z=0;z<120;z++);
}
}
/************************************************************************
函数名:
display();
功能:
显示函数
************************************************************************/
voiddey()//延时1ms子函数//
{
uchari;
for(i=121;i!
=0;i--)
{}
}
voiddisplay()
{
ucharp,q,m=7,c,wei=0xfe,ws=8;//ws为显示的位数,wei为位控//
while(ws)
{c=led[m];//位序送给c//
ws--;
P2=wei;
P0=table1[c];
dey();//显示延时//
p=wei<<1;
q=wei>>7;
wei=p|q;//位控循环左移//
m--;
}
}
/************************************************************************
函数名:
keychuli();
功能:
键处理函数
************************************************************************/
ucharkeychuli()
{
P1=0xf0;//发全列0扫描码
P1=P1&0xf0;//若有键按下
return(P1);
}
//键扫函数
ucharkey()
{
ucharscan,tmp,chizhi;//列,行
chizhi=keychuli();
if(chizhi!
=0xf0)
{delay(5);//延时去抖
chizhi=keychuli();//延时再判键是否还按下
if(chizhi!
=0xf0)
{scan=0xfe;
while((scan&0x10)!
=0)//逐列扫描
{
P1=scan;//输出列扫描码
if((P1&0xf0)!
=0xf0)//本列有键按下
{tmp=(P1&0xf0)|0x0f;
return((~scan)|(~tmp));}//还回键值
elsescan=(scan<<1)|0x01;//列扫描码左移一位
}
}
}
return(0);//无键按下,还回0
}
/************************************************************************
函数名:
srmm();
功能:
输入密码函数
************************************************************************/
voidsrmm()
{while
(1)
{
v=key();
if(v==0x11||v==0x12||v==0x14||v==0x21||v==0x22||v==0x24||v==0x41||v==0x42||v==0x81||v==0x82)
{
delay(200);
switch(v)
{
case0x11:
table[n]=mm[0];break;case0x21:
table[n]=mm[1];break;
case0x41:
table[n]=mm[2];break;
case0x81:
table[n]=mm[3];break;
case0x12:
table[n]=mm[4];break;
case0x22:
table[n]=mm[5];break;
case0x42:
table[n]=mm[6];break;
case0x82:
table[n]=mm[7];break;
case0x14:
table[n]=mm[8];break;
case0x24:
table[n]=mm[9];break;
default:
break;
}
x=led[n]=15;display();delay(100);//显示一杠
n++;
if(n==8){n=0;break;}
}
}
}
/************************************************************************
函数名:
mmchuli();
功能:
密码处理函数
**********
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 密码锁