基于单片机的电子密码锁课程设计.docx

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

基于单片机的电子密码锁课程设计.docx

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

基于单片机的电子密码锁课程设计.docx

基于单片机的电子密码锁课程设计

湖南人文科技学院

课程设计报告

课程名称:

单片机原理及应用课程设计

 

设计题目:

电子密码锁

系别:

通信与控制工程系

专业:

10级自动化

班级:

自动化一班

学生姓名:

彭俊杰焦达富

学号:

1042110110421106

起止日期:

2012年12月24日~2013年1月6日

指导教师:

谭周文岳舟

教研室主任:

岳舟

指导教师评语:

 

指导教师签名:

年月日

成绩评定

项目

权重

成绩

彭俊杰

焦达富

1、设计过程中出勤、学习态度等方面

0.2

2、课程设计质量与答辩

0.5

3、设计报告书写及图纸规范程度

0.3

总成绩

教研室审核意见:

 

教研室主任签字:

年月日

教学系审核意见:

 

主任签字:

年月日

摘要

电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。

本设计围绕电子密码锁系统的设计与开发进行研究和实践,详细介绍了电子密码锁系统的整体结构。

基于在系统可编程技术和STC89C52编译器配有集成开发的新型电子密码锁的设计方案,阐述其工作原理和软硬件设计,由单片机系统、矩阵键盘、LED显示和报警系统组成的系统能完成开锁、修改用户密码、报警基本的密码锁的功能。

关键词:

STC89C52芯片;8255芯片;数码管;keil软件

 

目录

设计要求1

1方案论证与对比1

1.1方案一1

1.2方案二2

1.3方案对比与选择3

2硬件电路设计3

2.1键盘电路设计3

2.2LED显示电路4

2.3STC89C52芯片接口电路设计4

2.48255A芯片接口电路设计7

2.5AT24C08断电存储单元的设计9

3系统软件设计10

3.1主程序设计10

3.2键盘程序设计11

3.3调电存储服务程序11

4系统功能测试12

5详细仪器清单14

6总结与致谢15

参考文献16

附录一:

8255A与LED的连接PCB板图17

附录二:

8255A与键盘的连接PCB板图18

附录三:

程序源代码19

 

基于89C52的电子密码锁

设计要求

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

2、密码的输入:

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

在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。

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

1方案论证与对比

1.1方案一

系统采用一种以STC89C52为核心的单片机控制方案。

利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加声光提示等功能。

其原理框图如图1所示。

图1单片机控制原理图

1.2方案二

系统采用数字电路控制。

其原理框图如图2所示。

 

图2数字电路控制原理方框图

采用数字密码锁电路的好处就是设计简单。

用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。

电路由两大部分组成:

密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。

密码锁电路包含:

键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。

1.3方案对比与选择

通过比较以上两种方案,显然单片机方案二有较大的活动空间,不但能实现所要求的功能和在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以综合考虑,我们选择第二种方案。

本方案采用一种是用以89C52为核心的单片机控制方案。

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

设计思路如下:

(1)输入密码用矩形键盘,包括数字键和功能键;

(2)LED数码管显示输入密码,用8255A驱动数码管发光显示数码;

(3)用发光二极管代替开锁的电路,发光表示开锁;

(4)打开电源后,显示器显示“1”,表示密码位数。

按下功能键可选择密码位数,确认密码位数后,再按数字键打出密码;

(5)密码设置为“12345”,密码正确后,发光二极管发光。

若密码错误,则会显示“Error”。

2硬件电路设计

2.1键盘电路设计

使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。

本设计使用4×4矩阵键盘,如图3所示。

图3键盘设计电路图

2.2LED显示电路

本系统设计的显示电路是为了给使用者以提示而设置的。

本系统的显示采用串行显示的方式,用8051单片机经8255A扩展6位八段码LED显示器,用8255A的B口作为段码(字形代码)数据口,PA作为位控制端口。

逻辑电路结构如图4所示。

 

图4LED显示设计电路图

