课程设计单片机.docx

上传人:b****7 文档编号:10263836 上传时间:2023-02-09 格式:DOCX 页数:27 大小:649.02KB
下载 相关 举报
课程设计单片机.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.1设计背景

1.2设计目标

二.设计原理

2.1原理论述

2.2设计思路

三.总电路及各模块电路设计

3.1键盘电路设计

3.2LED显示电路

3.3开锁电路

3.4报警电路

3.5掉电存储电路

3.6复位电路

四.程序设计

4.1主程序流程图:

4.2各子程序流程图:

4.3源程序.

五.设计体会

六.参考文献

 

一.绪论

1.1设计背景

随着现今人们生活水平的提高,安全意识亦随之加强,对锁的要求也就越来越高。

人们希望锁既要能够安全可靠,防盗性高,又要使用方便。

常见的锁有普通机械锁、机械密码锁、电磁卡锁、指纹(虹膜)锁等。

普通的机械锁极容易被强行破坏,安全系数不高;机械密码锁虽然安全系数高但造价相对较高,目前在保险柜上应用较多;电磁卡锁由于磁卡信息极易受外界干扰而失磁,导致无法开锁;指纹锁虽安全性很好,但会因手指划伤虹膜充血等收到限制。

通过以上分析,我们可以得出结论:

传统密码锁或多或少存在一些不足从而降低了其保密的安全性,因此研究一种新型的密码锁以满足现今用户需求势不可挡。

随着电子技术的发展,人们将电子芯片跟传统机械锁结合起来设计成一种新型的密码锁,即电子密码锁。

在西方发达国家,密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于智能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。

1.2设计目标

本文主要讲述一种基于89C51单片机的电子密码锁的设计过程,所设计的密码锁具有以下功能:

开机输入密码,密码正确则电磁锁打开;如果第一次输入的密码不正确,允许再输入两次密码,在这个过程中,如果密码正确则电子锁打开,如果在这个过程中密码依旧不正确,则锁定键盘的输入功能,并且蜂鸣器报警。

本设计的特点如下:

安全可靠,用户想要打开锁,必先通过提供的键盘输入正确的密码才能将锁打开,密码输入错误有提示,为了提高安全性,当密码输入错误三次将报警。

密码可以由用户自己修改设定,锁打开后才能修改密码。

在输入新密码后,需确认,以防止误操作。

二.设计原理

2.1原理论述

采用以AT89C51为核心的单片机控制方案。

本设计选用89C51单片机作为核心元件,利用单片机灵活的编程设计、丰富的I/O端口资源及其控制的准确性,实现基本的密码锁功能以及调电存储、报警等功能。

在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接AT24C02芯片用于密码的存储,外接六位七段数码管显示器用于显示作用。

当用户需要开锁时,按键盘的数字键0-9输入密码。

密码输完后按下确认键,如果密码输入正确则开锁,不正确显示密码错误重新输入密码,当三次密码错误则发出报警;开锁后,用户可根据自身需求进行密码修改,新密码输入无误后按确认键使新密码将得到存储,密码修改成功。

其原理如图所示。

 

密码错误报警电路

矩阵

键盘

控制

AT89C51

单片机

AT24C02掉电存储

显示电路

“看门狗”X5045

 

单片机控制方案

2.2设计思路

输入密码用矩形键盘,包括数字键和功能键。

LED数码管显示输入密码,用7447驱动数码管发光显示密码,用74LS138控制各位显示器分时进行显示。

用继电器驱动门锁动作。

输入密码错误次数超过3次,系统报警。

打开电源后,显示器显示“000000”,设原始密码为“000000”,只要输入此密码便可开门。

按“#”键,清除显示器为“000000”。

欲重新设定密码,先输入密码再按“*”键。

输入密码,再按“D”键。

若密码与设定密码相同,则开门。

否则显示器清为“000000”。

软件的设计主要包括键盘键值的读取,LED显示程序,密码比较程序,报警程序以及掉电储存程序等。

三.总电路及个模块电路设计

本设计电路原理图、元件清单如下所示。

图1电路原理图

 

名称

代号

