智能密码锁单片机课程设计报告书Word下载.docx

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

智能密码锁单片机课程设计报告书Word下载.docx

《智能密码锁单片机课程设计报告书Word下载.docx》由会员分享,可在线阅读,更多相关《智能密码锁单片机课程设计报告书Word下载.docx(59页珍藏版)》请在冰点文库上搜索。

智能密码锁单片机课程设计报告书Word下载.docx

封面

课程设计任务书

第1章概述(课题设计的要求、目的及意义)

第2章系统总体方案选择与说明(系统硬件电路设计框图与工作原理)

第3章硬件电路设计(各部分电路设计、原理、参数计算、I/O分配等)

第4章应用软件设计(流程图、算法等)

*第5章系统仿真调试

第6章硬件调试与结果分析(开发板焊接、性能测试、结果、操作说明)

第7章结束语(系统设计小结:

已完成的工作、效果、特色、不足与展望)

参考文献

附录A系统硬件电路原理图

附录B程序清单

评分表

进度安排

设计时间为两周

第一周

星期一、上午:

布置课题任务,讲课及课题介绍

下午:

借阅有关资料,总体方案讨论

星期二、确定总体设计方案

星期三、硬件模块方案设计

星期四、软件模块方案设计

星期五小系统焊接与调试;

第二周

星期一、各硬件模块设计

星期二、各软件模块设计

星期三、各软件模块设计

星期四、写说明书

星期五、上午:

写说明书,整理资料

下午:

交设计资料,答辩

参考文献

参考文献

[1]王迎旭等.单片机原理及及应用[M]机械工业.2012年

[2]龚建伟、熊光明等.Visual.c.Tubor.c串口通信[M]

[3]康华光等.模拟电子技术第五版[M]高等教育2011年

[4]杜树春等.单片机C语言[M]航空航天大学

第1章概述

1.1课题设计要求

1.1.1设计容:

①密码可设4~8位,并可在线修改并存储;

②密码输错3次应有报警信号提示,并有特殊密码解除;

③出开锁时外的时候,要求显示的是时间;

④信号可以通过继电器输出。

1.1.2设计要求:

⑴根据课题要求,确定智能电子密码锁的硬件;

⑵进行系统的硬件设计;

⑶完成必要的参数计算与元器件选择;

⑷完成应用程序设计;

⑸进行单元电路及应用程序的调试;

1.2课题设计目的及意义

学会灵活运用单片机,包括编程、下载和运行等,学会使用keil和protues编程和仿真。

通过本次课题设计真正的掌握单片机的设计和运用技术。

学会IIC虚拟总线、矩阵键盘、LCD1602的编程方法及使用

第2章系统总体设计方案与说明

2.1系统硬件设计框图

根据本系统设计的要求,以STC89C52RC单片机为核心设计了LCD1602显示电路,按键电路,AT24C02的IIC虚拟总线电路,蜂鸣器报警电路,指示灯显示电路,继电器模拟开锁电路。

同时也包括了单片机的最小系统(复位电路、晶振电路、电源电路)。

图2.1系统结构图

2.2系统硬件工作原理

系统由单片机最小系统、1602液晶显示电路、矩阵键盘按键、LED显示电路和蜂鸣器报警电路等组成本电路是由STC89C52RC单片机为控制核心,具有与8051系列单片机完全兼容的效果。

51单片机为CPU,进行对外围电路的控制,当有密码输入时,检测所输入的密码是否正确,如果正确则CPU发送信号给显示电路,显示解锁信息,同时继电器打开,指示灯亮,表示解锁。

如果密码错误,1602提示错误,如果输入三次密码错误,则报警,同时锁住键盘。

只有通过PC机才能解除警报。

在解锁状态下,可以查看用户信息。

当上锁时,显示时间,每次显示的时间都存入24C02,以便下次上锁继续从此时间显示,在这期间是不能输入密码的。

当输入密码的时候想取消上次操作,可以按下取消键撤销。

如果忘记密码,可以通过PC机初始化密码。

第3章硬件电路设计

3.1I/O端口分配表

对于本系统设计的需求和图2.1的系统结构图,其端口分配如表3-1所示。

表3-1I/O端口分配表

