单片机密码锁2.docx

上传人:b****7 文档编号:26194155 上传时间:2023-06-17 格式:DOCX 页数:22 大小:541.76KB
下载 相关 举报
单片机密码锁2.docx_第1页
第1页 / 共22页
单片机密码锁2.docx_第2页
第2页 / 共22页
单片机密码锁2.docx_第3页
第3页 / 共22页
单片机密码锁2.docx_第4页
第4页 / 共22页
单片机密码锁2.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

单片机密码锁2.docx

《单片机密码锁2.docx》由会员分享,可在线阅读,更多相关《单片机密码锁2.docx(22页珍藏版)》请在冰豆网上搜索。

单片机密码锁2.docx

单片机密码锁2

毕设指导3群:

 

信息与电气工程学院

课程设计说书

(2010/2011学年第二学期)

 

课程名称:

单片机原理与应用

题目:

3*3按键电子密码锁

专业班级:

自动化0801班

学生姓名:

白文庆

学号:

指导教师:

岑毅南王静爽杨怡君

设计周数:

二周

设计成绩:

一、课程设计目的

1.1技术要求

电源打开后,显示器显示“000”,“111”为默认内定密码;输入号码,再按“确定”开锁键。

若号码正确,则锁打开(用蜂鸣器提示),否则显示器会清除为“000”;并且密码可修改。

当输入默认内定密码,锁打开后,按下“修改密码”键,再依次按下三位数字,再按下“修改密码”键,即可修改为新的密码。

(1)10个数字输入键,1个确定开锁键,1个密码修改键;

(2)1个正确输入指示灯;1个正确输入蜂鸣器;

(3)三个数码管

1.2原始数据及主要任务

设计并制作出一个以单片机为核心的电子所系统

1确定总体设计方案;

2设计键盘输入电路;

3设计显示电路;

4合理分配地址,编写系统程序;

5利用protel设计硬件电路原理图和pcb图;

6软硬件联机调试。

二、课程设计正文

2.1软件方面设计

2.1.1系统分析

本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。

其中矩阵键盘用于输入数字密码和进行各种功能的实现。

由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用时只要将单片机的负载由继电器换成电子密码锁的电磁铁吸合线圈即可,当然也可以用继电器的常开触点去控制电磁铁吸合线圈。

本系统共有两部分构成,即硬件部分与软件部分。

其中硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、建功能程序、密码设置程序、EEPROM读写程序和延时程序等组成

2.1.2系统设计(方案论证与比较)

方案一:

当用户输入的密码正确而且是在规定的时间(普通用户要求在12s内输入正确的密码,管理员要求在5s输入正确的密码)输入的话,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。

其原理方框图如图1-1所示。

图1-1

方案二:

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

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

其原理如图1-2

90C52

单片机

矩阵

键盘

控制

输入错误锁定键盘

延时报警控制电路

 

密码存储

指示电路

串口显示电路

图1-2单片机控制方案

通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。

2.1.3系统实施

硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、建功能程序、密码设置程序、EEPROM读写程序和延时程序等组成

2.2硬件方面的设计

2.2.1方案设计

2.2.1.1STC90C52AD的功能参数介绍

STC90C52AD是由宏晶公司生产的高性能八位单片机。

如图一所示。

该芯片采用FLASH存储技术,内部具有8KB字节快闪存存储器,采用DIP封装,是目前在中小系统中应用最为普及的单片机。

STC90C52AD可构成真正的单片机最小应用系统,缩小系统体积,增加系统的可靠性,降低系统的成本。

只要程序长度小于8K,四个I/O口全部提供给用户。

可用5V电压编程,而且擦写时间仅需10毫秒,仅为8751/87C51的擦除时间的百分之一,与8751/87C51的12V电压擦写相比,不易损坏器件,没有两种电源的要求,改写时不拔下芯片,

适合许多嵌入式控制领域。

工作电压范围(2.7V~6V),全静态工作,工作频率宽在0Hz~24MHz之间,比8751/87C51等51系列的6MHz~12MHz更具有灵活性,系统能快能慢。

STC90C52AD芯片提供三级程序存储器加密,提供了方便灵活而可靠的硬加密手段,能完全保证程序或系统不被仿制。

P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。

STC90C52AD单片机为40引脚芯片如图一所示,在本设计中,主要用到P0口、P2口、P1.0口及P3.0、P3.1、P3.2口。

图一

P0口可作为通用I/O口,但须外接上拉电阻,所以在设计显示数码管我们避免了使用P0口这样大大简化了动态显示电路。

P1口:

8位、双向I/0口,内部含有上拉电阻。

P1口可作普通I/O口。

输出缓冲器可驱动四个TTL负载;用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平。

P1口的引脚可由外部负载拉到低电平,通过上拉电阻提供电流。

在FLASH并行编程和校验时,P1口可输入低字节地址。

在串行编程和效验时,P1.5/MO-SI,P1.6/MISO和P1.7/SCK分别是串行数据输入、输出和移位脉冲引脚。

P2口:

具有内部上拉电阻的8位双向I/O口。

P2口用做输出口时,可驱动4各TTL负载;用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。