规格或型号

数量

单片机

U1

AT89C51

1

数码管译码器

U2

SN7447AN

1

38译码器

U3

74LS138

1

非易失存储器

U4

24C02C-E/P

1

看门狗芯片

U5

X5045

1

晶振

Y1

12SMXA

1

7段数码管

DS1—DS6

DpyRed-CA

6

电容

C11—C12

Cap

2

三极管

Q1—Q8

PNP

8

继电器

K1

Relay-SPST

1

蜂鸣器

LS1

Speaker

1

按键

0—9、*、#、A、B、C、D、S

SW-PB

17

电阻

R01—R37

Res2

25

图2元器件清单

3.1键盘电路设计

本设计采用矩阵式键盘,可减少键盘与单片机接口时所占用的I/O线的数目。

其原理如图2所示。

图2矩阵键盘

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

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

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

本设计采用的是逐行扫描查询法,对照图2所示的4×4键盘,说明键盘中每个按键的功能。

具体的功能设计如表1所示:

表1按键功能

按键

键名

功能说明

0-9键

数字键

输入密码

*键

重设密码键

设定新密码

D键

确定返回键

比较密码

#键

清除键

使显示器清零

3.2LED显示电路

本设计中显示电路采用串行显示的方式,只使用单片机的一个串行口,利用7447驱动数码管发光显示密码,74LS138控制位选信号,就可以完成单片机的显示功能,显示电路的电路原理图如图3所示,各数码管采用共阳极方式连接,当74LS138输出为0时,对应三极管导通,数码管发光显示数码。

图3LED显示电路

3.3开锁电路

在本设计中,采用继电器驱动门锁的开启/关闭动作,其电路原理图如4所示。

当单片机P2.1口输出为0时,三极管导通,继电器通电,此时门锁开启。

图4开锁电路

3.4报警电路

本设计采用压电式蜂鸣器,工作时约需要100mA驱动电流,其电路原理图如5所示。

当单片机P2.0口输出为0时,蜂鸣器产生蜂鸣音;输出为1时,蜂鸣器不发声。

图5报警电路

3.5掉电存储电路

本设计采用AT24C02完成其掉电存储功能,其电路原理图如图6所示。

当SDA=1,SCL=1时,处于总线空闲状态;当SCL=1,SDA为下降沿状态时,开始传送数据;当SCL=1,SDA为上升沿状态时,停止传送数据。

图6掉电存储电路

3.6复位电路

本设计的复位电路由“看门狗”电路以及手动复位电路两部分组成,采用X5045芯片,其电路原理图如图7所示。

所采用“看门狗”复位即为,当程序运行时,若规定时间内没有收到来自单片机的清除信号(“喂狗”现象),则系统会强制复位,保障系统在受到干扰时能够维持正常工作状态。

图7复位电路

 

四.程序设计

4.1主程序流程图:

图8主程序流程图

 

4.2各子程序流程图:

图9键盘模块程序流程图

图10显示模块程序流程图

 

图11开锁及报警模块程序流程图

图12掉电储存模块程序流程图

图13“看门狗”模块程序流程图

4.3源程序

ORG00H

;*********************************存储器端口定义***************************************

存储器SCLEQUP2.3

存储器SDAEQUP2.2

存储器WPEQUP2.4

密码存放地址EQU100

;*********************************存储器端口定义****************************************

写一个字节到24C02:

MOVR7,#8

写一个位到24C02:

CLR存储器SCL

RLCA

MOV存储器SDA,C

SETB存储器SCL

DJNZR7,写一个位到24C02

RET

写24C02起始位:

SETB存储器SCL

SETB存储器SDA

CLR存储器SDA

CLR存储器SCL

RET

读24C02从应答:

CLR 存储器SCL

SETB存储器SDA

SETB存储器SCL

MOVC,存储器SDA

CLR存储器SCL

RET

写24C02无应答:

SETB存储器SDA

SETB存储器SCL

CLR存储器SCL

RET

;**********************************存储器端口定义***************************************

A写入24C02:

PUSHACC

CALL 写24C02起始位

MOVA,#10100000B