P0.0~P0.7

1602D0~D7

P3.5

24C02SDA

P2.0~P2.7

矩阵键盘

P3.6

1602E

P3.2

1602RS

P3.7

蜂鸣器

P3.3

1602RW

P1.7

LED和继电器

P3.4

24C02SCK

RXD、TXD

PC串口线

3.2时钟电路设计

时钟电路是采用部时钟电路,晶体频率是采用12MHZ的石英晶体,两个30pf的瓷电容谐振,机器周期为1us。

分别接在单片机的18和19管脚,电路图如图3.2所示。

图3.2时钟电路

3.3复位电路设计

该系统设计是采用的按键上电复位电路,其中电阻是采用10K,22uF的电解电容,还有一个按键产生按键复位接在单片机机的第9管脚。

其电路图如图3.3所示。

图3.3按键上电复位电路

3.4显示电路设计

本系统设计所用的是背光的液晶1602,其作用是显示用户的当前操作。

LCD1602是一个16列×

2行的显示屏。

其中数据管脚D0~D7接单片机的P0~P3管脚,寄存器选择管脚RS接单片机的P3.2管脚,读写管脚R/W接P3.3,使能管脚E接P3.6。

电源正极VDD和背光正极A接VCC,电源负极VSS和背光负极K接GND,对比度管脚VEE接一个电位器来调节对比度。

其电路图如图3.4所示(由于仿真图的原因图中的电源管脚、电位器、背光正负极为画出)

图3.4LCD1602液晶显示电路

3.5按键电路设计

根据本系统设计的结构图,需要用到16个键,作用和功能分别为10个数字键、修改密码、查看用户信息、解锁、上锁、确定、撤销。

为了节省单片机的I/O口,采用4×

4的矩阵键盘方式,即键盘组合方式是4行4列。

其中行由上到下依次接P2.0~P2.3,列由左到右依次接P2.4~P2.7。

其功能和作用如图3.5所示。

图3.5矩阵键盘按键电路

3.6报警电路设计

当密码输错三次时,系统要求产生一个报警信号,用一个蜂鸣器来实现这一功能。

由P3.7引出接NPN三极管来控制三极管的导通与截止,三极管的发射极接100Ω的电阻。

其电路图如图3.6所示。

图3.6蜂鸣器报警电路

3.7模拟开锁电路和指示灯电路设计

根据本系统设计要求要以一个继电器模拟开锁开关,当开锁的时候就可以产生一个开锁的信号,由P1.7引出接继电器,同时接一个指示灯的阴极来表示已开锁。

其电路图如图3.7所示。

图3.7继电器模拟开关电路

第4章应用软件设计

根据本系统设计需要实现的功能,采用了模块化编程。

因此设计了主程序,还有若干子程序。

其中主程序负责扫描键盘,负责对键盘的输入的命令进入子程序进行处理。

所有的子程序包括判断密码子程序,上锁子程序,修改密码子程序,查看用户信息和报警子程序。

图4软件设计总流程图

判断密码子程序的算法:

将原密码读出存在一个数组b中,也将其长度存在一个变量longth中,将输入的密码也存在一个数组a中。

当按下确定键,两个数组比较是否相等。

上锁子程序算法:

启用定时器中断,定时一秒变量sec加一,然后判断秒是否到60,再判断分是否到60,之后就分秒时都存入24C02的地址20,21,22当中。

修改密码子程序算法:

沿用判断子程序的算法,同时用变量step来记录执行到第几步。

查看用户信息算法:

不停的显示几个用户信息。

报警子程序算法:

错误三次将蜂鸣器接通,之后一直扫描是否接收

到PC机解除警报的信号。

4.1主程序流程图

用户输入密码,输入正确则开锁,错三次报警,接收到初始化信号则密码初始化为1234,判断是否按下了查看用户信息键,在密码输入正确的情况下观看用户信息。

图如下:

图4.1主程序流程图

4.2子程序流程框图

4.2.1判断密码子程序流程图

图4.2.1判断密码子程序流程图

4.2.2上锁子程序流程图

图4.2.2上锁子程序流程图

4.2.3修改密码子程序流程图

图4.2.3修改密码子程序流程图

