单片机课程设计电子密码锁设计09通信2班.docx

上传人:b****2 文档编号:17527904 上传时间:2023-07-26 格式:DOCX 页数:39 大小:187.50KB
下载 相关 举报
单片机课程设计电子密码锁设计09通信2班.docx_第1页
第1页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第2页
第2页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第3页
第3页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第4页
第4页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第5页
第5页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第6页
第6页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第7页
第7页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第8页
第8页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第9页
第9页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第10页
第10页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第11页
第11页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第12页
第12页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第13页
第13页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第14页
第14页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第15页
第15页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第16页
第16页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第17页
第17页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第18页
第18页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第19页
第19页 / 共39页
单片机课程设计电子密码锁设计09通信2班.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计电子密码锁设计09通信2班.docx

《单片机课程设计电子密码锁设计09通信2班.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电子密码锁设计09通信2班.docx(39页珍藏版)》请在冰点文库上搜索。

单片机课程设计电子密码锁设计09通信2班.docx

单片机课程设计电子密码锁设计09通信2班

1引言

随着科技和人们的生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统机械锁由于构造简单,被撬事件屡见不鲜;电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐。

单片机,亦称单片微电脑或单片微型计算机。

它是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。

计算机的产生加快了人类改造世界的步伐,但是它毕竟体积大。

微计算机(单片机)在这种情况下诞生了,它为我们改变了什么?

纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。

在单片机产生后,我们就将控制这些东西变为智能化了,我们只需要在单片机外围接一点简单的接口电路,核心部分只是由人为的写入程序来完成。

这样产品的体积变小了,成本也降低了,长期使用也不会担心精度达不到了,且容易升级改善。

电子锁可以在日常生活和现代办公中,住宅与办公室的安全防范、单位的文件档案、财务报表以及一些个人资料的保存等多种场合使用。

大大提高了主人物资的安全性,安全可以代替老式机械锁。

目前使用的密码锁种类繁多,各具特色。

本文从经济实用的角度出发,采用AT89C2051单机,研制了一款具有防盗自动报警功能的电子密码锁。

该密码锁设计方法合理,简单易行,成本低,符合住宅、办公室用锁要求,具有一定的推广价值。

(1)系统设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。

(2)密码由用户自己设定,在开锁状态下,用户可自行修改密码。

(3)具有自动报警功能,系统工作时,用户通过按键输入6位密码,若密码不正确,则要求重新输入密码,重新输入密码的次数不能超过3次,若3次输入的密码都不正确,则发出报警信号。

本课程设计以AT89C51为主控芯片,LCD1602为显示屏,利用单片机的读写控制、扩展电路等功能部件设计电子密码锁。

 

2系统设计分析

2.1总体设计框图

本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。

其中矩阵键盘用于输入数字密码和进行各种功能的实现。

由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路控制是否开锁。

系统整体框图如图2-1所示。

 

图2-1系统整体框图

各模块功能如下:

1.键盘输入模块:

分为密码输入按键与功能按键,用于完成密码输入功能。

2.密码存储模块:

用于完成掉电存储功能,使修改的密码断电后仍能保存。

3.晶振电路:

用于单片机的起振。

4.复位电路:

完成系统的复位。

5.LCD显示模块:

用于完成对系统状态显示及操作提示功能。

6.开锁电路:

应用发光二极管模拟开锁,完成开锁及开锁提示。

 

2.2硬件电路设计分析

本系统电路由键盘输入部分、密码存储部分、复位部分、显示部分、报警部分、开锁部分组成,根据实际情况键盘输入部分选择4×4矩阵键盘,显示部分选择字符型液晶显示LCD1602,密码存储部分选用内部存储器来完成。

其原理图如图2-2所示。

图2-2电子密码锁原理图

2.2.1时钟电路设计

时钟电路为单片机产生时序脉冲,单片机所有运算与控制过程都是在统一的时序脉冲的驱动下的进行的,如果单片机的时钟电路停止工作(晶振停振),那么单片机也就停止运行了。

当采用内部时钟时,连接方法如下图所示,在晶振引脚XTAL1(19脚)和XTAL2(18脚)引脚之间接入一个12MHZ晶振,两个引脚对地分别再接入一个电容即可产生所需的时钟信号,电容的容量一般在几十皮法,如33PF。

