单片机--电子密码锁设计报告

《单片机原理及应用》

课程设计报告

目录

一、课程设计目的... 3

二、课程设计要求... 3

三、电子密码锁的设计... 4

1.设计任务:... 4

2.设计要求:... 4

3.设计提示:... 4

4.系统设计原理及设计框图:... 4

(1)设计原理 : 4

(2)系统设计框图:... 5

5.所用元器件简介及管脚说明:... 5

(1)AT89C51芯片简介:... 5

(2)AT89C51管脚的说明:... 6

6.各模块电路设计:... 7

(1)44的矩阵键盘电路的设计说明及原理图... 7

(2)LCD灯和蜂鸣器的设计说明及原理图... 8

7.工作原理说明:... 8

8.软件的仿真过程:... 9

9.程序流程图:... 10

四、课程设计总结... 11

五、参考文献... 12

六、附件... 13

1. 系统整体电路原理图: 13

2. 源程序源代码清单:... 13

一、课程设计目的

单片机原理及应用课程设计作为独立的教学环节,是自动化及相关专业集中实践性环节系列之一,是学习完《单片机原理及应用》课程后,并在进行相关课程设计基础上进行的一次综合练习。

单片机课程设计过程中,通过查阅资料、接口设计、程序设计、安装调试等环节,完成一个基于MCS-51系列单片机,涉及多种资源应用,并具有综合功能的小应用系统设计。使我们不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件等方面的知识进一步加深认识,同时在软件编程、调试、相关仪器设备和相关软件的使用技能等方面得到较全面的锻炼和提高。使我们增进对单片机的感性认识,加深对单片机理论方面的理解,加深单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O接口、串行口等。使我们了解和掌握单片机应用系统的软硬件设计过程、方法及实现,强化单片机应用电路的设计与分析能力。提高我们在单片机应用方面的实践技能和科学作风;培育我们综合运用理论知识解决问题的能力。

二、课程设计要求

课程设计应充分调动我们的积极性和能动性,重视自学能力的培养。根据课程设计具体课题安排时间,确定课题的设计、编程和调试内容,分团队开展课程设计活动,按时完成每部分工作。课程设计集中在实验室进行。在课程设计过程中,坚持独立完成,实现课题规定的各项指标,并写出设计报告。

要求我们自己调研、设计系统功能、划分软硬件功能、选择器件,用Proteus或Protel软件在PC机上完成硬件原理图设计。使用Keil或相关编程软件,完成软件设计。然后使用通用单片机实验开发系统,或者使用Proteus或Multisim仿真软件在PC机进行系统仿真,调试电路和修改调试程序。烧录程序,对整个系统做试运行,有问题再进一步修改调试,直至达到设计的要求和取得满意的效果。最后编写系统说明书,其内容主要包括系统的功能介绍、使用范围、主要性能指标、使用方法、注意事项等。

三、电子密码锁的设计

1.设计任务:

基于MCS-51系列单片机AT89C51,设计一个通过按键输入开锁的电子密码锁。

2.设计要求:

a.通过44的矩阵键盘输入或设定开锁密码;

b.可以通过LCD查看已输入的字符个数【显示为******】;

c.使用串行EEROM24C02A保存用户设置的密码;

d.使用LED和蜂鸣器指示密码锁的状态;

e.@可以通过特殊的按键方法清除用户密码【如同时按下特定的多个键】;

f.☆其他功能。

3.设计提示:

a.本设计使用单片机,4*4键盘蜂鸣器,16*2 字符型LCD,串行EEROM24C04;

b.编写键盘控制程序,有键按下时,判断键值,进行相应的按键处理,实现电子密码锁功能;

c.参考EEROM24C04A说明书,编写读/写程序,完成密码的设置修改和读出;

d.参考Protuse仿真效果图:

4.系统设计原理及设计框图:

(1)设计原理 :

本设计主要由单片机系统、矩阵键盘、LED显示和报警系统组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低 电平传到开锁电路或者报警电路控制开锁还是报警。

(2)系统设计框图:

图1 系统设计框图

5.所用元器件简介及管脚说明:

(1)AT89C51芯片简介: 