2.3STC89C52芯片接口电路设计

STC89C52是MCS-51系列单片机的典型产品,以这一代表性的机型进行系统的讲解。

C52单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,其内部结构如图5所示,现在分别加以说明。

图5STC89C52芯片内部结构图

(1)中央处理器

中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。

(2)数据存储器(RAM)

STC89C52内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM有256个,可存放读写的数据,运算的中间结果或用户定义的字型表。

(3)程序存储器(ROM):

STC89C52共有4096个8位掩膜ROM,用于存放用户程序、数据或表格。

(4)定时/计数器:

8051有三个16位的可编程定时/计数器,以实现定时或计数产生中断,用于控制程序转向。

(5)并行输入输出(I/O)口:

STC89C52共有4组8位I/O口(P0、P1、P2和P3),用于对外部数据的传输。

(6)全双工串行口:

STC89C52内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。

(7)中断系统:

STC89C52具备较完善的中断功能,有两个外中断、三个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。

(8)时钟电路:

STC89C52内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但STC89C52单片机需外置振荡电容。

单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。

INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。

图5是MCS-51系列单片机的内部结构示意图。

 

图5

(9)STC89C52的引脚说明

MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直插DIP结构,下图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。

引脚图如图6所示。

图6STC89C52的引脚图

2.48255A芯片接口电路设计

8255A是40引脚双列直插式芯片,片内有A,B,C3个8位I/O端口,可提供24条可编程输入/输出端口线。

内部结构及引脚信号如图7所示。

图78255A引脚信号图

(1)内部结构

8255A的内部结构由三部分电路组成:

与CPU的接口电路、内部控制逻辑电路和与外设连接的输入/输出接口电路。

1 与CPU的接口电路

与CPU的接口电路由数据总线缓冲器和读/写控制逻辑组成。

数据总线缓冲器是一个三态、双向、8位寄存器,8条数据线D7~D0与系统数据总线连接,构成CPU与8255A之间信息传送的通道,CPU通过执行输出指令向8255A写入控制命令或往外设传送数据,通过执行输入指令读取外设输入的数据。

2 内部控制逻辑电路

内部控制逻辑包括A组控制与B组控制两部分。

A组控制寄存器用来控制A口PA7~PA0和C口的高4位PC7~PC4;B组控制寄存器用来控制B口PB7~PB0和C口的低4位PC3~PC0。

它们接收CPU发送来的控制命令,对A,B,C3个端口的输入/输出方式进行控制。

3 输入/输出接口电路

  8255A片内有A,B,C3个8位并行端口,A口和B口分别有1个8位的数据输出锁存/缓冲器和1个8位数据输入锁存器,C口有1个8位数据输出锁存/缓冲器和1个8位数据输入缓冲器,用于存放CPU与外部设备交换的数据。

 

(2)引脚信号

RESET:

复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

CS:

芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;/CS=1时,8255无法与CPU做数据传输.

RD:

读信号线,当这个输入引脚为低电平时,即/RD=0且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:

写入信号,当这个输入引脚为低电平时,即/WR=0且/CS=0时,允许CPU将数据或控制字写入8255。

D0~D7:

三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。

PA0~PA7:

端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。

PB0~PB7:

端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。

PC0~PC7:

端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。

端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。

A0,A1:

地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器.

当A0=0,A1=0时,PA口被选择;

当A0=0,A1=1时,PB口被选择;

当A0=1,A1=0时,PC口被选择;

当A0=1.A1=1时,控制寄存器被选;

2.5AT24C08断电存储单元的设计

断电存储单元的作用是在电源断开的时候,存储当前设定的信息。

AT24C08是ATMEL公司的8KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。

其电路如图8所示。

图8断电存储单元电路图

由于AT24C08的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据/地址)与单片机传送数据。

每当设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,读到缓存单元中,供主程序使用。

3系统软件设计

软件的设计主要包括键盘键值的读取,LED显示程序,密码比较程序和报警程序。

3.1主程序设计