如图2-3所示。

 

图2-3时钟电路

2.2.2复位电路设计

复位是单片机的初始化操作。

单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。

因而,复位是一个很重要的操作方式。

但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。

该复位电路采用按键电平复位式复位电路。

当单片机已在运行当中时,按下复位键后松开,在复位引脚RET(9脚)脚持续出现24个振荡器脉冲周期(即2个机器周期)的高电平信号将使单片机复位。

也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。

如图2-4所示。

 

图2-4复位电路

2.2.3矩阵键盘设计

为了加强密码的保密性,采用一个4×4的矩阵式键盘可以任意设置用户密码(1-16位长度),从而提高了密码的保密性,同时也能减少与单片机接口时所占用的I/O口线的数目,节省了单片机的宝贵资源,在按键比较多的时候,通常采用这种方法。

其原理图如图2-5所示。

 

图2-5矩阵键盘

每一行与每一列的交叉处不相同,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N根行线与M根列线,即可组成具有N×M个按键的矩阵键盘。

在这种行列式矩阵键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。

当确认有按键按下后,下一步就是要识别哪一个按键被按下。

对键的识别方法通常有两种:

一种是行扫描查询法;另一种是速度较快的线反转法。

此系统中,我们采用线反转法。

首先辨别键盘中有无按键被按下,在单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。

具体方法是:

向行线输出全扫描字00H,把全部列线置成低电平,然后将列线的电平状态读入累加器A中。

如果有按键被按下,总会有一根行线电瓶被拉至低电平从而使行线不全为1。

判断键盘中哪一个按键被按下通常是通过将列线逐列至低电平后,检查行输入状态来实现的。

方法是:

依次给列线送低电平,然后检查所有行线状态,如果全为1,则所按下的按键不在此列;如果不全为1,则所按下的按键必在此列,而且是在与零电平行线相交的交点上的那个按键。

按键的操作面板共计10个数字键和6个功能键,键盘侧面还有一个微型蜂鸣器。

键盘侧面还有一个蜂鸣器,每操作一次,它便发出声音,提示操作成功。

10个数字键用来输入密码,另外6个功能键分别是:

A查看键、B设置新密码键、C退格键、D返回键、E确认/退出键和F开启键。

其中退格键的功能是当输入密码错误的时候,清除前面已经输入的数据,重新输入。

确认键的功能是确认输入的密码。

开启键是切换到密码输入状态,输密码前需按该键才能开始输入密码。

按“F”键启动进入输入密码程序,按住“F”键不放3秒以上后进入输入密码状态。

在输入密码状态下,0-9数字键为有效键,有时间和次数限制功能:

只有三次输入密码机会,每次限制在10秒内完成,输入密码有误或每次输入密码超时,则被认为是密码输入错误。

当3次输入都错误时,程序将返回起始状态。

密码输入正确后,继电器吸合,表示锁被打开。

在密码输入正确的情况下,程序进入查看密码和修改密码状态,按“E”键退出查看密码状态。

按“B”键进入重新设置密码状态,在输入密码时,如发现输入有误,可按“C”删除后,重新输入,按“E”确认后,程序退出修改密码状态。

按“D”键或等待10秒后程序退出修改密码和查看密码状态,回到起始状态。

程序内定密码为:

1,送电开机时,只要输入内定密码便可开门,这样可预防停电后再送电时无密码可用。

当密码输入错误或密码输入时间超过规定的时间时,蜂鸣器报警。

键盘的功能如表2-1所示。

表2-1按键功能表

按键

键名

功能说明

0-9键

数字键

输入密码

A键

查看键

查看密码

B键

设置新密码键

设置新密码

C键

退格键

退格删除

D键

返回键

返回到开始界面

E键

F键

确认/退出键

开启键

确认/退出

开启密码输入

2.2.4报警控制电路

该电路采用单频音报警电路,实现单频音报警的接口电路比较简单,其发音元件通常可采用压电蜂鸣器,当在蜂鸣器两引脚上加3~15V直流工作电压,就能产生3kHZ左右的蜂鸣振荡音响。

