电子密码锁.docx

上传人:b****5 文档编号:5792415 上传时间:2023-01-01 格式:DOCX 页数:27 大小:413.11KB
下载 相关 举报
电子密码锁.docx_第1页
第1页 / 共27页
电子密码锁.docx_第2页
第2页 / 共27页
电子密码锁.docx_第3页
第3页 / 共27页
电子密码锁.docx_第4页
第4页 / 共27页
电子密码锁.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

电子密码锁.docx

《电子密码锁.docx》由会员分享,可在线阅读,更多相关《电子密码锁.docx(27页珍藏版)》请在冰豆网上搜索。

电子密码锁.docx

电子密码锁

课程设计报告

课程名称:

单片机原理及应用课程设计

 

设计题目:

电子密码锁设计

系别:

通信与控制工程系

专业:

电子信息工程

班级:

学生姓名:

学号:

起止日期:

指导教师:

教研室主任:

指导教师评语:

 

指导教师签名:

年月日

成绩评定

项目

权重

成绩

1、设计过程中出勤、学习态度等方面

0.2

2、课程设计质量与答辩

0.5

3、设计报告书写及图纸规范程度

0.3

总成绩

教研室审核意见:

 

教研室主任签字:

年月日

教学系审核意见:

 

主任签字:

年月日

摘要

电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。

随着科技的发展和人们生活水平的提高,如何实现保密防盗这一问题变的尤其的突出,传统的机械锁由于其构造的简单,失效的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,因而广泛使用。

本设计围绕电子密码锁系统的设计与开发进行研究和实践,详细介绍了电子密码锁系统的整体结构。

基于在系统可编程技术和STC89C52编译器配有集成开发的新型电子密码锁的设计方案,阐述其工作原理和软硬件设计,由单片机系统、矩阵键盘、LED显示和报警系统组成的系统能完成开锁、修改用户密码、报警基本的密码锁的功能。

关键字:

STC89C52芯片;8255芯片;keil软件

 

电子密码锁设计

电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。

它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。

现在应用较广的电子密码锁是以芯片为核心,通过编程来实现。

1设计要求与内容

1.1设计要求

利用单片机作为控制核心,完成一个电子密码锁可以修改密码设计具体要求

如下:

1、密码的设定,此密码是固定在程序存储器ROM中,假设预设的密码为“12345共6位密码;

2、密码的输入:

采用两个按键来完成密码的输入,其中一个按键为功能键,另一个按键为数字键。

输入确认功能键之后,才能完成密码的输入过程。

进入密码的判断比较处理状态并给出相应的处理过程;

3、密码输入正确按确认键,绿灯亮,输入密码错误、红灯亮蜂鸣器响。

1.2设计内容

1、设计合理、正确的方案;

2、系统硬件设计及焊接制作;

3、系统软件设计及调试;

4、系统联调。

1.3主要设计条件

1、MCS-51单片机实验操作台1台;

2、PC机及单片机调试软件;

3、单片机应用系统板1套;

4、系统设计所需的元器件。

2方案论证与对比

2.1方案一

采用数字电路控制,其原理方框图如1-1所示。

图1-1数字电路控制图

采用数字密码锁电路的好处就是设计简单。

用74LS112双JK触发器构成的数字逻辑电路做为密码锁的核心控制,共设了9用户输入键,其中只有5个是有效的密码按键,其它的都是干扰按键,如果按下干扰按键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入,。

电路有两大部分组成:

密码锁电路和备用电源,其中备用电源是防止停电造成的密码锁电路失效,是用户免遭麻烦。

密码锁电路包含:

键盘输入,密码检测,开锁电路,执行电路,报警电路。

2.2方案二

2.2.1单片机系统

是用以STC98C52为核心的单片机控制方案。

利用单片机灵活编程设计和丰富的I/O端口,及其控制的准确性,进行电子密码锁的设计。

此次课题用8255课编程芯片的PC口与键盘相连,做输入口,PA,PB口与数码管相连,做显示。

2.2.2矩阵键盘接口电路

此次课程设计采用4*4矩阵键盘,与PC相连,采用扫描法。