主程序主要完成初始化、检查有无按键按下、以及调用显示等等,其流程图如9所示。

图9主程序流程图

3.2键盘程序设计

键扫程序的过程为:

开始时,先判断是否有键闭合,无键闭合时,返回继续判断,有键闭合时,先去抖动,然后确定是否有键按下,若无键按下,则返回继续判断是否有键闭合,若有键按下,则判断键号,然后释放,若释放按键完毕,则返回,若没有释放按键,则返回继续释放。

其流程图如图10所示。

 

图10键盘程序流程图

3.3调电存储服务程序

当比较密码的时候,需要读AT24C08程序,将存储在芯片内的数据读到RAM中,然后和输入的密码相比较。

当修改密码的时候,需要把输入的密码保存到AT24C08中,并实现断电保护,其流程图如图11所示。

 

图1124C08程序流程图

4系统功能测试

用到了KeilC软件,集成调试环境,集成了编辑器、译码器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。

树状结构显示,一目了然,支持ASM(汇编)、C语言多模块源程序混合调试,在直接修改、编译、调试源程序,错误指令定位。

功能很强大,用于对程序的调试和编辑。

本系统的程序的编写就是在KeilC软件中完成的,当程序完成之后,生成HEX文件。

再利用Proteus软件进行仿真。

经过仿真,程序符合题目的要求。

下载至学习板后输入数值调试结果如表1所示。

表格1系统测试结果

输入数值

LED显示

指示灯

0

Error

不亮

12340

Error

不亮

12345

12345

123456

Error

不亮

123

Error

不亮

15

Error

不亮

 

5详细仪器清单

表格2仪器清单

名称

参数和型号

数量

单片机

STC89C52

1块

可编程I/O

8255A

1块

电阻

1K

9个

10K

9个

数码管

共阳4位数码管

2个

瓷片电容

30PF

2个

晶振

12M

2个

电解电容

10uf

2个

开关

16个

单片机插座

40脚

1个

 

6总结与致谢

因为前期制作学习板出现的一些问题和对于单片机知识的不熟悉导致在做课程设计中间走了很多的弯路,后面在老师的悉心指导下,以及同学之间的相互求教和讨论中,终于成功的完成了此次的课程设计。

在这次的设计中,让我更加深入的懂得了汇编程序该如何形成一个系统,更加熟练的运用KeilC51软件编写程序,熟悉了protues仿真软件的使用技能,丰富了各种器件常识,收获了难得的实践经验。

对于在单片机设计中出现的各种问题,我们先是显得非常的茫然,哪怕是一个小小的错误,都会很难找到它错的原因,更何况去解决它。

但到了最后,因为对设计的流程已经完全熟悉后,找出错误的根源是更加的容易。

并且在这次的设计中我们充分的体验到了团队的力量,这还是一些小是系统,如果对于更大些的设计,那团队的作用会更大。

分工合作是最好的做事原则。

同时也加深了我们之间的友谊。

这次设计过程中,体现出自己设计程序的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。

在此感谢我们的指导老师.,老师的严谨细致、一丝不苟将是我工作、学习中的榜样;老师教导和不拘一格的思路给了我很多新的启发;这次设计的每个细节和每个数据,都离不开老师您的细心指导。

而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。

同时感谢帮助过我的同学们,谢谢你们对我的帮助和支持,让我感受到同学之间纯真的友谊。

由于我的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正。

 

参考文献

[1]康华光.电子技术基础数字部分(第五版).华中科技电子技术组,2007

[2]华成英.模拟电子技术基础(第四版).清华大学电子学教研组,2006

[3]李光弟.单片机基础(第三版)..北京航空航天大学出版社,2007

[4]李凤霞.C语言程序设计(第二版).北京理工大学出版社,2008

[5]楼然苗.单片机课程设计指导.北京航空航天大学出版,2007

 

附录一:

8255A与LED的连接PCB板图

 

附录二:

8255A与键盘的连接PCB板图

 

附录三:

程序源代码

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineNO_KEY_DOWN0XFF

