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

  • 格式:doc
  • 大小:2.77 MB
  • 文档页数:34

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

我国工业企业的自动化程度普遍较低,单片机产品有很大的应用空间,如机械行业80%以上的设备仍采用传统的继电器和接触器进行控制。因此,单片机在我国的应用潜力远没有得到充分发挥。

我国大中型企业普遍采用了先进的自动化系统对生产过程进行控制,但绝大部分小型企业尚未应用自动化系统和产品对生产过程进行控制,以提高企业的经济效益和竞争实力。

基于单片机设计的电子密码锁,具有设计简单,操作方便的特点,该产品有很大的市场前景。该设计运用Proteus等仿真软件仿真电子锁,解决了手工绘图慢的缺点,同时设计过程还引用了电子锁常用的标准件和常用件,尽量将所设计的电子锁标准化,这样就大大缩短了电子锁设计周期,进而缩短了新产品的开发周期并降低了电子锁的制造成本;增强了产品的竞争力,公司的整体实力也得到增强。

- 1 - 第一章 概述

1.1 设计目的

1.通过本次课程设计进一步熟悉和掌握单片机的结构及工作原理,巩固和加深“单片机C语言”课程的基本知识,掌握电子设计知识在实际中的简单应用。

2.综合运用“单片机C语言”课程的技巧以及生产实际知识去分析和解决电子设计问题,进行电子设计的训练。

3.学习电子设计的一般方法,掌握AT89C51芯片以及简单的电子设计过程和运行方式,培养正确的设计思想和分析问题、解决问题的能力、特别是总体设计能力。

4.通过计算和绘制原理图、布局图和流程图,学会运用标准、规范、手册、图册、和查阅有关技术资料等,培养电子设计的基本技能。

1.2 设计要求

1.若不小心输入错误数字,可以返回重新输入。

2.输入错误次数达到3次时,将锁定键盘一定时间。

3.可以更改密码。

4.显示解锁键盘余剩时间。

- 2 - 第二章 系统的硬件结构设计

2.1 实验原理

主体电路:电子密码锁控制模块。这部分电路主要由AT89C51单片机的I/O端口、定时计数器、外部中断扩展等组成。

本设计的P0端口为段码端口,P2端口为位码端口,P1和P3为键盘端口。初始时红灯亮,绿灯灭,并且数码管无任何显示。当输入数字时,数码管不会显示所输入的数字,但会显示出一横表示输入了数字,输入“返回”时可以返回上一步。当输入了4个数字时,再按“确定”,若输入的密码正确,红灯灭,绿灯亮,输入“锁定”后可以重新上锁;若输入的密码不正确,红灯将会闪烁3次,之后重置输入的数字。如果输入错误次数达到3次,键盘将会被锁定,红灯和绿灯均熄灭,无法输入任何数字,数码管显示1800并且开始倒数1800秒。1800秒后,电子锁将会自动解锁。若在电子锁解锁期间按“更改密码”可以改变密码,此时若按数字键时会显示输入的密码,输入“返回”可以返回上一步。输入完毕后,按“确定”键绿灯将会闪烁3次表示更改密码完成。

本设计的程序中采用定时器中断的方式设计。

2.2.工作流程图

流程如图2.2-1

- 3 - 2.初始状态,红灯亮绿灯灭3.输入第一个数字4.输入第二个数字5.输入第三个数字6.输入第四个数字1.开始7.输入“确定”输入“返回”输入“返回”输入“返回”8.红灯闪烁3次输入错误9.红灯熄灭,数码管显示1800并且开始倒数1800秒半小时内输入密码错误次数达到3次输入正确11.输入“更改密码”12.输入第一个数字13.输入第二个数字14.输入第三个数字15.输入第四个数字输入“返回”输入“返回”输入“返回”10.红灯灭绿灯亮输入“返回”16.输入“确定”17.绿灯闪烁3次,密码更改完成倒数完毕输入“锁定”18.结束

图2.2-1 工作流程图

- 4 - 2.3 硬件设计

2.3.1 单片机结构

单片微机(Single-Chip Microcomputer)简称为单片机。他在一块芯片上集中了中央处理单元CPU、随机存储器RAM、只读存储器ROM、定时/计数和多功能输入/输出I/O口,如并行I/O、串行口I/O和转换A/D等。就其组成而言,一块单片机就是一台计算机,由于它具有体积小、功能强和价格便宜等优点,因而被广泛地应用于产品智能化和工业控制自动化上。

2.3.2 主要元器件选择

如图2.3.2-1

图2.3.2-1 主要元器件选择

- 5 - 第三章 控制系统的软件设计

3.1 软件设计

3.1.1 单片机中中断系统基本结构

中断是一项重要的计算机技术,是处理正常工作与紧急状态的好办法,是实现人机实时交互的重要途径,在单片机应用系统中,终端技术得到了广泛应用。下面详细介绍单片机中断系统基本结构、与中断相关的特殊寄存器的设置及中断应用系统编程方法。