设有0——十个数字密码,和功能键。

输入密码,按确认键后,密码比较。

2.2.3LED显示

此次课程设计用数码管动态显示。

根据按键次数,第一位显示器显示第一次按的密码,第二位显示器显示第二次按的密码,第三位显示器显示第三次按的密码,依此第六位显示器显示第六次按的密码,按键完成后按确认键后,密码对则执行相关动作。

2.2.4比较显示系统

此次课程设计,当输入密码正确时,LED灯亮(绿灯亮);当输入密码错误时,LED灯亮(红灯亮)且蜂鸣器响。

2.2.5系统总框图

系统包括:

单片机系统、矩阵键盘接口电路、LED显示、比较显示器、系统总框图如下:

图2-5系统总框图

2.3方案论证与选择

通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能,而且能在很大程度上扩张功能,而且还可以方便的对系统进行升级,以及对设计条件的综合考虑,我们选择方案二。

3硬件电路设计

3.1键盘电路设计

3.1.1矩阵式键盘电路图

图3-1键盘电路图图3-2键盘图

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

本次因需要使矩阵键盘当独立键盘使用。

3.1.2矩阵键盘的识别方法

矩阵键盘的识别方法有很多种,比如行反转法,扫描法等。

最常用的方法是扫描法,本次采用扫描法。

3.2LED显示电路设计

LED就是lightemittingdiode,发光二极管的英文缩写,简称LED。

它是一种通过控制半导体发光二极管的显示方式,用来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。

显示器显示接口按驱动方式可分为静态显示和动态显示,静态显示时,除变更显示数据期间外,各显示器均处于通电状态,每个显示器的通电占空比为100%,静态显示的优点是显示稳定,亮度高,缺点是占用硬件电路多;动态显示的优点是节省硬件电路,缺点是占用软件扫描时占用CPU时间多。

对于多位LED显示器,通常都是采用动态扫描的方法进行显示,即逐个地循环点亮各位显示器,这样虽然在任一时刻只有一显示器被点亮,但是由于人眼具有视觉残留效应,看起来与全部显示器持续点亮效果完全一样。

图3-2数码管显示电路图

为了实现LED显示器的动态扫描,除了要给显示器的输入之外,还有对显示器选择位的控制,这就是通常所说的段控和位控。

因此,多位LED显示器接口电路需要有两个输出口,其中一个用于8条段控线,另一个用于输出位控线,位控线的数目等于显示器的位数。

为了方便编写程序,通常在内部RAM中设置显示缓冲区,存放显示的数字或字符,显示缓冲区单元个数与LED显示器位数相同。

此次基于单片机的电子密码锁,我选用动态显示,通过与软件配合,每输入一个密码,进行显示一次,扫描,密码输入完后,进行比较,密码正确则开锁。

3.3STC89C52芯片与8255芯片的介绍

STC89C52是低功耗、高性能的CMOS8位微控制器。

8字节的flash,256字节的RAM,32位的I/O口线,看门狗定时器,2个数据指针,3个16位定时器/计数器。

全双工串行口,片内晶振及时钟电路,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,内容被保存,振荡器被冻结。

STC89C52芯片如图2-3所示:

图3-3STC89C52芯片图图3-48255芯片引脚图

8255芯片引脚图如图3-4所示:

8255芯片是一种典型的课编程通用并行接口芯片,用来扩展单片机的端口,它具有3个8位的并行口,有三位工作方式,可作为单片与各种外部设备连接的接口电路。

CS:

片选信号线,当该引脚为低电平时,8255被选中,允许8255与CPU通讯。

RESET:

复位输入线,当该引脚为高电平时,内部寄存器被清除,所有I/O口均被置成输入方式。

A0、A1:

地址输入线。

当A0A1=00时,PA口被选中;

当A0A1=01时,PB口被选中;

当A0A1=10时,PC口被选中;

当A0A1=11时,控制寄存器被选中。

4软件设计

4.1软件总体设计

软件的设计主要包括:

密码的固定、键盘识别判断、密码显示、密码比较、密码对处理。