AT89C51是一种低功耗、高性能的片内含有4KB快闪可编程/擦除只读存储器的8位CMOS微控制器,使用高密度、非易失存储技术制造,并且与80C51引脚和指令系统完全兼容。宽工作电压范围:Vcc可为2.7V到6V全静态工作;可从0Hz至16MHz 程序存储器具有3级加密保护 128*8位内部RAM 32条可编程I/O线、两个16位定时器/计数器、中断结构具有5个中断源和2个优先级、可编程全双工串行通道、空闲状态维持低功耗和掉电状态保存存储内容。AT89C51单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。如果按功能划分,它由如下功能部件组成,即微处理器、数据存储器、程序存储器、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器。它们都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式。  微处理器、数据存储器、程序存储器、并行I/O口、串行口、定时器/计数器、中断系统各部分功能及说明类似于8051单片机内部结构说明。特殊功能寄存器共有21个,用于对片内的各功能的部件进行管理、控制、监视。实际上是一些控制寄存器和状态寄存器,是一个具有特殊功能的RAM区。

(2)AT89C51管脚的说明: 

VCC:供电电压。 

GND:接地。 

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。   P3口也可作为AT89C51的一些特殊功能口。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。   

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 

XTAL2:来自反向振荡器的输出。

6.各模块电路设计:

(1)44的矩阵键盘电路的设计说明及原理图

本设计采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。本设计中使用的这个44键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。键盘的每个按键功能在程序设计中设置。

图2  44的矩阵键盘电路的原理图

(2)LCD灯和蜂鸣器的设计说明及原理图

LED灯和蜂鸣器主要用于报警及开锁指示电路,密码正确时,发声直接并开锁,当密码输入错误时,单片机的P2.6引脚为高电平,蜂鸣器发声报警。当密码输入正确时,P2.6为低电平,LED灯灭,蜂鸣器不发出报警。

7.工作原理说明:

系统启动后,LCD显示如下:

图2  LCD显示图

按下操作键A或B操作如下:

操作键A:设置新的6位数字(0~9)密码。

操作键B:输入6位数字(0~9)密码并检查。

当按B时,LED1灯亮显示输入6位数字密码。输完6位密码时,LED1灯熄灭,表示密码输入完毕,再按确认键,密码开始核对,核对通过后,LED4灯亮,表示锁已经打开。当密码输入错误时,蜂鸣器发出警报,LED3灯亮。

当按下A时,LED2灯亮。输入6位原始密码后LED2灯熄灭,按确认键,密码核对,如果密码错误,报警提示。如密码正确,LED2灯亮,密码修改完成,恢复到起始显示状态。

8.软件的仿真过程:

PROTEUS是一款单片机系统仿真工具,利用该软件可以人工设计硬件电路接线并模拟单片机工作过程,当向选定单片机加载入正确的程序时就可以模拟实验结果。Proteus仿真时单片机需要加载程序,加载程序为.HEX文件。本设计利用Keiluv4, 在新建Keil项目时选择AT89C51单片机作为CPU,将源程序导入,在“Options For Target”对话窗口中,选中“Output”选项中的“Create HEX File”,编译链接后就可以生成HEX文件,对单片机设置完毕后就可以开始仿真了。通过Keil与Proteus的联合调试就可以得到结果。

                                图3 系统仿真图

9.程序流程图:

                                图3  程序流程图

四、课程设计总结

这次通过对电子密码锁的设计与仿真过程,不仅加强了我们动手、思考和解决问题的能力,也培养了我们的实践能力。我们将书本上学到的知识运用到本次的课程设计中,加强了我们的理解,也开阔了我们的视野。在设计过程中我们先后利用keil软件进行编程、Proteus进行仿真,最后再利用仿真进行检查看程序是否能显示其功能。在编程和仿真过程中遇到了很多的问题,但通过不断查阅资料和反复修改,终于编程和把电路图设计好了。在这个过程中让我进一步深刻的学习各种软件的利用以及各种软件给我们带来的便利。特别是proteus在没有实物的情况下进行仿真进行程序的检查看是否能现实功能。 

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正把所学的应用到生活中去,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。所以还得继续努力,进一步提升自己。

