湖南工程学院智能密码锁.docx

上传人:b****5 文档编号:6362245 上传时间:2023-01-05 格式:DOCX 页数:31 大小:311.30KB
下载 相关 举报
湖南工程学院智能密码锁.docx_第1页
第1页 / 共31页
湖南工程学院智能密码锁.docx_第2页
第2页 / 共31页
湖南工程学院智能密码锁.docx_第3页
第3页 / 共31页
湖南工程学院智能密码锁.docx_第4页
第4页 / 共31页
湖南工程学院智能密码锁.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

湖南工程学院智能密码锁.docx

《湖南工程学院智能密码锁.docx》由会员分享,可在线阅读,更多相关《湖南工程学院智能密码锁.docx(31页珍藏版)》请在冰豆网上搜索。

湖南工程学院智能密码锁.docx

湖南工程学院智能密码锁

湖南工程学院

课程设计

课程名称单片机原理与应用

课题名称智能密码锁设计

专业

班级

学号

姓名

指导教师

年月日

湖南工程学院

课程设计任务书

 

课程名称单片机原理与应用

课题智能密码锁设计

 

专业班级

学生姓名

学号

指导老师

审批

 

任务书下达日期2012年月日

任务完成日期2012年月日

设计内容与设计要求

设计内容:

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

2、密码的输入:

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

在密码都已经输入完毕并且确认功能键之后,才能完成密码的输入过程。

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

3、按键禁止功能:

初始化时,允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态是在3次密码输入不正确的情况下发生的。

设计要求:

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

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

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

4、系统联调;

5、写出设计报告。

 

主要设计条件

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

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

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

4、制作工具1套;

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

说明书格式

1.封面

2.课程设计任务书

3.目录

4.系统总体方案设计

5.系统硬件设计

6.软件设计(包括流程图)

7.系统的安装调试说明

8、总结

9、参考文献

10、附录(源程序清单及硬件原理图等);

11、课程设计成绩评分表。

进度安排

设计时间为两周

第一周

星期一、上午:

布置课题任务,讲课及课题介绍

下午:

借阅有关资料,总体方案讨论

星期二、确定总体设计方案

星期三、硬件模块方案设计

星期四、软件模块方案设计

星期五、设计及调试

第二周

星期一、设计及调试

星期二、设计及调试

星期三、总调

星期四、写说明书

星期五、上午:

写说明书,整理资料

下午:

交设计资料,答辩

参考文献

[1]、《微型计算机原理及应用》许立梓编机械工业出版社2002

[2]、《微型计算机接口技术及应用》刘乐善编华中理工大学出版社2000

[3]、《计算机硬件技术基础试验教程》邹逢兴编高等教育出版社2000

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

2000

[5]、《微型计算机原理与接口技术》吴秀清编中国科学技术出版社2001

[6]、《微型计算机接口技术》邓亚平编清华大学出版社2001

[7]、《单片机原理及及应用》王迎旭编机械工业出版社2001

[8]、《单片机应用程序设计技术》周航慈著北京航空航天大学出版社2002

[9]、《单片机实用技术问答》谢宜仁主编人民邮电出版社2002

第1章概述

1.1该课题的发展现状与趋势简述:

在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。

若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。

为满足人们对锁的使用要求,各类电子产品应运而生,智能密码锁就是其中之一。

智能密码锁的研制,在20世纪30年代就开始了,在一些特殊场所早就有所应用。

这种锁是通过键盘输入一组密码来完成解锁过程,由于智能密码锁的密码量极大,不易被破解,避免了因钥匙被仿制而留下的安全隐患。

并且可以与机械钥匙配合使用,双重守护,大大提高了其安全性能,因而到现在应用得越来越广泛了。

1.2设计内容:

(1)密码的设定:

此密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。

(2)密码的输入:

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

在密码都已经输入完毕并且确认功能键之后,才能完成密码的输入过程。

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

(3)按键禁止功能:

初始化时,允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态是在3次密码输入不正确的情况下发生的。

1.3设计要求:

(1)设计方案要合理、正确;

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

(3)系统软件设计及调试;

(4)系统联调;

(5)写出设计报告。

 

第2章系统方案设计