软件设计总流程图如下:

 

YN

 

图4-1总流程图

4.2各子程序的设计

4.2.1密码的固定定

将密码固定在程序存储器ROM中,设定密码,密码固定在ROM中。

4.2.2键盘的扫描识别判断

用矩阵式键盘,扫描法对键盘进行识别判断,具体流程图如下:

首先选着一行或者一列,低电平有效,然后进行扫描,如果发现一行(列)出现低电平信号则有键按下,然后在数码管显示相应的数或者现象。

在扫描时,会出现电信号抖动,所以一般我们要加上去抖动语句。

根据此原理,我们给键盘编码0-9,以及其他的一些功能按键,这就是电子密码锁按键。

图4-2键盘扫描流程图

4.2.3密码显示和比较处理

采用LED动态显示,密码输入完成之后,进行密码比较,并显示相应现象。

图4-3密码显示图

5系统功能的测试与整体指标

5.1软件调试步骤

1、打开keil软件后,在project菜单中选择NewProject命令,打开一个新项目,保存项目,输入工程文件名后,并保存工程文件的目录;

2、为项目文件选择一个目标器件,即选择8051的类型,在Database列表框中选择“ATML89C52”,确定

3、上述设置好后,创建源程序文件并输入程序代码。

输入好代码后点击“文件/保存”;

4、把源文件添加到项目中,用鼠标指在目标工作区的目标1,点击右键在弹出的菜中选择添加文件到源代码组,在弹出的添加文件框中,选择需要添加到项目中的件;

5、开始编辑,对项目文件进行编辑,若没有错误后进行硬件调试。

5.2程序调试步骤

1、矩阵4*4键盘的调试

键盘程序是整个程序的基础,我们必须保证其正确。

调试方法:

先把程序下载到单片机,让数码管显示,在有键按下时显示的是否为设定的值。

2、数码管程序调试

正确的显示数值是整个储蓄的关键。

调试方法:

先把程序下载到单片机,让

数码显示数值。

5.3测试结果

实例测试:

将程序下载到单片机,按下功能键,再输入初始密码“123456”再按确认键,绿灯亮,解锁成功,若输入密码错误,则亮红灯,蜂鸣器响;按修改密码键,再输入新密码,按确认键密码修改成功;若不按功能键则无法进行密码输入。

 

6、详细仪器清单

详细仪器清单表

仪器名称

数量

STC89C52芯片

1

8255芯片

1

1K电阻

22

型号为9015的三极管

6

电容

1

8段共阳极数码管

6

二极管

1

石英晶振

1

矩形按键

6

7总结及致谢

本次单片机课程设计历时两个星期,在这了两个星期中我们深深体会到了课程设计的苦与乐。

当程序调试出现问题时,我们就一步步调试,一步步查看,修改,这过程确实很枯燥,也很辛苦,但是,当程序调试成功并且能够下载到单片机中运行时,有说不出的高兴,感觉我们所有的付出都是值得的。

总的来说,这次课程设计,让我们领悟到理论与实践结合的重要性。

懂得拥有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从中得到收获,从而提高自己的实际动手能力和独立思考的能力,做到全面发展,这样才能真正为社会服务。

因为这是第一次做单片机课程设计,所以我们遇到过各种各样的问题,面对这些难题,我们没有妥协,以求学的心态去解决,从中发现了自己的不足之处,正是这些难题让我们看到了自己的不足,对以前所学过的知识理解得不够深刻,基础掌握得不够牢固。

只学到了表面的知识,并没有深入了解知识的内涵。

所以很庆幸有这次课程设计,它教会了我们到底要学些什么知识,给我们以后的学习指明了一个方向,促使我们更加努力的学习,补充自己的不足。

这次课程设计终于顺利完成了,其中离不开老师的耐心指导和同学们的热心帮助,在此表示衷心的感谢,另外特别感谢指导老师谭老师的耐心指导,他的讲解让我们有豁然开朗的感觉,让我们得以顺利完成这次课程设计。

 

参考文献

[1]张鑫.单片机原理及应用[M].电子工业出版社,2009