4.2.4查看用户信息子程序流程图

图4.2.4查看用户子程序流程图

4.2.5报警子程序流程图

Y

图4.2.5报警子程序流程图

第5章系统仿真

5.1系统仿真

通过keil将源程序编译成16进制HEX文件,再加入到C51单片机中。

如下图所示。

图5.1.1未运行时的仿真图

通过点击运行按钮之后,仿真图开始运行。

图5.1.2运行之后的仿真图

第6章硬件调试与结果分析

6.1硬件调试

将keil编译生成的HEX16进制文件下载到单片机中,实物图如下

图6.1.1正在输入密码

图6.1.3查看用户信息图6.1.4修改密码输入旧密码界面

图6.1.5修改密码输入新密码界面图6.1.6修改密码成功界面

图6.1.7电脑初始化密码界面图6.1.8电脑解除警报界面

6.2系统性能与操作说明

该密码锁的密码长度随用户自己设定(12位以),中间输错数字时可以撤销上次操作。

在密码正确的情况下可以查看用户信息,在密码错误三次的情况下,蜂鸣器会报警,需要在电脑用正确的用户名才能解除警报。

当忘记密码时,可以通过电脑用正确的用户名把密码初始化。

软件程序中在设定密码的尾部加了个字符‘a’,作为一个简单的加密工作。

电源一接通,LCD1602液晶显示屏显示“InputPassword”用矩阵键盘扫描的方式进行查询按键,当按下的“确定”键,密码与所设定的密码相符合时,LCD1602显示“Unlock”,同时继电器模拟接通,指示灯也亮表示解锁。

解锁状态按下“查看用户信息键”的时候,可以循环查看用户信息。

此时按下“解锁”键可以进入主界面,即输入密码的界面。

按下了“修改密码”键,LCD1602显示“OldPassword”,即输入旧密码,密码正确是才开始修改密码,LCD1602显示“NewPassword”,两次输入一样则设置成功,LCD1602显示“SetSuccess”和你所设定的新密码,下次要输入的密码则需要新密码才能解锁。

如果两次新密码设置不一样则表示设置不成功,LCD1602显示“Setfail”。

如果输入旧密码错误则显示“Error”,锁定键盘三秒后进入主界面。

按下了“上锁”键,则LCD1602显示时间(由于缺少DS1302等时钟芯片,所以用总共上锁了多少时间来模拟显示时间)。

在输入密码的过程中想取消上次所输入的一个数字时,按下“撤销”键,可以取消上次所输入的数字。

如果输出三次密码则蜂鸣器报警。

6.3系统结果分析

在实物的调试过程中,解除警报这个操作是我调试用的最长时间,刚开始每次解除警报之后,下次输入密码反应很慢,而且错三次之后不能准确报警,但是复位之后才能再次正确运行。

因此我就想到了用软件复位,通过定义ISP_CONTR的SWRET位置1,使单片机复位,完美解决以上问题。

在所有程序测试完成之后,以前还行,目前没有发现问题。

第7章系统设计总结

本系统可以随意修改密码(12位数字以的数字),查看用户信息,上锁显示时间,可以撤销很多上次输入。

通过PC机才可以解除警报,当忘记密码时,可以用PC机初始化密码。

其中程序里面的密码的后面加上字符‘a’,从而起到一种简单的加密,以便存储的密码不再是单一的数字。

本系统设计当中遇到主要问题如下

①解除警报。

通过定ISP_CONTR的SWRET位置1,使单片机复位,完美解决问题。

②容易被破解密码。

例如密码是1234,如果输入1234567,也能解锁。

因此在程序里面自动在密码的后面加入了字符‘a’,作为一个程序读取密码的结束标志,起到简单的加密。

本系统的缺陷在与要用串口线和PC机相连,这样既不方便。

希望将来能通过手机控制密码锁,当错误三次时,只有用户通过自己的手机发送短信才能解除警报和初始化密码。

参考文献

/******************************AT24C02.c************************/

#include<

reg52.h>

intrins.h>

#include"

delay.h"

#defineucharunsignedchar

sbitSCL=P3^4;

//定义串行时钟线

sbitSDA=P3^5;

//定义串行应答线