若负载为低电平,则通过内部上拉电阻向外部输出电流。

在FLASH并行编程和校验时,P2口可输入高字节地址和某些控制信号。

P3口:

具有内部上拉电阻的8位双向口。

P3口用做输出口时,输出缓冲器可吸收4各TTL的灌电流;用做输入口时,首先将引脚置1,由内部上拉电阻抬位高电平。

若外部的负载是低电平,则通过内部上拉电阻向输出电流。

在本设计中,P3口作为时间设置的4按键输入,因为有上拉电阻,所以可以通过按键直接接地,简化了电路。

在与FLASH并行编程和校验时,P3口可输入某些控制信号。

P3口除了通用I/O口功能外,还有替代功能如表1所示。

 

表1P3口的第二功能

端口引脚

各个功能

P3.0

RXD(串行口输入端)

P3.1

TXD(串行口输出端)

P3.2

INT0(外部中断0请求输入端,低电平有效)

P3.3

INT1(外部中断1请求输入端,低电平有效)

P3.4

T0(定时/计数器0计数脉冲输入端)

P3.5

T1(定时/计数器1计数脉冲输入端)

P3.6

WR(外部数据存储器写选通信号输出端,低电平有效)

P3.7

RD(外部数据存储器读选通信号输出端,低电平有效)

单片机使用宏晶公司支持串口下载程序(ISP)的单片机,为STC90C52AD课程设计配发的小电路板(ISP-MCUBasiccircuit)电路原理图见下图。

该板作为课程设计的核心电路板使用,板上有单片机及附属电路,RS-232通信驱动电路,高低电平测试电路等。

课程设计电路中需要的其他电路在此基础上扩展,通过插孔连接。

课程设计配发的小电路板(ISP-MCUBasiccircuit)电路原理图见下图。

扩展电路在万用板上制作用四位数码管显示小时与分钟,中间那个点用来区分小时与分钟;每秒用一个LED闪烁一下;用了4个按键,一个是选择键,一个是加键,一个是减键,

一个是确认键。

时间要精确,整点报时,声音间隔1秒,并且可以调整时间调整位闪烁提示。

扩展电路用到得器件:

4个按键,一个是选择键,一个是加键,一个是减键,一个是确认键;四个DPY7-SEGDP共阳极动态LED;四个PNP三极管;8个360欧姆和四个1千欧的电阻;导线;一个74LS245进行驱动。

每各引脚可吸收8各TTL的灌电流。

作为输入时,首先应将引脚置1。

P0也可用做访问外部程序存储器和数据存储器时的低8位地址/数据总线的复用线。

在该模式下,P0口含有内部上拉电阻。

在FLASH编程时,P0口接收代码字节数据;在编程效验时,P0口输出代码字节数据(需要外接上拉电阻)。

2.2.1.2综合电路设计

硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、建功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。

其原理框图如下

2.2.2单元电路设计

2.2.2.1电源供电单元

 

图二

2.2.2.2动态显示设计

数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,如图三所示。

2.2.2.3动态显示驱动设计

2.2.2.4串口驱动电路单元

DB-9引脚定义

针脚

功能

5

信号地线

1

载波检测

6

数据准备完成

2

接受数据

7

发送请求

3

发送数据

8

发送删除

4

数据终端准备完成

9

振铃指示

如图六所示,MAX232是RS-232收发器,用于实现TTL电平与微机串口的RS-232电平信号之间的转换。

采用单+5V电源供电,数据传输速率为120kbit/s。

 

图六

2.2.2.5蜂鸣器电路单元

如图七所示

图七

2.2.2.6动态显示控制电路单元

2.2.2.7按键电路单元

如图九所示

图九

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

在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。

当确认有按键按下后,下一步就要识别哪一个按键按下。

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

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

对照图九所示的4*3键盘,说明线反转个工作原理。

首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。

方法是:

向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。

如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。

判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。

方法是:

依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。

2.2.3系统调试

硬件调试:

硬件调试是利用DVCC实验与开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。

硬件调试可分为静态调试与动态调试两步进行。

静态调试:

是在用户系统未工作时的一种硬件检测。

第一步:

目测。

检查外部的各种元件或者是电路是否有断点。

第二步:

用万用表测试。

先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。

第三步:

加电检测。

给板加电,检测所有插座或是器件的电源端是否符合要求的值第四步:

联机检查。

因为只有用单片机开发系统才能完成对用户系统的调试。

动态调试:

是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。

动态调试的一般方法是由近及远、由分到合。

由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。

当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。

由分到合的调试既告完成。

由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。

调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。

软件调试:

软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。

可以利用仿真器加以调试,对系统单个单元进行调试,当单元电路成功后,在对整个程序调试,最后在用CPU芯片调试。

2.2.3.1硬件及软件调试过程

(一)硬件

1用万用表检测扩展电路的电源线和底线是否短路。

2给蜂鸣器部分电路供电,给控制端口一个低电平,发光二极管亮并且蜂鸣器响证明这部分电路能正常工作。

3查看数码管的各引脚与74LS245的引脚是否接触良好。