[2]郭天祥.51单片机C语言教程[M].电子工业出版社,2009

[3]邹逢兴.计算机硬件技术基础试验教程[M].高等教育出版社,2000

[4]周佩玲.16位微型计算机原理接口及其应用[M].中国科学技术大学出版社,

2000

[5]吴秀清.微型计算机原理与接口技术[M].中国科学技术出版社,2001

 

▪附录一:

仿真图

附录二:

源程序

#include

#include/*调用库函数*/

#defineucharunsignedchar/*自定义无符号字符型为uchat*/

#definePAXBYTE[0xD9FF]/*8255芯片PA口地址*/

#definePBXBYTE[0xDAFF]/*PB口地址*/

#definePCXBYTE[0xDDFF]/*PC口地址*/

#defineCONXBYTE[0xDFFF]/*控制字地址*/

sbitD1=P1^1;/*位声明把P1.1口赋给D1*/

sbitD2=P1^0;/*把P1.0口赋给D2*/

sbitbeep=P3^3;/*蜂鸣器端口*/

ucharcodetable[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28,0xef};

ucharnum,num1,num2,num3,num4,num5,num6,tt,temp,i,j,k,t,x,y,n1,a,b,c,d,e,f,xsm;voiddelay(xsm);/*延时函数声明*/

voidkeys();/*键盘函数声明*/

voidkeys1();/*键盘函数声明*/

voidkeys2();/*键盘函数声明*/

voiddisplay(num);/*数码显示函数声明*/

voidmain()/*主函数*/

{

CON=0x80;/*选择8255工作方式1*/

x=6;y=6;/*控制密码位数初值*/

a=1;b=2;c=3;d=4;e=5;f=6;/*定义密码锁的原始密码为123456*/

while

(1)/*循环函数*/

{

display(num);

keys();

keys1();

keys2();

}

}

voiddisplay(num)/*数码显示函数*/

{

if(tt==0||tt>6)/*tt控制按键次数,tt=0,没有数字键按下*/

{

tt=0;

PA=0xc0;/*把6个数码管位选打开*/

PB=table[10];/*数码管显示"_"*/

}

if(tt==1)/*tt=1,第一次按键*/

{

num1=num;/*把按键值num赋给num1*/

num2=b;num3=c;num4=d;num5=e;num6=f;/*密码位数控制*/

if(t==1){a=num;y=x-5;}/*判断是否修改密码*/

PA=0xfe;/*开第一个数码管*/

PB=table[num1];/*显示第一个数值*/

if(num==10)/*取消输入健值判断*/

tt--;

}

if(tt==2)/*tt=2,第二次按键*/

{

num2=num;

num3=c;num4=d;num5=e;num6=f;

if(t==1){b=num;y=x-4;}

PA=0xfd;/*用第二个数码管显示第二次按键的值*/

PB=table[num2];

delay(18);/*延时10ms*/

PA=0xfe;/*保持第一次按键的健值亮*/

PB=table[num1];

delay(18);

if(num==10)/*取消键判断*/

tt--;

}

if(tt==3)/*tt=3,第三次按键*/

{

num3=num;

num4=d;num5=e;num6=f;

if(t==1){c=num;y=x-3;}

PA=0xfb;/*用第三个数码管显示第三次按键的值*/

PB=table[num3];

delay(18);/*延时10ms*/

PA=0xfd;/*保持第二次键值亮*/

PB=table[num2];

delay(18);

PA=0xfe;/*保持第一次键值亮*/

PB=table[num1];

delay(18);

if(num==10)/*取消键判断*/

tt--;

}

if(tt==4)/*tt=4,第四次按键*/

{

num4=num;

num5=e;num6=f;

if(t==1){d=num;y=x-2;}

PA=0xf7;/*用第四个数码管显示第四次按键的值*/

PB=table[num4];

delay(18);/*延时10ms*/

PA=0xfb;/*保持第三次键值亮*/

PB=table[num3];

delay(18);

PA=0xfd;/*保持第二次键值亮*/

PB=table[num2];

delay(18);

PA=0xfe;/*保持第一次键值亮*/

PB=table[num1];

delay(18);

if(num==10)/*取消键判断*/

tt--;

}

if(tt==5)/*tt=5,第五次按键*/

{

num5=num;

num6=f;

if(t==1){e=num;y=x-1;}

PA=0xef;/*用第五个数码管显示第五次按键的值*/

PB=table[num5];

delay(18);/*延时10ms*/

PA=0xf7;/*保持第四次键值亮*/

PB=table[num4];

delay(18);

PA=0xfb;/*保持第三次键值亮*/

PB=table[num3];

delay(18);

PA=0xfd;/*保持第二次键值亮*/

PB=table[num2];

delay(18);

PA=0xfe;/*保持第一次键值亮*/

PB=table[num1];

delay(18);

if(num==10)/*取消键判断*/

tt--;

}

if(tt==6)/*tt=6,第六次按键*/

{

num6=num;

if(t==1){f=num;y=6;}

PA=0xdf;/*用第六个数码管显示第六次按键的值*/

PB=table[num6];

delay(18);/*延时10ms*/

PA=0xef;/*保持第五次键值亮*/

PB=table[num5];

delay(18);

PA=0xf7;/*保持第四次键值亮*/

PB=table[num4];

delay(18);

PA=0xfb;/*保持第三次键值亮*/

PB=table[num3];

delay(18);

PA=0xfd;/*保持第二次键值亮*/

PB=table[num2];

delay(18);

PA=0xfe;/*保持第一次键值亮*/

PB=table[num1];

delay(18);

if(num==10)/*取消键判断*/

tt--;

}

}