这次的课程设计对我来说是一种挑战更是一种学习,也为我们提供了深入探索的机会。在遇到各种问题时必须依靠自己来解决,只有不断学习充实自己才能不断完善自己的不足,在今后的学习中必须更加的努力,加强自己的实践动手能力。

五、参考文献

[1] 吴亦锋,陈德为.《单片机原理与接口技术》.电子工业出版社,2010.

[2] 张文利.《微机原理及单片机接口技术》.中国科学技术大学出版社,2007 .

[3] 杨素行.《模拟电子技术》. 高等教育出版社,2006.

[4] 黄仁欣,马彪副主编.《单片机原理及运用技术》.北京:清华大学出版社,2005.

[5]姚国林.《单片机原理与应用技术》.北京:清华大学出版社,2009.

六、附件

1. 系统整体电路原理图:

                           图4 系统整体电路图

2. 源程序源代码清单:

RS BIT P2.2     ;定义LCD的RS引脚由P2.2引脚控制

       RW BIT P2.1     ;定义LCD的RW引脚由P2.1引脚控制

       E  BIT P2.0     ;定义LCD的E引脚由P2.0引脚控制

       ORG  0000H

       AJMP START

       ORG  0050H

START: MOV   P0, #01H   ;清除LCD屏幕

       ACALL ENABLE

       MOV   P0,#38H    ;设置LCD为8位点阵方式

       ACALL ENABLE

       MOV   P0,#0FH    ;开显示

       ACALL ENABLE  

       MOV   P0,#06H    ;移动光标

       MOV   50H,#1

       MOV   51H,#2

       MOV   52H,#3

       MOV   53H,#4

       MOV   54H,#5

       MOV   55H,#6      ;设置6位初始密码

MAIN:  LCALL ENABLE

       LCALL KSXSHI      ;开始显示

  AA:  LCALL KEY         ;调用键盘扫描程序

       CJNE  A,#10,BB    ;若不为A键,则跳转为判断是否为B键

  LP:  ACALL ANAHX     

       AJMP  MAIN

  BB:  CJNE  A,#11,AA    ;若不为B键则重新扫描

       ACALL ANBHX

       LJMP  MAIN

ENABLE:CLR   RS          ;LCD控制指令

       CLR   RW

       CLR   E

       LCALL DELAY

       SETB  E

       RET

;********键盘编码部分*********

KEY:   MOV   P1,#0F0H

KEY0:  MOV   A,P1

       CPL   A

       ANL   A,#0F0H     

       MOV   R1,A         ;读取列线数据并存入R1中

       JZ    KEY          ;若无键按下,则继续扫描

KEY1:  MOV   P1,#0FH 

       MOV   A,P1

       CPL   A

       ANL   A,#0FH

       MOV   R2,A         ;读取列线数据并存入R1中

       JZ    KEY          ;若无键按下,则继续扫描

TT:    JBC   F0,WAIT

       SETB  F0

       LCALL DELAY

       SJMP  TT

GRET:  RET

;**********确定按键值***********

WAIT:  MOV   A,P1         ;等待按键释放

       CPL   A

       ANL   A,#0FH

       JNZ   WAIT

KEY2:  MOV   A,R1

       MOV   R1,#03H

       MOV   R3,#03H

       CLR   C

KEY3:  RLC   A

       JC    KEY4

       DEC   R1           ;修正列编号

       DJNZ  R3,KEY3

KEY4:  MOV   A,R2

       MOV   R2,#00H

       MOV   R3,#03H

       CLR   C

KEY5:  RRC   A

       JC    KEY6

       INC   R2           ;修正列编号

       DJNZ  R3,KEY5

KEY6:  MOV   A,R2

       CLR   C

       RLC   A

       RLC   A

       ADD   A,R1         ;将行线和列线相加得到键值

       RET

;**********开始显示效果***********

KSXSHI:MOV   P0,#80H

       ACALL ENABLE

       MOV   DPTR,#TABLE3 

       LCALL WRITE1       ;显示8051   PASSWORD

       MOV   P0,#0C0H

       LCALL ENABLE

       MOV   DPTR,#TABLE2

       LCALL WRITE1       ;显示A  OR  B  KEY

       RET

;**********按A后的操作部分**********