本次密码锁采用了键盘读入数据,数码管显示读入密码,当在键盘读入时,输入密码会依次显示在数码管上,当输入密码后按确认,如与固有密码相同时,密码正确,LED上显示如图:

 

如与固有密码不相同时,密码错误,LED上现实如图:

 

当三次输入密码与固有密码不相同时,蜂鸣器长响报警,并且会启动禁止键盘读入密码功能。

这样就组成了智能密码锁。

2.1系统组成框图:

系统主要以MCS-51单片机为核心,结合具体的电路,组合成一个智能密码锁系统,该系统的其他电路主要包括:

密码输入模块、密码检测系统、报警显示电路、开锁电路、液晶显示电路、密码锁存电路、六个主要模块。

如下图2.1所示:

图2.1系统组成框图

2.2单片机系统:

单片机作为整个硬件系统的核心,它既是协调整机工作的控制器,又是数据处理器。

它由单片机、时钟电路、复位电路等组成。

为了简化电路、降低成本、提高可靠性,本系统采用AT89C54作为主控制器。

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

此次课题用单片机P3口与键盘相连,做输入口,P0口与显示器相连,做显示,P2口做显示器扫描,键盘16号键为确认键。

单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:

内部振荡和外部振荡。

由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,这次课题采用内部方式进行定时计数。

2.3矩阵键盘接口电路:

此次课程设计采用4*4矩阵键盘,4行4列分别与P3口相连,采用行列反转扫描法。