CALL 写一个字节到24C02

CALL 读24C02从应答

MOV A,R6

CALL写一个字节到24C02

CALL读24C02从应答

POPACC

CALL写一个字接到24C02

CALL读24C02从应答

CLR存储器SDA

DB0,0

SETB存储器SCL

DB0,0

SETB存储器SDA

读24C02应答检测:

CALL写24C02起始位

MOVA,#10100000B

CALL写一个字节到24C02

CALL读24C02从应答

JC读24C02应答检测

写24C02停止位:

CLR存储器SDA

DB0,0

SETB存储器SCL

DB0,0

SETB存储器SDA

RET

;**********************************存储器端口定义*************************************

读24C02到A;

PUSHACC

CALL写24C02起始位

MOVA,#10100000B

CALL写一个字到24C02

CALL读24C02从应答

POPACC

CALL写一个字节到24C02

CALL读24C02从应答

CALL读24C02起始位

MOVA,#10100000B

CALL写一个字节到24C02

CALL读24C02从应答

MOVR7,#8

读一个位从24C02:

SETB存储器SCL

DB0,0,0

MOVC,存储器SDA

CLR存储器SCL

RLCA

DJNZR7,读一个位从24C02

CALL写24C02无应答

JMP写24C02停止位

;***************************************主程序入口*************************************

MOVR5,#00H

MOVR7,#00H

DJNZR7,$

MOVR6,#06H

MOVR1,#35H

MOVR4,#08H

;******************************将000000读入片内RAM30H到35H单元**************************

L1:

MOVA,R6

ADDA,#密码存放地址-1

CALL读24C02到A

MOV@R1,A

DECR1

DJNZR6,L1

START:

ORLP2,#0FFH;

MOVR4,#06H

MOVR0,#40H

CLEAR:

MOV@R0,#00H;清除密码单元内容,使其初值为0

INCR0

DJNZR4,CLEAR

L2:

MOVR3,#0F7H

MOVR1,#00H

L3:

MOVA,R3

MOVP1,A

MOVA,P1

MOVR4,A

SETBC

MOVR5,#04H

L4:

RLCA

JNCKEYIN

INCR1;R1标记键盘上的键

DJNZR5,L4

CALLDISP

MOVA,R3

SETBC

RRCA

MOVR3,A

JCL3

JMPL2

;*****************************************读键盘值*****************************************

KEYIN:

MOVA,R1

XRLA,#0FH

JZX4;确认键跳到比较密码

MOVR7,#10

D1:

MOVR6,#24

DJNZR6,$

DJNZR7,D1

D2:

MOVA,P1;按一次键只输入一次值

XRLA,R4

JZD2

MOVA,R1;从向量表读取键值

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVR7,A

MOVA,R7

XRLA,#0BH

JZSTART;清除屏幕使其为0

MOVA,R7

XCHA,40H;移位显示

XCHA,41H

XCHA,42H

XCHA,43H

XCHA,44H

XCHA,45H

CALLDISP

JMPL2

X4:

JMPCOMP

;******************************************显示程序*****************************************

DISP:

MOVR0,#45H;

DISP1:

MOVA,@R0

ADDA,#50H

MOVP0,A

CALLDELAY

DECR0

MOVA,@R0

ADDA,#40H

MOVP0,A

CALLDELAY

DECR0

MOVA,@R0

ADDA,#30H

MOVP0,A

CALLDELAY

DECR0

MOVA,@R0

ADDA,#20H

MOVP0,A

CALLDELAY

DECR0

MOVA,@R0

ADDA,#10H

MOVP0,A

CALLDELAY

DECR0

MOVA,@R0

ADDA,#00H

MOVP0,A

CALLDELAY

RET

;******************************************密码比较*****************************************

COMP:

MOVR1,#45H

MOVR0,#35H

MOVR2,#06H

C1:

MOVA,@R1

XRLA,@R0

JNZC3

DECR1

DECR0

DJNZR2,C1

CLRP2.0

;**************************开锁后的程序,稍有改动,基本重复开锁******************************

START_1:

ORLP2,#0FFH;

MOVR4,#06H