当CPU查询到系统有中断请求时,如果系统处于中断允许状态,CPU将停止当前的工作,相应中断请求,转向中断服务,中断服务完成后,返回源程序继续执行当前任务,这叫单片机中断。

能让CPU产生中断的信号源叫中断源。8051单片机有INT0、INT1、T0、T1、TI、RI六个中断源,但是只有EX0、ET0、EX1、ET1、ES五个向量,下面简要介绍六个中断源。

INT0、INT1:外部中断源,右P3.2和P3.3引脚输入。具有低电平和脉冲两种出发方式,

在每个机器周期的S5P2采样引脚信号,如有效则由硬件将它的中断请教标志IE置1,请求中断.当CPU响应中断时,由硬件复位。

T0、T1:定时/计数器中断,当定时/计数器产生溢出时,置位中断请求标志TF请求中断处理。

RI、TI:串行中断,RI是接受,TI为发送。单片机串行口接受到一个字符后RI置1,发送完一个字符TI置1。值得注意的是,RI、TI在响应中断后,必须由用指令将其复位。

3.1.2 中断响应

CPU在执行程序的过程中,在每个机器周期的S5P2对中断位置位按中断优先级进行查询,一旦查询到有中断请求,CPU只要不在执行同级或高级的中断服务程序和当前指令(RETI指令或访问IE、IP的指令除外)执行完毕两种情况,则响应中断。如果当前正在执行的指令是RETI或访问IE、IP的指令,则当前指令执行完毕后,CPU才可响应中断。中断响应时间可以从中断信号被查询开始算起,中断响应时间在以下三种情况,响应还会更长:

①CPU正在执行一个比响应的中断源优先级相当或更高的中断源的中断服务程序,此时必须等到中断服务程序执行完毕才可中断响应。

②正在执行的当前指令不是在最后一个机器周期,只有指令执行完后才响应中断。

③如果当前执行的是RETI或访问IE、IP的指令,则当前指令执行完毕后,CPU需再执行一条指令才可以中断响应,因此附加等待响应时间不会超过5个机器周期。

3.1.3 中断入口:

- 6 - 单片机响应中断后,将转向特定的入口进行中断服务,单片机的中断入口地址如下表3.1.3-1

中 断 源 入 口 地 址

IE0(外部中断0) 0003H

TF0(定时器0 溢出中断) 000BH

IE1(外部中断1) 0013H

TF1(定时器1 溢出中断) 001BH

RI+TI(串行口中断) 0023H

表3.1.3-1单片机中断入口地址表

从表中可以看出,两相邻中断源的入口地址间隔为8个单元。这意味着如果要把中断源对应的中断服务程序从入口地址开始存放,则程序的长度不能超过8个字节,否则会影响到下一个中断源的入口地址的使用。而通常情况下,中断服务程序的长度不止8个字节,因此,常见的处理方法是:在入口地址处存放一条无条件转移指令,通过这条转移指令转向对应的中断服务程序入口,中断服务程序以RETI为结束。

3.1.4 中断请求的撤销

CPU响应中断请求,在中断返回(RETI)之前,该中断请求应被撤除,否则会引发另一次中断。

定时/计数器中断请求撤销:CPU在响应中断之后,由硬件自动清除中断请求标志TF。

外部中断请求撤销:如果采用脉冲触发方式,CPU在响应中断后,由硬件自动清除中断请求标志IE;对于电平触发方式的外部中断请求,中断标志的撤销是自动的,由于造成中断请求的低电平继续存在,所以在响应中断后再次会产生中断请求,为此响应中断后要撤销外部信号。

3.1.5 每秒钟的设定

延时方法可以右两种,一种是利用MCS-51内部定时器溢出中断来确定1秒的时间,另一种是采用软延时的方法。

3.1.6 计数器初值计算

定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC可得到如下计算公式:TC=M-C。

3.2 实验程序

- 7 - #include

#include

#define INT8U unsigned char

#define INT16U unsigned int

sbit red=P3^6;//定义红灯,即锁定状态

sbit green=P3^7;//定义绿灯,即解锁状态

sbit k1=P1^0;//定义数字键“1”

sbit k2=P1^1; //定义数字键“2”

sbit k3=P1^2; //定义数字键“3”

sbit k4=P1^3; //定义数字键“4”

sbit k5=P1^4; //定义数字键“5”

sbit k6=P1^5; //定义数字键“6”

sbit k7=P1^6; //定义数字键“7”

sbit k8=P1^7; //定义数字键“8”

sbit k9=P3^0; //定义数字键“9”

sbit k0=P3^1; //定义数字键“0”

sbit ka=P3^2;//定义“返回”键

sbit kb=P3^3;//定义“确定”键

sbit kc=P3^4;//定义“更改密码”键

sbit kd=P3^5;//定义“锁定”键

INT8U mod=1,i,error,j,change,state,right;//定义初始模式、位码、错误次数、取反次数、更改密码模式、按键状态、密码是否相等