ANAHX: MOV   P0,#80H

       ACALL ENABLE

       MOV   DPTR,#TABLE4  

       LCALL WRITE1       ;显示SET   PASSWORD

       MOV   P0,#0C0H

       LCALL ENABLE

       MOV   DPTR,#TABLE5

       LCALL WRITE1       ;显示  *  *  *  *  * 

       LCALL XG_PASS

       RET

;**********按B后的操作部分**********

ANBHX: MOV   P0,#80H

       ACALL ENABLE

       MOV   DPTR,#TABLE6  ;显示SHU  RU  MI  MA

       LCALL WRITE1

       MOV   P0,#0C0H

       LCALL ENABLE

       MOV   DPTR,#TABLE5  ;显示 *  *  *  *  *

       LCALL WRITE1

       LCALL IP_PASS

       RET

;**********输入6位密码值***********

IP_PASS:MOV  B,#6

        MOV   R0,#40H

  T:    CLR   P2.3

        ACALL KEY

        SETB  P2.3

        MOV   @R0,A         ;将从键盘得到的键值依次存入40H,41H,42H,43H,44H,45H单元

        INC   R0

        DJNZ  B,T           ;循环6次得到6个键值

        ACALL KEY

        CJNE  A,#12,PT      ;将键值和12比较,看是否为确认键

        MOV   A,40H        

        CJNE  A,50H,KK     

        MOV   A,41H

        CJNE  A,51H,KK

        MOV   A,42H

        CJNE  A,52H,KK

        MOV   A,43H

        CJNE  A,53H,KK

        MOV  A,44H

        CJNE  A,54H,KK

        MOV   A,45H

        CJNE  A,55H,KK      ;将密码和初始密码比较,看密码是否正确

        CLR   P2.7          ;密码正确则LED4绿灯亮

        MOV   P0,#80H

        ACALL ENABLE

        MOV   DPTR,#TABLE11

        LCALL WRITE1        ;密码正确,输出LOCK  OPENED!

        MOV   P0,#0C0H

        LCALL ENABLE

        MOV   DPTR,#TABLE5  

        LCALL WRITE1        ;显示 *  *  *  *  * 

        MOV   B,#100

PR:     LCALL DELAY

        DJNZ  B,PR

        SETB  P2.7

PT:     RET

;***********输错密码时显示ERROR***********

KK:    CLR   P2.6        

       CLR   P2.5         ;密码错误,报警并LED3红灯亮

       MOV   P0,#80H

       ACALL ENABLE

       MOV   DPTR,#TABLE10

       LCALL WRITE1       ;密码错误,显示PASSWORD  ERROR!

       MOV   P0,#0C0H

       LCALL ENABLE

       MOV   DPTR,#TABLE5 

       LCALL WRITE1       ;显示 *  *  *  *  * 

       MOV   B,#50

PK:    LCALL DELAY

       DJNZ  B,PK

       SETB  P2.5

       SETB  P2.6

       RET

;************修改密码操纵部分**********

XG_PASS:MOV  P0,#80H

       ACALL ENABLE

       MOV   DPTR,#TABLE9 

       LCALL WRITE1        ;显示INPUT  THE

       MOV   P0,#0C0H

       LCALL ENABLE

       MOV   DPTR,#TABLE8  

       LCALL WRITE1        ;显示OLD  PASSWORD

       MOV   B,#6

       MOV   R0,#30H

YT:    CLR   P2.4           ;红灯LED2亮,表示可以输入密码,6位输入完毕后,灯灭

       ACALL KEY

       SETB  P2.4

       MOV   @R0,A          ;将从键盘得到的键值依次存入40H,41H,42H,43H,44H,45H单元

       INC   R0

       DJNZ  B,YT           ;循环6次得到6个键值

       ACALL KEY

       CJNE  A,#12,XT       ;判断是否为确认键

       MOV   A,30H        

       CJNE  A,50H,KK

       MOV   A,31H

       CJNE  A,51H,KK

       MOV   A,32H

       CJNE  A,52H,KK

       MOV   A,33H

       CJNE  A,53H,KK

       MOV   A,34H

       CJNE  A,54H,KK

       MOV   A,35H

       CJNE  A,55H,KK       ;将从键盘输入的密码与初始密码比较

       MOV   P0,#80H

       ACALL ENABLE

       MOV   DPTR,#TABLE9   

       LCALL WRITE1

       MOV   P0,#0C0H

       LCALL ENABLE

       MOV   DPTR,#TABLE7

       LCALL WRITE1         ;密码正确则显示INPUT THE NEW PASSWORD

       MOV   B,#6

       MOV   R0,#50H