MOVR0,#40H

CLEAR_1:

MOV@R0,#00H;清除密码单元内容,使其初值为0

INCR0

DJNZR4,CLEAR_1

L2_1:

MOVR3,#0F7H

MOVR1,#00H

L3_1:

MOVA,R3

MOVP1,A

MOVA,P1

MOVR4,A

SETBC

MOVR5,#04H

L4_1:

RLCA

JNCKEYIN

INCR1;R1标记键盘上的键

DJNZR5,L4_1

CALLDISP_1

MOVA,R3

SETBC

RRCA

MOVR3,A

JCL3_1

JMPL2_1

KEYIN_1:

MOVA,R1

XRLA,#0BH

JZCLOCK;关闭锁

MOVA,R1

XRLA,#0FH

JZX_4;确认/返回键

MOVR7,#10

D1_1:

MOVR6,#24

DJNZR6,$

DJNZR7,D1_1

D2_1:

MOVA,P1;按一次键只输入一次值

XRLA,R4

JZD2_1

MOVA,R1;从向量表读取键值

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVR7,A

XRLA,#0AH

JZSET0_1;跳到修改密码

MOVA,R7

XRLA,#0BH

JZSTART_1;清除屏幕使其为0

MOVA,R7

XCHA,40H;移位显示

XCHA,41H

XCHA,42H

XCHA,43H

XCHA,44H

XCHA,45H

CALLDISP_1

JMPL2_1

JMPDISP_1

X_4:

JMPSTART

;**********************************开锁后的显示程序************************************

DISP_1:

MOVR0,#45H;

DISP1_1:

MOVA,@R0

ADDA,#50H

MOVP0,A

CALLDELAY

DECR0

MOVA,@R0

ADDA,#40H

MOVP0,A

CALLDELAY

DECR0

MOVA,@R0

ADDA,#30H

MOVP0,A

CALLDELAY

DECR0

MOVA,@R0

ADDA,#20H

MOVP0,A

CALLDELAY

DECR0

MOVA,@R0

ADDA,#10H

MOVP0,A

CALLDELAY

DECR0

MOVA,@R0

ADDA,#00H

MOVP0,A

CALLDELAY

RET

;*****************************************修改密码*****************************************

SET0_1:

CLR2.4

MOVR2,#06H

MOVR0,#45H

MOVA,R2

ADDA,#密码存放地址-1

MOVR6,A

MOVA,R0

CALLA写入24C02

DECR0

DJNZR2,写入密码

SETBP2.4

CALLDELAY

JMPL2_1

CLOCK:

CLPP2.0

LJMPSTART;关锁后跳回初始位置

;*************************************错误报警*******************************************

C3:

INCR5;

MOVA,R5

MOVR5,A

CJNER5,#03H,C4;错误三次报警

CLRP2.1;错误三次,蜂鸣器报警

CALLDELAY

CALLDELAY

CALLDELAY

CALLDELAY

CALLDELAY

CALLDELAY

CALLDELAY

CALLDELAY

CALLDELAY

CALLDELAY

SETSP2.1

MOVR5,#00H

C4:

JMPL2_1

;*************************************延时程序**********************************************

DELAY:

MOVR7,#C3

D3:

MOVR6,#248

DJNZR7,D3

RET

ORG300H

TABLE:

DB01H02H03H0CH

DB04H05H06H0DH

DB07H08H09H0EH

DB0AH00H0BH0FH

EN

五.设计体会

课程设计是培养学生综合运用所学的知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察的过程。

随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域,在生活可以说得是无处不在。

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

六.参考文献

[1]贺哲荣,甄旭MCS-51系列单片机实用编程88例中国电力出版社2011

[2]李朝青单片机原理及接口技术北京北京航空航天大学出版社2002

[3]陈明荧89C51单片机课程设计实训教材北京清华大学出版社2004

[4]叶启明单片机制作的新型安全密码锁[J]家庭电子2000第六期:

24-27

[5]张立科单片机典型外围器件及应用实例北京人民邮电出版社2006

 

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

当前位置:首页 > 工程科技 > 电子电路

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

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