voidinit_24C02()//初始化24C02

{

SCL=1;

_nop_();

//延时一个机器周期

SDA=1;

}

voidstart()

SDA=0;

//当时钟线为高电平时数据线拉低,AT24C02开始工作

SCL=0;

//时钟线清零便于后续操作

voidstop()//停止信号

//当时钟线为高电平时,数据线拉高AT24C02停止

voidWrite_Byte_24C02(uchardate)//写一个字节的数据

uchari;

for(i=0;

i<

8;

i++)//传送八位数据

{

date=date<

<

1;

//每次传送一位

SDA=CY;

//左移一位,将发送的最高位舍弃

}

//等待AT24C02的应答信号

ucharRead_Byte_24C02()//读取一个字节数据

uchari,j,result;

i++)//每次读取一位

if(SDA==1)//读出高电平

j=1;

else//读出低电平

j=0;

result=(result<

1)|j;

//将读出来的数值放在最低位

returnresult;

//返回读出来的数值

voidclock()//等待AT24C02的应答

uchari=1;

//SDA=1;

//_nop_();

while(SDA==1)//等待拉低做出应答

i++;

ucharRead_24C02(ucharaddress)

ucharReadData;

start();

Write_Byte_24C02(0xa0);

//写入写数据的命令

clock();

Write_Byte_24C02(address);

//写入地址

//将数据线和时钟线拉低

Write_Byte_24C02(0xa1);

//写入读数据命令

ReadData=Read_Byte_24C02();

stop();

delay(200);

returnReadData;

voidWrite_24C02(ucharaddress,uchardate)//在指定地址处写入数据

//开始AT24C02

Write_Byte_24C02(date);

//写入读数据的命令

//停止24C02

/************************delay.c*********************************/

voiddelay1ms(intms)

uchari,j;

for(;

ms>

0;

ms--)

3;

i++)

for(j=0;

j<

99;

j++)

;

voiddelay(unsignedcharx)//x*0.14MS

unsignedchari;

{while(x--)

for(i=0;

i<

13;

i++){}

/**********************单片码锁main.c***********************/

dianzisuo.h"

1602.h"

//sfrISP_CONTR=0xe7;

//定义ISP特殊寄存器

sbitLed=P1^0;

bitSolve=0;

bitChuShi=0;

bitled=0;

//定义报警灯标识

sbitbell=P3^7;

sbitr=P0^1;

ucharcodet[]={"

1234a"

};

//初始化密码为1234,a是密码的结束标志位

ucharcodenumtable[]={"

0123456789"

ucharh,fen,miao;

ucharsec=0;

ucharWarn=0;

/*voidsoft_reset(void)

((void(code*)(void))0x0000)();

//程序从零开始执行

}*/

voidBell_()

uchari=0,judge=0xff;

Init_ser();

//TR0=1;

while

(1)//错误三次锁定键盘开始报警

{

bell=0;

led=0;

if(led)

P1=(0xf0|Unlock);

delay(200);

led=0;

}

else

led=1;

P1=(0xff|Unlock);

}

//Init_ser();

if(Solve==1)//接收到PC机发送的解除警报则解除警报

Solve=0;

bell=1;

Warn=0;

delay(100);

//延时一段时间等硬件做好准备

ISP_CONTR=0x20;

//将SWRET位置1,使单片机复位

//Init_Timer();

voidLock_Time()

//bitFlag;

uchari,judge;

ucharshi,ge;

//十位和个位

Init_Timer();

//初始化时间设置

TR0=1;

lcd_cmd(0x01);

//清屏幕

lcd_cmd(0x0c);

h=Read_24C02(20);

fen=Read_24C02(21);

miao=Read_24C02(22);

while

(1)

if(miao==60)

fen++;

miao=0;

//Flag=1;

if(fen==60)

h++;

fen=0;

//Flag=1;

//Flag=0;

shi=h/10;

ge=h%10;

lcd_cmd(0x80+4);

lcd_date(numtable[shi]);

lcd_date(numtable[ge]);

lcd_date('

:

'

);

shi=fen/10;

ge=fen%10;

shi=miao/10;

ge=miao%10;

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

当前位置:首页 > 法律文书 > 调解书

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

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