设有0—E`15个数字密码,和,1个功能键。

15个数字键用来输入密码,F键功能键用来确认。

2.4LED显示电路:

此次课程设计设置5位密码,按键后数码管显示器显示,采用动态显示。

P0口送显示数据,P2口显示扫描,根据按键顺序,显示器第一位显示第一次按的密码,第二位显示第二次按的密码,依此类推第5位显示第5次按的密码,按键完成后按确认键后,系统进行密码比较密码对则执行开锁动作,对应的发光二极管亮。

2.5报警显示模块:

通过4*4矩阵键盘输入信息时,不仅在液晶屏幕上显示相关内容,同时也通过声光显示模块反映出来,增加了用户的感光性。

2.6开锁提示模块:

当输入密码和固有密码相同时,LED灯闪烁伴随的蜂鸣器响,同时控制继电器打开密码锁装置,当3次输入的密码都与固有密码不同时,将死锁定键盘,不再读入数据。

重启后方可重新输入。

2.7密码锁存电路:

该系统的密码在初始化的时候就被写在24C02E2PROM中。

初始密码为“12345”。

修改初始密码需要用24C02程序直接重新写入密码所在地址中的值,以后修改的密码,也都讲被系统直接写入24C02E2PROM中。

然后系统直接从24C02中读取当前密码。

并与用户输入密码相比较。

防止掉电丢失修改后的密码。

 

第3章硬件电路设计

3.1键盘电路设计

3.1.1矩阵式键盘电路图:

图3.14x4矩阵键盘

3.1.2矩阵式键盘工作原理:

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

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

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

矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,图3.1中,如果将行线扫描为全0,当按键没有按下时,所有的列线都是高电平,代表无键按下。

一旦有键按下,则列线就会被拉低。

这样,通过读入列线的状态就可得知是否有键按下了。

3.1.3矩阵式键盘的识别方法:

确定矩阵式键盘上何键被按下介绍一种“行扫描法”。

行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示。

3.2LED显示电路设计

图3.2LED显示电路

3.3报警电路设计

主要有LED灯和蜂鸣器组成,当密码输入正确时,LED-green亮。

当密码输入错误时LED-yellow会亮,当输入三次错误时,LED-red亮并伴有蜂鸣器长响报警。

如图3-3所示。

图3-3报警显示电路

3.4开锁机构设计

信号通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的,其原理如图3.3所示:

图3.3密码锁开锁机构示意图

当用户输入的密码正确,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的,此次设计无电磁锁,利用一个发光二极管来代表门锁,亮表示锁开,灯灭表示锁合

第4章软件设计

4.1软件总体设计

软件的设计主要包括:

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

软件设计总流程图如下:

图4-1软件设计总流程图

4.2各子程序的设计

#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换

#defineKeyPortP3

sbitLATCH1=P2^0;//定义锁存使能端口段锁存

sbitLATCH2=P2^1;//位锁存

sbitled1=P2^4;//led灯1

sbitled2=P2^5;//led灯2

sbitled3=P2^6;//led灯3

sbitBeep=P2^7;//报警器

UnsignedcharcodeDuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x77,0x7c,0x39,0x5e,0x79,0x71};//显示段码值0~F

unsignedcharcodeWeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码

unsignedcharTempData[8];//存储显示值的全局变量

unsignedcharcodepassword[5]={1,2,3,4,5};

voidbeep(void);

voidDelayUs2x(unsignedchart);//us级延时函数声明

voidDelayMs(unsignedchart);//ms级延时

voidDisplay(unsignedcharFirstBit,unsignedcharNum);//数码管显示函数

unsignedcharKeyScan(void);//键盘扫描

unsignedcharKeyPro(void);

voidInit_Timer0(void);//定时器初始化

/*------------------------------------------------

主函数

------------------------------------------------*/

voidmain(void)

{

unsignedcharnum,i,j;

unsignedcharinputtimes;

unsignedchartemp[6];

bitFlag;

Init_Timer0();

while

(1)//主循环

{num=KeyPro();

if(num!

=0xff)

{if(i==0)

{for(j=0;j<8;j++)//清屏

TempData[j]=0;

}

if(i<5)

{temp[i]=DuanMa[num];//把按键值输入到临时数组中

for(j=0;j<=i;j++)//通过一定顺序把临时数组中的值赋值到显示缓冲区,从右往左输入

TempData[7-i+j]=temp[j];

}

if(num==10)//退格

{i=i-2;

for(j=0;j<8;j++)//清屏

TempData[j]=0;

for(j=0;j<=i;j++)

TempData[7-i+j]=temp[j];

}

i++;//输入数值累加

if(num==11)//按下确认键

{i=0;

Flag=1;//先把比较位置1

for(j=0;j<5;j++)//循环比较5个数值,如果有一个不等则最终Flag值为0?

Flag=Flag&&(temp[j]==DuanMa[password[j]]);

//比较输入值和已有密码

for(j=0;j<8;j++)//清屏

TempData[j]=0;

if(Flag)//如果比较全部相同,标志位置1

{TempData[2]=0x3f;//"o"

TempData[3]=0x73;//"p"

TempData[4]=0x79;//"E"

TempData[5]=0x54;//"n"

//说明密码正确,输入对应操作显示"open"

inputtimes=0;

Flag=0;//密码正确指示灯闪烁蜂鸣器响

led1=0;

DelayMs(2000);

led1=1;}

else

{TempData[2]=0x79;//"E"

TempData[3]=0x50;//"r"

TempData[4]=0x50;//"r"

//否则显示"Err"

inputtimes++;

if(inputtimes<3)

{led2=0;

DelayMs(2000);

led2=1;}

if(inputtimes==3)

{TempData[0]=0x7f;

TempData[1]=0x7f;

TempData[2]=0x7f;

TempData[3]=0x7f;

TempData[4]=0x7d;

for(i=10;i>0;i--)

{led3=!

led3;

DelayMs(200);

beep();}

while

(1);

}}}

if(num==12)//清除

{i=0;

for(j=0;j<8;j++)//清屏

TempData[j]=0;}}}}

/*------------------------------------------------

uS延时函数,含有输入参数unsignedchart,无返回值

unsignedchar是定义无符号字符变量,其值的范围是

0~255这里使用晶振12M,精确延时请使用汇编,大致延时

长度如下T=tx2+5uS

------------------------------------------------*/

voidDelayUs2x(unsignedchart)

{while(--t);}

/*------------------------------------------------

mS延时函数,含有输入参数unsignedchart,无返回值

unsignedchar是定义无符号字符变量,其值的范围是

0~255这里使用晶振12M,精确延时请使用汇编

------------------------------------------------*/

voidDelayMs(unsignedchart)

{while(t--)

{//大致延时1mS

DelayUs2x(245);

DelayUs2x(245);}}

/*------------------------------------------------

显示函数,用于动态扫描数码管

输入参数FirstBit表示需要显示的第一位,如赋值2表示从第三个数码管开始显示

如输入0表示从第一个显示。

Num表示需要显示的位数,如需要显示99两位数值则该值输入2

------------------------------------------------*/

voidDisplay(unsignedcharFirstBit,unsignedcharNum)

{staticunsignedchari=0;

DataPort=0;//清空数据,防止有交替重影

LATCH1=1;//段锁存

LATCH1=0;

DataPort=WeiMa[i+FirstBit];//取位码

LATCH2=1;//位锁存

LATCH2=0;

DataPort=TempData[i];//取显示数据,段码

LATCH1=1;//段锁存

LATCH1=0;

i++;

if(i==Num)

i=0;}

/*------------------------------------------------

定时器初始化子程序

------------------------------------------------*/

voidInit_Timer0(void)

{TMOD|=0x01;//使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

//TH0=0x00;//给定初值

//TL0=0x00;

EA=1;//总中断打开

ET0=1;//定时器中断打开

TR0=1;//定时器开关打开

}

/*------------------------------------------------

定时器中断子程序

------------------------------------------------*/

voidTimer0_isr(void)interrupt1

{TH0=(65536-2000)/256;//重新赋值2ms

TL0=(65536-2000)%256;

Display(0,8);//调用数码管扫描}

voidbeep(void)

{unsignedchari;

for(i=0;i<100;i++)

{DelayMs(5);

Beep=!

Beep;//BEEP取反}

Beep=1;//关闭蜂鸣器}

/*------------------------------------------------

按键扫描函数,返回扫描键值

------------------------------------------------*/

unsignedcharKeyScan(void)//键盘扫描函数,使用行列反转扫描法

{unsignedcharcord_h,cord_l;//行列值中间变量

KeyPort=0x0f;//行线输出全为0

cord_h=KeyPort&0x0f;//读入列线值

if(cord_h!

=0x0f)//先检测有无按键按下

{DelayMs(10);//去抖

if((KeyPort&0x0f)!

=0x0f)

{cord_h=KeyPort&0x0f;//读入列线值

KeyPort=cord_h|0xf0;//输出当前列线值

cord_l=KeyPort&0xf0;//读入行线值

while((KeyPort&0xf0)!

=0xf0);//等待松开并输出

return(cord_h+cord_l);//键盘最后组合码值

}}return(0xff);//返回该值}

/*------------------------------------------------

按键值处理函数,返回扫键值

------------------------------------------------*/

unsignedcharKeyPro(void)

{switch(KeyScan())

{case0x7d:

return0;break;//0按下相应的键显示相对应的码值

case0xeb:

return1;break;//1

case0xed:

return2;break;//2

case0xee:

return3;break;//3

case0xdb:

return4;break;//4

case0xdd:

return5;break;//5

case0xde:

return6;break;//6

case0xbb:

return7;break;//7

case0xbd:

return8;break;//8

case0xbe:

return9;break;//9

case0x7b:

return10;break;//清除键

case0x7e:

return11;break;//退格键

case0x77:

return12;break;//确认键

default:

return0xff;break;}

}

第5章系统调试

5.1初始化仿真图:

5.2正确输入密码仿真图:

5.3正确密码时按下确认键仿真图:

5.4输入错误密码仿真图:

5.5错误密码时按下确认键的仿真图:

5.6三次错误密码时按下确认键的仿真图:

 

设计总结

在课程设计2个星期里,学到很多东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过课程设计我认识到理论与实际相结合的重要性,只有理论知识是远远不够的,把所学的理论知识与实际相结合起来,从理论中得出结论,才能真正提高自己的独立思考的能力。

在设计的过程中我遇到各式各样的问题,同时也发现自己的许多不足之处。

整了个设计过程对我而言可以说是困难重重,譬如对以前所学过的知识理解得不够深刻,掌握得不够牢固,不会查阅资料,觉得无从下手等等。

但课程设计提供了一个同学们互相交流学习的平台和环境,同时也是将平时掌握的知识融会贯通的过程。

所以,我很珍惜每次课程设计的机会。

不仅学到课专业知识,同时锻炼的

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

当前位置:首页 > 小学教育 > 小学作文

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

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