智能密码锁单片机课程设计.docx
- 文档编号:24609792
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:57
- 大小:599.82KB
智能密码锁单片机课程设计.docx
《智能密码锁单片机课程设计.docx》由会员分享,可在线阅读,更多相关《智能密码锁单片机课程设计.docx(57页珍藏版)》请在冰豆网上搜索。
智能密码锁单片机课程设计
等级:
湖南工程学院
课程设计
课程名称单片机技术与应用
课题名称智能电子密码锁
专业自动化
班级
学号
姓名
指导教师李晓秀、王迎旭
2013年12月09日
湖南工程学院
课程设计任务书
课程名称单片机原理及应用
课题智能密码锁设计
专业班级自动化1191
学生姓名
学号
指导老师
审批
任务书下达日期2013年12月2日
任务完成日期2013年12月15日
设计内容与设计要求
设计内容:
本课题是要发设计一种基于单片机控制的智能电子密码锁,主要功能有:
按用户使用要求可设置、修改密码,遥控或按键开锁,错误报警、显示等辅助功能。
密码可设4~8位,并可在线修改并存储;
密码输错3次应有报警信号提示,并有特殊密码解除;
出开锁时外的时候,要求显示的是北京时间;
信号可以通过继电器输出。
设计要求:
1)根据课题要求,确定智能电子密码锁的硬件;
2)进行系统的硬件设计;
3)完成必要的参数计算与元器件选择;
4)完成应用程序设计;
5)进行单元电路及应用程序的调试;
主要设计条件
1、MCS-51单片机实验操作台1台;
2、PC机及单片机调试软件,仿真软件proteus;
3、开发板1块;
4、制作工具1套;
5、系统设计所需的元器件。
说明书格式
封面
课程设计任务书
第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机相连,这样既不方便。
希望将来能通过手机控制密码锁,当错误三次时,只有用户通过自己的手机发送短信才能解除警报和初始化密码。
参考文献
参考文献
[1]王迎旭等.单片机原理及及应用[M]机械工业出版社.2012年
[2]龚建伟、熊光明等.Visual.c.Tubor.c串口通信[M]
[3]康华光等.模拟电子技术第五版[M]高等教育出版社2011年
[4]杜树春等.单片机C语言[M]北京航空航天大学出版社
附录A系统硬件电路原理图
附录B程序清单
/******************************AT24C02.c************************/
#include
#include
#include"delay.h"
#defineucharunsignedchar
sbitSCL=P3^4;//定义串行时钟线
sbitSDA=P3^5;//定义串行应答线
voidinit_24C02()//初始化24C02
{
SCL=1;
_nop_();//延时一个机器周期
SDA=1;
_nop_();
}
voidstart()
{
SDA=1;
_nop_();
SCL=1;
_nop_();
SDA=0;//当时钟线为高电平时数据线拉低,AT24C02开始工作
_nop_();
SCL=0;//时钟线清零便于后续操作
_nop_();
}
voidstop()//停止信号
{
SDA=0;
_nop_();
SCL=1;
_nop_();
SDA=1;//当时钟线为高电平时,数据线拉高AT24C02停止
_nop_();
}
voidWrite_Byte_24C02(uchardate)//写一个字节的数据
{
uchari;
for(i=0;i<8;i++)//传送八位数据
{
date=date<<1;//每次传送一位
SCL=0;
_nop_();
SDA=CY;
_nop_();
SCL=1;
_nop_();
//左移一位,将发送的最高位舍弃
}
SCL=0;
_nop_();
SDA=1;
_nop_();//等待AT24C02的应答信号
}
ucharRead_Byte_24C02()//读取一个字节数据
{
uchari,j,result;
SCL=0;
_nop_();
SDA=1;
for(i=0;i<8;i++)//每次读取一位
{
_nop_();
SCL=1;
_nop_();
if(SDA==1)//读出高电平
j=1;
else//读出低电平
j=0;
result=(result<<1)|j;//将读出来的数值放在最低位
SCL=0;
}
_nop_();
returnresult;//返回读出来的数值
}
voidclock()//等待AT24C02的应答
{
uchari=1;
SCL=1;
_nop_();
//SDA=1;
//_nop_();
while(SDA==1)//等待拉低做出应答
i++;
SCL=0;
_nop_();
}
ucharRead_24C02(ucharaddress)
{
ucharReadData;
start();
Write_Byte_24C02(0xa0);//写入写数据的命令
clock();
Write_Byte_24C02(address);//写入地址
clock();
start();//将数据线和时钟线拉低
Write_Byte_24C02(0xa1);//写入读数据命令
clock();
ReadData=Read_Byte_24C02();
stop();
delay(200);
returnReadData;
}
voidWrite_24C02(ucharaddress,uchardate)//在指定地址处写入数据
{
start();//开始AT24C02
Write_Byte_24C02(0xa0);//写入写数据的命令
clock();
Write_Byte_24C02(address);//写入地址
clock();
Write_Byte_24C02(date);//写入读数据的命令
clock();
stop();//停止24C02
delay(200);
}
/************************delay.c*********************************/
#include"delay.h"
voiddelay1ms(intms)
{
uchari,j;
for(;ms>0;ms--)
for(i=0;i<3;i++)
for(j=0;j<99;j++)
;
}
voiddelay(unsignedcharx)//x*0.14MS
{
unsignedchari;
{while(x--)
for(i=0;i<13;i++){}
}
}
/**********************单片机密码锁main.c***********************/
#include
#include
#include"dianzisuo.h"
#include"1602.h"
#defineucharunsignedchar
//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);
delay(200);
led=0;
}
else
{
led=1;
P1=(0xff|Unlock);
delay(200);
delay(200);
}
//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;
lcd_date(numtable[shi]);
lcd_date(numtable[ge]);
lcd_date(':
');
shi=miao/10;
ge=miao%10;
lcd_date(numtable[shi])
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 密码锁 单片机 课程设计