压电式蜂鸣器结构简单、耗电少,更适于在单片机系统中应用。

压电式蜂鸣器,约需10mA的驱动电流,可在某端口接上一只三极管和电阻组成的驱动电路来驱动,P.3.1接三极管基极输入端,当P3.7输出高电平“1”时,三极管导通,蜂鸣器的通电而发音,当P3.1输出低电平“0”时,三极管截止,蜂鸣器停止发音。

其原理图如图2-6所示。

 

 

图2-6报警控制电路

2.2.5液晶显示电路

本设计的显示电路是为了给使用者以提示而设置的为了达到界面友好的目的,显示部分由液晶显示器LCD1602取代普通的数码管完成。

开锁时,按下键盘上的开锁按键后,利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。

当密码输入完成时,按下确认键,如果输入的密码正确的话,LCD显示“IUPUTRIGHT”,单片机其中P3.0引脚会输出低电平,使三极管T2导通,电磁铁吸合,继电器开关跳转,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“IUPUTERROR”,P3.0输出的是高电平,电子密码锁不能打开。

通过LCD显示屏,可以清楚地判断出密码锁所处的状态。

电路图如图2-7所示。

 

图2-7显示电路

2.3系统软件设计

系统的软件设计采用汇编语言编码。

设计方法是先用文本编辑器编写源码,然后用软件KeilC51编译,如果没有错误,可连接生成.HEX格式的文件(需事先在KeilC51中设置)。

如果有错误则无法连接,但可在生成的.OBJ文件中找到代码错误的地方,便于修改。

当然也可以直接在Keil中编码。

生成的HEX文件是记录文本行的ASCII文本文件,在HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。

HEX文件经常被用于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用HEX文件。

系统的主程序如图2-8所示。

由于用户在使用系统的过程中,可能在任何时刻按下任何按键,而程序都必须对此作出正确响应。

 

 

图2-8系统主流程图

2.3.2初始化及按盘识别程序

如图2-9所示,系统的初始化包括堆栈起始地址的设定,定时/计数器的设定,液晶显示模式的设定,密码缓冲区的初始化,一些自定义数据空间的初始化等操作。

系统初始化并读取密码完成后,液晶显示“PASSWORDCONTROL”,提示用户可以输入密码。

此时程序即不断测试按键,检查是否有按键被按下。

如果有,则进行按键识别;如果没有按键按下,或者按下的按键没有被识别,R3赋值0FFH,并跳转至按键测试。

实际程序运行时,绝大部分时间都在测试按键,等待用户输入。

图2-9初始化及按键识别流程图

2.3.3开锁程序

首先LCD初始化,输入密码,密码正确则使开锁电路动作,引脚P2.3得到低电平使发光二极管灯亮,开锁。

开锁程序流程图如图2-10所示。

 

图2-10开锁流程图

2.3.4修改密码程序

如图2-11所示,可以看出,改密键的处理流程跟开锁键类似,都需检查密码是否正确,错误的话,提示重新输入,只有输入密码正确才可以进行改密。

然后再按更改键,密码更改程序被调用,进而更改密码,此过程,LCD都会显示信息。

图2-11修改密码流程图

2.3.5LCD显示程序

液晶显示子程序在每次更新显示内容时都会被调用,其流程如图2-12所示。

图2-12LCD显示子程序流程图

每次更新显示内容前,需清显示清空LCD原先的显示内容,清屏指令的指令码为01H,即将P0口赋值01H,然后写入指令寄存器IR。

LCD1602要显示的内容是根据其控制器内置的字符码表,事先列出要显示的ASCII字符串。

每次送一个字符的ASCII码入P0口,然后写入数据寄存器DR,最后将字符地址加一,LCD1602会将写入的ASCII码对应的字符依次显示出来。

由于显示字符串的长度不尽相同,约定每串字符以00H结尾;程序检测到字符码为00H时,即停止写入,返回。

LCD显示的内容在下次更新前会一直保持。

2.4仿真测试结果

开机后,LCD1602显示如图2-13所示,等待按键输入。

图2-13开机界面

输入密码分两个过程:

首先必须开启密码输入功能才能输入密码,按住“F”键3秒以上才能启动进入输入密码程序,进入输入密码状态,LCD1602显示如图2-14所示:

图2-14输入界面

此时使用矩阵键盘输入密码,在输入密码状态下,0-9为有效数字键。

本系统有时间、次数限制功能,不给别人试探机会:

三次输入密码机会,每次限制在10秒内完成,输入过程如图2-15所示:

图2-15输入过程界面

当密码输入正确后,LCD显示界面如图2-16所示:

 

 

图2-16输入正确的界面

在输入密码正确的基础上可以在密码输入正确的情况下,程序进入查看密码和修改密码状态。

按“B”键进入重新设置状态,在输入新密码时,可以按“C”键删除修改,按“E”确认后,程序退出修改密码状态。

界面如图2-17所示:

图2-17修改密码的界面

按“A”键进入查看密码状态,LCD显示界面如图2-18所示:

图2-18查看密码的界面

在密码输入错误或是超过输入时间时,当错误次数为3次后,LCD回到初始界面,并锁定。

如果错误则LCD显示的界面如图2-17所示:

 

图2-17输入错误的界面

3总结

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。

因此作为21世纪的大学来说掌握单片机的开发技术是十分重要的。

在着手本次课程设计时,通过查阅网络的资料,再加上请教同学和老师,结合生活中对密码锁的功能特性要求,设计出了这一套电子密码锁系统的主要硬件结构和软件结构,基本完成了课题的要求。

本次课程设计所设计的系统简单只能实现一些简单的功能,还有很多不足之处,自己所学的知识和能力有限。

回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不好,尤其是外部中断,定时/计数器和串行口,掌握的不好,应用不熟练。

通过这次课程设计之后,一定把以前所学过的知识重新温故。

电子锁是信息化时代发展的产物,应时而生,我相信随着科技的不断发展,将来的电子锁一定更加完美,更加人性化,更加便宜,更加安全。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,通过这次课设自己也学到了很多东西,在这一周的时间里,感谢魏明哲老师的指导和同学们的帮助,终于游逆而解。

参考文献

[1]何立民主编,单片机中级教程,北京航空航天大学出版社。

[2]丁元杰主编,单片机原理与应用,机械工业出版社。

[3]孙育才主编,MCS-51系列单片微型计算机及其应用,东南大学出版社。

 

附录

BEEPBITP3.1

RELAYBITP3.6

SEC10BIT20H.1

SEC3BIT20H.2

PASS_OKBIT20H.3

PASS_OLDEQU30H

PASS_NEWEQU37H

PASS_DISEQU40H;密码显存单元

COUNTEQU47H;50ms计数单元

SECEQU48H;秒单元

POSEQU49H

BUSYBITP0.7

LCD_RSBITP2.0;LCD控制管脚定义

LCD_RWBITP2.1

LCD_ENBITP2.2

DATAPORTEQUP0;定义LCD的数据端口

LCD_XEQU29H

TIMESEQU2AH

BUSY_CHECKBIT20H.0

ORG0000H

AJMPMAIN

ORG000BH

LJMPTIMER0

ORG0050H

MAIN:

MOVSP,#60H;设置堆栈指针

MOVP0,#0FFH

MOVP1,#0FFH

MOVP2,#0FFH

MOVTMOD,#01H;工作于方式1

MOVTH0,#4CH;50ms定时常数

MOVTL0,#00H

SETBET0

SETBEA

MOVPASS_OLD,#01H;内定密码值

MOVPASS_OLD+1,#01H

MOVPASS_OLD+2,#01H

MOVPASS_OLD+3,#01H

MOVPASS_OLD+4,#01H

MOVPASS_OLD+5,#01H

ACALLLCD_INIT;LCD初始化

MAIN1:

CLRTR0

CLRSEC3

CLRSEC10

CLRPASS_OK

MOVCOUNT,#00H

MOVSEC,#00H

SETBRELAY;继电器释放

ACALLMENU1

ACALLSTART_IN

MOVR4,#03H;3次输入密码机会

MAIN2:

ACALLPASS_IN

ACALLPASS_COMP

MOVR5,#100;延时1s

ACALLDELAY

JBPASS_OK,MAIN3

DJNZR4,MAIN2

AJMPMAIN1

MAIN3:

ACALLPASS_LOOK

ACALLCHANGE_PASS

JBSEC10,MAIN4

ACALLKEY_SCAN

CJNEA,#0DH,MAIN3;判是否"D"按下?

MAIN4:

ACALLBEEP_BL

AJMPMAIN1

;菜单1显示子程序(PASSWORDCONTROL)

;(LEARNBYHEART)

MENU1:

MOVB,#00H

MOVDPTR,#INFO1;指针指到信息1

ACALLW_STRING1

MOVB,#00H

MOVDPTR,#INFO4;指针指到信息4

ACALLW_STRING2

RET

;菜单2显示子程序(INPUTPASSWORD)

;(PASSWORD------)

MENU2:

MOVB,#00H

MOVDPTR,#INFO3;指针指到信息3

ACALLW_STRING1

MOVB,#00H

MOVDPTR,#INFO2;指针指到信息2

ACALLW_STRING2

RET

;菜单3显示子程序(LOOKPASSWORD)

;(PASSWORD------)

MENU3:

MOVB,#00H

MOVDPTR,#INFO7;指针指到信息7

ACALLW_STRING1

MOVB,#00H

MOVDPTR,#INFO2;指针指到信息2

ACALLW_STRING2

RET

;菜单4显示子程序(CHANGEPASSWORD)

;(PASSWORD------)

MENU4:

MOVB,#00H

MOVDPTR,#INFO8;指针指到信息1

ACALLW_STRING1

MOVB,#00H

MOVDPTR,#INFO2;指针指到信息2

ACALLW_STRING2

RET

;信息字符串表

INFO1:

DB"PASSWORDCONTROL",0

INFO2:

DB"PASSWORD------",0

INFO3:

DB"INPUTPASSWORD",0

INFO4:

DB"LEARNBYHEART",0

INFO5:

DB"IUPUTRIGHT",0

INFO6:

DB"IUPUTERROR",0

INFO7:

DB"LOOKPASSWORD",0

INFO8:

DB"RESETPASSWORD",0

;矩阵键盘键值查找程序

;键值存入R3

KEY_SCAN:

MOVP1,#0F0H;置列线为0,行线为1

NOP

MOVA,P1;读入P1口状态

ANLA,#0F0H;保留高4位

MOVB,A;保存数据

MOVP1,#0FH;置列线为1,行线为0

NOP

MOVA,P1;读入P1口状态

ANLA,#0FH;保留低4位

ORLA,B;高四位与低四位重新组合

CJNEA,#0FFH,KEY_IN1;0FFH为末按键

AJMPKEY_END

KEY_IN1:

MOVB,A;保存键值

MOVDPTR,#KEYTABLE;置键编码表首址

MOVR3,#0FFH;

KEY_IN2:

INCR3;查表次数加1

MOVA,R3

MOVCA,@A+DPTR;取出键码

CJNEA,B,KEY_IN3;比较

MOVA,R3;找到,取次数值

AJMPKEY_END

KEY_IN3:

CJNEA,#00H,KEY_IN2;继续查;00H为结束码

KEY_END:

RET

;键编码表

KEYTABLE:

DB0EEH,0EDH,0EBH,0E7H,0DEH

DB0DDH,0DBH,0D7H,0BEH,0BDH

DB0BBH,0B7H,07EH,07DH,07BH

DB077H,00H;00H为结束码

;密码显示子程序

PASS_PLAY:

MOVR0,#PASS_OLD;存放数据首地址

MOVR2,#06H;显示6组数据

MOVLCD_X,#09H;第9列

ACALLSET_X2;第二行

P_PLAY:

MOVA,@R0;取显示数据

ADDA,#30H;转换为ASCII码

ACALLWDATA;写数据,显示

INCR0;修改存放数据地址

DJNZR2,P_PLAY

RET

;启动输入子程序

;按F键大于3秒,方可退出此程序

START_IN:

CLRSEC3;清3s标志位

MOVCOUNT,#00H;清中断计数单元

MOVSEC,#00H

S_IN1:

ACALLKEY_SCAN

CJNEA,#0FH,S_IN1;"F"键

SETBTR0;启动TIME

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

当前位置:首页 > IT计算机

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2