voidkeys1()/*复位键*/

{

PC=0xfd;/*第三行第一个按键*/

if(PC==0xed)/*判断是否有健按下*/

{

delay(10);

if(PC==0xed)

{

k=1;/*k为控制数字键条件k=1,可以按键*/

tt=0;/*输入键值和密码比较完,数字控制键清屏*/

D1=1;/*按下数字控制键灯灭*/

D2=1;

n1=0;

}

}

}

voidkeys2()/*功能键函数*/

{

PC=0xfe;/*功能键1,修改密码键*/

if(PC==0xde)/*判断是否有健按下*/

{

delay(10);

if(PC==0xde)

{

if(n3==1)

{

k=1;/*开数字按键*/

t=1;/*记忆密码条件*/

}

elsek=0;

}

}

PC=0xfe;/*功能键2,修改密码确认键*/

if(PC==0xbe)/*判断是否有健按下*/

{

delay(10);

if(PC==0xbe)

{

k=0;/*关数字按键*/

t=0;/*不再记忆密码*/

n1=1;

}

}

if(n1!

=1)

{PC=0xfe;/*功能键3,输入密码确认键*/

if(PC==0x7e)/*判断是否有健按下*/

{

delay(10);

if(PC==0x7e)

{

k=0;/*关数字按键*/

if(tt!

=0)

{

if(y==tt)/*判断输入值的长度是否等于密码长度*/

{

if(a==num1&&b==num2&&c==num3&&d==num4&&e==num5&&f==num6)

{

n3=1;/*密码输入正确,修改密码标志*/

D1=0;/*如果输入按键值与密码值相等,D1灯亮*/

}

else

{

D2=0;/*数值不相等,D2灯亮,蜂鸣器响*/

n3=0;

}

}

else

{

D2=0;/*长度不相等,D2灯亮,蜂鸣器响*/

n3=0;

}

}

}

}

}

}

voidkeys()/*数字键函数,编码数字键盘*/

{

if(k==1)/*判断是否按数字键*/

{

PC=0xf7;/*扫描键盘*/

temp=PC;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

temp=PC;

temp=temp&0xf0;

if(temp!

=0xf0)

{

temp=PC;

switch(temp)

{

case0x77:

/*按键位置*/

tt++;/*tt表示数码管亮的位置,亮一次,自加1*/

num=9;/*num表示键盘的键值*/

break;/*按键结束跳出*/

case0xb7:

tt++;

num=8;/*按键8*/

break;

case0xd7:

tt++;

num=7;/*按键7*/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1