XT1:   CLR   P2.4           ;红灯LED2亮,表示可以输入密码,6位输入完毕后,灯灭

       ACALL KEY

       SETB  P2.4

       MOV   @R0,A          ;将输入的新密码存入原来的旧密码单元

       INC   R0

       DJNZ  B,XT1

       ACALL KEY

       CJNE  A,#12,XT      ;判断是否为确认键

       MOV   P0,#80H

       ACALL ENABLE

       MOV   DPTR,#TABLE1

       LCALL WRITE1

       MOV   P0,#0C0H

       LCALL ENABLE

       MOV   DPTR,#TABLE0  ;显示PASSWORD XIU GAI PASS

       LCALL WRITE1

  XT:  RET

 

;***********写数据***********

WRITE1:MOV   R1,#00H      

 A1:   MOV   A,R1

       MOVC  A,@A+DPTR      ;从键值表中读取键值

       LCALL WRITE2

       INC   R1

       CJNE  A,#00H,A1

       RET

WRITE2:MOV   P0,A

       SETB  RS

       CLR   RW

       CLR   E

       LCALL DELAY

       SETB  E

       RET

DELAY: MOV   R7,#255

 D1:   MOV   R6,#255

D2:    DJNZ  R6,D2

       DJNZ  R7,D1

       RET

TABLE11: DB 4CH,4FH,43H,4BH,20H,20H,20H,4FH,50H,45H,4EH,45H,44H,21H

         DB 20H,21H,00H     ;LOCK  OPENED!

TABLE10: DB 20H,50H,41H,53H,53H,57H,4FH,52H,44H,20H,45H,52H,52H,4FH

         DB 52H,21H,00H     ;PASSWORD  ERROR!

TABLE9:  DB 20H,49H,4EH,50H,55H,54H,20H,20H,20H,20H,54H,48H,45H,20H

         DB 20H,20H,00H      ;INPUT   THE

TABLE8:  DB 20H,4FH,4CH,44H,20H,20H,50H,41H,53H,53H,57H,4FH,52H,44H

         DB 20H,20H,00H      ;OLD   PASSWORD

TABLE7:  DB 20H,4EH,45H,57H,20H,20H,50H,41H,53H,53H,57H,4FH,52H,44H

         DB 20H,20H,00H     ;NEW   PASSWORD

TABLE6:  DB 20H,53H,48H,55H,20H,20H,52H,55H,20H,20H,20H,4DH,49H,20H

         DB 4DH,41H,00H     ;SHU  RU  MI  MA

TABLE5:  DB 20H,20H,20H,2AH,20H,2AH,20H,2AH,20H,2AH,20H,2AH,20H,20H

         DB 20H,20H,00H     ;   *  *  *  *  *

TABLE4:  DB 20H,53H,45H,54H,20H,20H,50H,41H,53H,53H,57H,4FH,52H,44H

         DB 20H,20H,00H      ;SET   PASSWORD

TABLE3:  DB 38H,30H,35H,31H,20H,20H,20H,50H,41H,53H,53H,57H,4FH,52H

         DB 44H,20H,00H      ;8051  PASSWORD

TABLE2:  DB 20H,41H,20H,20H,4FH,52H,20H,20H,42H,20H,20H,4BH,45H,59H

         DB 20H,20H,00H      ;A  OR  B  KEY

TABLE1:  DB 4DH,49H,20H,4DH,41H,20H,52H,44H,20H,58H,49H,55H,20H,47H

         DB 41H,49H,00H      ;MI MA XIU GAI

TABLE0:  DB 20H,20H,43H,48H,45H,4EH,47H,20H,20H,20H,47H,4FH,4EH,47H

         DB 20H,20H,00H      ;CHENG  GONG

         END

      

相关推荐