#defineSET0X28

#defineUP0X18

ucharxdataPA_at_0xD9FF,PB_at_0XDBFF,PC_at_0XDDFF,//定义外部变量,强制分配地址

EX_PORT_CON_at_0XDFFF;

ucharcodeLED_CODE[]={0XA0,0XBB,0X62,0X2A,0X39,0X2C,0X24,0XBA,//LED段码(0~9)

0X20,0X28};

 

ucharcodeSECRATE[3]={12,34,56};

uchardataINPUT_NUM[3]={0,0,0};

uchardataDISPLAY_BUF[6];

ucharcodeERROR[6]={0X64,0X77,0X77,0X27,0X77,0XFF};

uchar*PP;

ucharBIT_PLACE=0,COUNT=0,KEY,S=0,LENGH=1;

bitX=0,Y=0;

voidInput_Secret();

voidDisplay();

voidDelay(uintA);

ucharKey_Scan();

voidNum2_Buf();

voidmain()

{

EX_PORT_CON=0X81;

PA=0XFE;

PB=0XFF;

EA=ET0=TMOD=1;

TR0=1;

TH0=0X3C;

TL0=0XB2;

PP=DISPLAY_BUF;

BIT_PLACE=0;

gotoSTART;

while

(1)

{

Display();

if(Key_Scan()==SET)

{

START:

while

(1)

{Y=0;

KEY=Key_Scan();

Display();

if(KEY==UP)

{

if(LENGH>=6)LENGH=1;

elseLENGH++;

}

if(KEY==SET){Y=1;break;}

}

PP=DISPLAY_BUF;

X=1;

S=0;

while

(1)

{

Num2_Buf();

KEY=Key_Scan();

Display();

if((KEY==SET)||((S>=4)&&X))

{

if(PP=ERROR)PP=DISPLAY_BUF;

///if(BIT_PLACE==0XFF){BIT_PLACE=0;}

//else

{

if(BIT_PLACE

{BIT_PLACE++;X=1;S=0;COUNT=0;}

else

{

BIT_PLACE=0;

X=0;

if((SECRATE[0]==INPUT_NUM[0])&&(SECRATE[1]==INPUT_NUM[1])&&(SECRATE[2]==INPUT_NUM[2]))

P1=0;

else

{PP=ERROR;P1=0XFF;BIT_PLACE=0;}

INPUT_NUM[0]=INPUT_NUM[1]=INPUT_NUM[2]=0;

break;

}

}

}

if(KEY==UP){Input_Secret();S=0;}

}

}

}

}

voidInput_Secret()

{

if((BIT_PLACE%2))//在GE位

{

if((INPUT_NUM[BIT_PLACE/2]%10)>=9)INPUT_NUM[BIT_PLACE/2]-=9;

elseINPUT_NUM[BIT_PLACE/2]++;

}

else//在十位

{

if(INPUT_NUM[BIT_PLACE/2]>=90)INPUT_NUM[BIT_PLACE/2]-=90;

elseINPUT_NUM[BIT_PLACE/2]+=10;

}

}

 

voidDisplay()

{ucharI,J=0X01;

if(Y)

{

for(I=0;I

{

PB=0XFF;

PA=0XFF;

if((BIT_PLACE==I)&&(COUNT<=10));

elsePB=(*(PP+I));

PA=~(J<

Delay(200);

}

}

else

{

PA=0XDF;

PB=LED_CODE[LENGH];

}

}

voidNum2_Buf()

{

ucharI;

for(I=0;I

{

if(I%2)DISPLAY_BUF[I]=LED_CODE[INPUT_NUM[I/2]%10];

elseDISPLAY_BUF[I]=LED_CODE[INPUT_NUM[I/2]/10];

}

}

voidTimer()interrupt1

{

TH0=0X3C;

TL0=0XB2;

COUNT++;

if(COUNT>20)COUNT=0;

if(COUNT>=20)

S++;

}

 

voidDelay(

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

当前位置:首页 > 表格模板 > 合同协议

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

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