课程设计单片机.docx
《课程设计单片机.docx》由会员分享,可在线阅读,更多相关《课程设计单片机.docx(27页珍藏版)》请在冰豆网上搜索。
课程设计单片机
电子密码锁设计说明书
目录
一.绪论
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