单片机密码锁课题设计报告.docx
- 文档编号:17557305
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:13
- 大小:384.10KB
单片机密码锁课题设计报告.docx
《单片机密码锁课题设计报告.docx》由会员分享,可在线阅读,更多相关《单片机密码锁课题设计报告.docx(13页珍藏版)》请在冰点文库上搜索。
单片机密码锁课题设计报告
单片机开发与应用工程报告
题目:
电子密码锁设计
学号:
学生姓名:
专业:
信息工程
年级:
2010级
课程名称:
单片机开发与应用工程训练
指导老师:
年月日
一、设计目的:
用单片机实现一个电子密码锁
二、设计要求:
设计一个电子密码锁系统,用4位数码管显示设定密码.输入密码正确时,用绿色发光管显示。
错误时,用红色发光管闪动显示。
三次输入错误,发出蜂鸣报警。
可进行密码修改。
a)4位数码管显示:
设置密码时显示数字,输入密码时显示“----”
b)存储密码功能:
密码设置及修改
c)报警功能:
蜂鸣器报警加红色发光管闪烁显示
三、设计分析
【系统的主要功能】
本课题实际是设计一个电子密码锁,可以设置4位密码,用2个发光二极管和一个蜂鸣器来显示输入密码的错误与正确,另外还可以有秒表的功能。
一、时间模块:
正常状态显示时钟,小时和分钟。
24小时制循环。
在温度模块时,长按set键,切换进入时间模块。
1、在时钟正常显示状态下按动KSET按钮,进入时钟调整:
1)调整位闪烁,此时按动KADD键进行递增,按动KSUB键进行递减
2)循环按动KSET键,调整位循环闪烁,一圈以后回到正常时钟状态
3)在调整时钟状态按动KFUN键,确认时钟调整有效,并保存
2、时钟正常状态按动KFUN键进入倒顺计时
1)上电后首次进入计时状态则为默认的正向计时,此时时间不能调整,最大计时为99秒,计时精度为0.01秒
2)在停止计时状态持续按动KSET键1秒,可进行倒顺计时转换
3)倒计时状态默认的时间为30分钟,最大可定时100分钟,计时精度为1秒
4)在倒计时状态复位情况下,可通过按动KADD或KSUB键进行时间的递增或递减调整,调整步长为10秒。
当数值小于10以后,下调步长为1秒。
5)在计时状态停止时按动KFUN键可复位计时时间
6)按动KFUN键可启动或停止计时
7)在计时过程中按动KADD或KSUB键,可暂停计时和连续计时
8)倒顺计时的任意情况下按动KSET键,可退出计时回到正常的时钟状态
二、密码模块:
如果没得存储芯片或者存储芯片坏了上电时就自动进入时钟模块
1、上电时显示----,红灯亮起,系统锁定
2、输入正确密码,按Kfun键确认,红绿灯亮起,系统开放10秒然后红灯熄灭
3、双灯亮起时,按动Kset键,相应位闪烁,按动Kadd或Ksub进行密码修改
4、密码修改后,按动Kfun键,确定密码修改完成,嘟嘟嘟蜂鸣三声,红灯熄灭,系统显示----
5、单灯亮时,需要输入正确密码,亮起双灯才能修改密码
6、长按Kset键,系统锁定,红灯亮起
【硬件电路分析】
1.晶振电路
单片机晶振的作用是为系统提供基本的时钟信号。
2.复位电路
复位电路的原理是单片机RST引脚接收到2US以上的电平信号,只要保证电容的充放电时间大于2US,即可实现复位。
3.上拉电阻
P0口是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,所以P0口必须加上拉电阻。
4.键盘电路
按键1用来设置,按键2,3用来调整数字大小,按键4为开始/暂停建。
5.显示电路
用P0口作为数码管的段选端,用P2.7,P2.6,P2.5,P2.4分别作为4位数码管的位选端。
用以显示所设置的密码和秒表功能。
6.蜂鸣器(buzzer)电路
用来提示密码输入正确与否。
7.锁存芯片电路
用来存储用户所设置的密码。
8.LED灯电路
显示电路电源是否接通。
9.单片机电路
单片机采用STC89C51。
主要工作特性:
●具有32根可编程的I/O线;
●具有2个16位可编程定时器;
●具有5个中断源;
●具有一个全双工的可编程串行通信接口;
●工作电压为5V
【程序设计】(密码部分)
if(!
Kfun)//密码工作状态
{
if(Bset)
{
if(lock_flag)
{
if(Count1==Password)
{
Bset=0;
_buz(50);
Disp_brush();
timer=20;//设定允许修改密码时限10秒以内
error=0;
err_flag=0;
code_flag=1;//设定修改密码标志
lock_flag=0;//清除锁定标志
lock=1;//点亮锁定指示灯
unlock=1;//点亮解锁指示灯
}
else
{
if(++error>5){_buz(100);err_flag=1;}
}
}
else
{
if(code_flag)
{
Password=Count1;
temp.x=Count1;
WrToROM(temp.c[0],0xfd);//存储口令值
WrToROM(temp.c[1],0xfc);
_buz(50);
Bset=0;
Disp_brush();
for(i=0;i<2;i++)//蜂鸣三声
{
while(hold);
hold=50;
while(hold);
_buz(50);
}
code_flag=0;
lock=0;
}
else
{
if(Count1==Password){code_flag=1;lock=1;timer=20;}
Bset=0;
Disp_brush();
}
}
}
}
//////////////////////////////////////////密码
elseif(!
Kset)//是否为设置键?
{
if(!
lock_flag)
{
if(!
key_wait())//等待进入锁定模式
{
_buz(50);
lock=1;//点亮锁定指示灯
unlock=0;//熄灭解锁指示灯
lock_flag=1;
Bset=0;
code_flag=0;
}
elseif(++Bset>4)Bset=0;
}
elseif(++Bset>4)Bset=0;
if(Bset<2)Disp_brush();//只刷新首次调整和复位以后。
}
/////////////////////////////////////////密码
elseif(!
Kadd)
{
if(Bset)
{
switch(Bset)
{
case1:
//调整个位
{
if((Count1%10)>8)Count1=Count1-10;
++Count1;
Disp_brush();break;
}
case2:
//调整十位
{
if((Count1%100)>89)Count1=Count1-100;
Count1=Count1+10;
Disp_brush();break;
}
case3:
//调整百位
{
if(Count1%1000>899)Count1=Count1-1000;
Count1=Count1+100;
Disp_brush();break;
}
case4:
//调整千位
{
if(Count1>8999)Count1=Count1-10000;
Count1=Count1+1000;
Disp_brush();break;
}
}
}
}
//////////////////////////////////////////密码
elseif(!
Ksub)
{
if(Bset)
{
switch(Bset)
{
case1:
//调整个位
{
if((Count1%10)==0)Count1=Count1+10;
--Count1;
Disp_brush();break;
}
case2:
//调整十位
{
if((Count1/10)==0)Count1=Count1+100;
Count1=Count1-10;
Disp_brush();break;
}
case3:
//调整百位
{
if(Count1/100==0)Count1=Count1+1000;
Count1=Count1-100;
Disp_brush();break;
}
case4:
//调整千位
{
if(Count1<1000)Count1=Count1+10000;
Count1=Count1-1000;
Disp_brush();break;
}
}
}
}
}
【心得与总结】
这次密码锁课题的设计的经历,结合了单片机的软硬件。
应用到了我所学的键盘扫描、显示模块设置等方法,让我更加清晰的了解到单片机软硬件间的相互联系。
另外这次课题设计也提高了我的焊接能力和PCB板的读图能力。
这次课题设计也表明了单片机是一门实用性很强的技术,要完全掌握它需要不断的动手设计和编程。
不能只编程而抛开硬件电路的设计,只有结合软硬件才能更深入地认识单片机,从而使用单片机来设计各种项目。
在这次课题的设计过程中,我碰到了各种困难,也烦恼过。
刚开始做时,以为很难一个人完成,但后面坚持了下来,查找单片机程序设计的书籍和在老师的指导下,慢慢有了信心。
这次经历不但让我更了解单片机与单片机电路的结构和构成部分,也让我更有信心自己来设计其他以单片机为控制器的电路。
附录:
电路原理图
PCB电路原理图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 密码锁 课题 设计 报告