4查看各个按键是否与P2正确连接。

(二)软件

1逐个选通数码管,让P1口输入共阳极的编码,看是否能正确显示。

2下载键盘扫描程序,让数码管显示相应的按键值,看能否正确显示。

调试成功后,就可以正式的进行号码锁的程序编程了。

三、课程设计总结或结论

通过这两周的课程设计,让我了解了设计电路的程序,也让我了解了数字电子锁的工作原理和设计理念,加强了我们动手、思考和解决问题的能力。

在此次的数字电子锁设计过程中,我进一步熟悉了单片机芯片的硬件结构和各引脚的功能,以及其他芯片如74LS245、数码管的工作原理和使用方法,巩固和加强了理论知识

这次课程设计给我的最大感受就是仅仅学理论知识是不够的,必须将理论知识和实践结合起来,在实践中应用理论知识,从而使其得到更深刻的理解和巩固,来提高自己的实际运用能力和独立思考的能力。

在设计的过程中遇到了重重困难,不过经过老师的耐心指导和同学的帮助,很多问题都解决了。

最困难的就是调试调试程序,刚开始程序总是不能满足要求,不过经过多次更改,最后终于成功了。

不过在硬件上,数码管显示不是令人很满意,这方面还需要多多练习。

设计是一个团队的任务,我们在一起工作很愉快,互相帮助,互相学习。

我感觉我和同学们的关系更近了。

团结协作是成功的一项非常重要的保证,而这次课程设计也正好锻炼了这一点,这也是非常宝贵的

四、参考文献

[1]康华光等.电子技术基础(数字部分)第四版.高等教育出版社,2004.

[2]康华光等.电子技术基础(模拟部分)第四版.高等教育出版社,2004.

[3]张毅刚等.单片机原理及应用.高等教育出版社,2003

附录一、设计原理图

附录三、元器件清单

元件名称

参数

元件名称

参数

单片机

STC90C52

电源

5V

按钮开关

9个

电阻

9个(4k*4,0.33k*3,100*1)

LED数码管

3个(共阴)

三极管PNP

1个

Cd4511

1个

蜂鸣器

1个

附录四、程序流程图

附录五、设计C程序

#include

#include"INTERFACE.H"

ucharCode[3]={1,1,1};

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

uintnum;

uchar*p=InPut;

delay(ucharz)

{

ucharx,y;

for(x=z;x>0;x--)

for(y=200;y>0;y--);

}

main()

{

uchartemp,KeyFlag,Password;

ucharcount=0;

ucharSetCode=0;

TMOD=0X01;

TCON=0X10;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

ET0=1;

EA=1;

while

(1)

{

if(num==8)

{

KeyFlag=0;

if(1==Password){SetCode=1;Password=0;}

}

if(SetCode==1&&KeyFlag==1&&num<7)

{

KeyFlag=0;

switch(count)

{

case0:

Code[0]=num;count++;break;

case1:

Code[1]=num;count++;break;

case2:

Code[2]=num;count++;break;

}

}

if(SetCode==0&&KeyFlag==1&&num<7)

{

KeyFlag=0;

switch(count)

{

case0:

InPut[0]=num;count++;break;

case1:

InPut[1]=num;count++;break;

case2:

InPut[2]=num;count++;break;

}

}

if(num==7)

{

KeyFlag=0;count=0;SetCode=0;

if((Code[0]==InPut[0])&&(Code[1]==InPut[1])&&(Code[2]==InPut[2]))

Password=1;

else

{

InPut[0]=0;

InPut[1]=0;

InPut[2]=0;

}

}

if(Password==1)buzzer=0;

elsebuzzer=1;

if(KeyFlag==0)

{

P1=0xfe;

temp=P1;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(50);

if(temp!

=0xf0)

{

switch(temp)

{

case0xe0:

num=0;break;

case0xd0:

num=3;break;

case0xb0:

num=6;break;

}

KeyFlag=1;

while(((P1&0xf0)==temp));

}

}

P1=0xfd;

temp=P1;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(50);

if(temp!

=0xf0)

{

KeyFlag=1;

switch(temp)

{

case0xe0:

num=1;break;

case0xd0:

num=4;break;

case0xb0:

num=7;break;

}

while(((P1&0xf0)==temp));

}

}

P1=0xfb;

temp=P1;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(50);

if(temp!

=0xf0)

{

KeyFlag=1;

switch(temp)

{

case0xe0:

num=2;break;

case0xd0:

num=5;break;

case0xb0:

num=8;break;

}

while(((P1&0xf0)==temp));

}

}

}

}

}

voidtimer0()interrupt1

{

staticcnt=0;

TH0=(65536-2500)/256;

TL0=(65536-2500)%256;

cnt++;

if(cnt>3)cnt=1;

switch(cnt)

{

case1:

P0=0xff;

P2=*p;

P0=0xfe;

break;

case2:

P0=0xff;

P2=*(p+1);

P0=0x0fd;

break;

case3:

P0=0xff;

P2=*(p+2);

P0=0xfb;

break;

}

}

 

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

当前位置:首页 > 经管营销 > 财务管理

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

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