密码锁课程设计.docx
《密码锁课程设计.docx》由会员分享,可在线阅读,更多相关《密码锁课程设计.docx(16页珍藏版)》请在冰豆网上搜索。
密码锁课程设计
******
单片机课程设计报告书
课题名称
电子密码锁
姓名
***
学号
*********
院、系、部
物理与电子科学系
专业
电子信息科学与技术
指导教师
***
2010年12月30日
一、设计任务及要求:
设计任务:
用单片机设计、制作一个电子密码锁,电子密码锁由4*3组成0~9数字键及确认键、删除键等组成。
用8位数码管组成显示电路提示信息,当输入密码时,只显示“-”,当密码位输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则开锁。
当密码不正确时,禁止按键输入3秒,同时发出“嘀、嘀”报警声。
要求:
1、用4*3组成0~9数字键及确认键、删除键。
2、用8位数码管组成显示电路提示信息,当输入密码时,只显示“-”,当密码位输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则开锁,此处用LED发光二极管亮一秒钟做为提示。
3、当密码不正确时,禁止按键输入3秒,同时发出“嘀、嘀”报警声。
指导教师签名:
2010年12月30日
二、指导教师评语:
指导教师签名:
年月日
三、成绩
指导教师签名:
年月日
目录
一、绪言……………………………………………………………………………3
(一)设计任务………………………………………………………………3
(二)设计方案及分析………………………………………………………3
二、系统设计………………………………………………………………………4
(一)硬件电路设计…………………………………………………………4
(二)程序流程图……………………………………………………………6
(三)c语言程序设计…………………………………………………………6
三、电子密码锁仿真………………………………………………………………12
(一)系统仿真………………………………………………………………12
(二)工作原理分析…………………………………………………………13
结束语……………………………………………………………………………13
参考文献……………………………………………………………………………14
一、绪言
(一)设计任务
1、用4*3组成0~9数字键及确认键、删除键。
2、用8位数码管组成显示电路提示信息,当输入密码时,只显示“-”,当密码位输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则开锁,此处用LED发光二极管亮一秒钟做为提示。
3、当密码不正确时,禁止按键输入3秒,同时发出“嘀、嘀”报警声。
(二)、设计方案及分析
1、设计方案
根据以上密码锁的设计任务,我们拟定的方案可以简略的如以下框图所示:
1.1、密码锁的控制方案论证
根据设计任务书中的设计要求,可以设想几种控制方案,可以是简单控制,也可以是较复杂的控制。
本设计采用以下密码锁控制方案。
1.密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。
2.密码的输入问题:
由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。
在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。
进入密码的判断比较处理状态并给出相应的处理过程。
P3.6是功能键,P3.7是数字键。
循环:
先按P3.6进入工作状态,之后按P3.7选择密码的长度,为5,再按功能键表示确认。
之后开始输入密码,输一位后就确认一下,确认为功能键,结束后可以听到声音。
之后就从新开始循环。
1.2、单片机的控制方案论证
根据设计任务书中的设计要求,可选用Atmel公司的89系列单片机AT89C2051,但考虑到将来控制功能的扩充,用AT89C51来完成本次设计。
控制方案如下:
1、密码锁进行初始化操作,控制数码管显示其初始状态。
2、初始化完毕后,单片机进入等待扫描键盘状态。
3、当有密码输入时,保存输入的数据,并控制数码管显示其输入状态。
二、系统设计
(一)硬件电路设计
1、密码锁控制电路图
采用AT89C51单片机控制密码锁并实现实时显示输入状态。
单片机控制密码锁的电路原理如图2-1所示。
图2-1
2、主要元器件选择
主要元器件选用型号和数量如表2-1所示:
表2-1主要元器件清单
序号
材料名称
规格型号
数量
元件代号
1
单片机
AT89C51
1
U1
2
晶振
12MHz
1
X1
3
Led
Animated
1
D1
3
Speaker
1
Ls1
4
Keypand
4*3
1
5
杜邦线
0.5米
(二)程序流程图
(三)C语言程序设计
主程序设计
#include
unsignedcharcodeps[]={1,2,3,4,5};
unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsignedcharpslen=9;
unsignedchartemplen;
unsignedchardigit;
unsignedcharfuncount;
unsignedchardigitcount;
unsignedcharpsbuf[9];
bitcmpflag;
bithibitflag;
biterrorflag;
bitrightflag;
unsignedintsecond3;
unsignedintaa;
unsignedintbb;
bitalarmflag;
bitexchangeflag;
unsignedintcc;
unsignedintdd;
bitokflag;
unsignedcharoka;
unsignedcharokb;
voidmain(void)
{
unsignedchari,j;
P2=dispcode[digitcount];
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
TR0=1;
ET0=1;
EA=1;
while
(1)
{
if(cmpflag==0)
{
if(P3_6==0)//functionkey
{
for(i=10;i>0;i--)
for(j=248;j>0;j--);
if(P3_6==0)
{
if(hibitflag==0)
{
funcount++;
if(funcount==pslen+2)
{
funcount=0;
cmpflag=1;
}
P1=dispcode[funcount];
}
else
{
second3=0;
}
while(P3_6==0);
}
}
if(P3_7==0)//digitkey
{
for(i=10;i>0;i--)
for(j=248;j>0;j--);
if(P3_7==0)
{
if(hibitflag==0)
{
digitcount++;
if(digitcount==10)
{
digitcount=0;
}
P2=dispcode[digitcount];
if(funcount==1)
{
pslen=digitcount;
templen=pslen;
}
elseif(funcount>1)
{
psbuf[funcount-2]=digitcount;
}
}
else
{
second3=0;
}
while(P3_7==0);
}
}
}
else
{
cmpflag=0;
for(i=0;i{
if(ps[i]!
=psbuf[i])
{
hibitflag=1;
i=pslen;
errorflag=1;
rightflag=0;
cmpflag=0;
second3=0;
gotoa;
}
}
cc=0;
errorflag=0;
rightflag=1;
hibitflag=0;
cmpflag=0;
}
}
}
voidt0(void)interrupt1using0
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
if((errorflag==1)&&(rightflag==0))
{
bb++;
if(bb==800)
{
bb=0;
alarmflag=~alarmflag;
}
if(alarmflag==1)
{
P0_0=~P0_0;
}
aa++;
if(aa==800)
{
aa=0;
P0_1=~P0_1;
}
second3++;
if(second3==6400)
{
second3=0;
hibitflag=0;
errorflag=0;
rightflag=0;
cmpflag=0;
P0_1=1;
alarmflag=0;
bb=0;
aa=0;
}
}
if((errorflag==0)&&(rightflag==1))
{
P0_1=0;
cc++;
if(cc<1000)
{
okflag=1;
}
elseif(cc<2000)
{
okflag=0;
}
else
{
errorflag=0;
rightflag=0;
hibitflag=0;
cmpflag=0;
P0_1=1;
cc=0;
oka=0;
okb=0;
okflag=0;
P0_0=1;
}
if(okflag==1)
{
oka++;
if(oka==2)
{
oka=0;
P0_0=~P0_0;
}
}
else
{
okb++;
if(okb==3)
{
okb=0;
P0_0=~P0_0;
}
}
}
}
三、密码锁控制器仿真
(一)系统仿真
在完成了密码锁硬件设计和软件设计以后,便进入系统的调试阶段。
系统的调试步骤和方法基本上是相同的,但具体细节和所采用的开发系统以及用户系统选用的单片机型号有关,如可选用Keil软件进行软件调试,用Proteus软件完成硬件调试。
图3-1程序调试完成图
(二)工作原理分析
电子密码锁由4*3组成0~9数字键及确认键、删除键等组成。
用8位数码管组成显示电路提示信息,当输入密码时,只显示“-”,当密码位输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则开锁。
当密码不正确时,禁止按键输入3秒,同时发出“嘀、嘀”报警声。
结束语
完成情况:
(1)、一开始由于太急于求成,整个电路有的模块比较小,所以我们就没有去没有去调试。
但是等整个都基本设计完时才发现这些看似简单的小模块却有很多需要改进的地方。
因此,我们明白了一个道理:
不管做什么事情,都应该有耐心,认真打好基础,磨刀不误砍柴工。
(2)、做什么事情并不是一直做就是好的,应该时不时的跳出来观看一下全局,把握好方向。
当出现问题时不应该心浮气躁,可以适当的放松心情,调整好心态再继续。
(3)在设计的过程中要敢想敢试,这样才能找出比较好的解决方案。
(4)在设计的过程中,我们主动地想去了解一些芯片的功能,以便我们的设计顺利进行。
这样一种积极的求知欲对于学习来讲事半功倍。
在以后的学习生活中应该保持。
(5)当我们设计出密码锁时感觉很有成就感,感觉到很欣慰。
在知识的海洋里,在学习的道路上,虽然艰辛,但是努力了就会有所收获,收获时的喜悦是美妙的。
参考文献
[1].C语言程序设计(第二版),谭浩强主编,清华大学出版社
[2].全国大学生电子设计竞赛训练教程,黄智伟主编,电子工业出版社
[3].凌阳16位单片机应用基础,罗亚非等编著,北京航空航天大学出版社
[4].MCU-DSP型单片机原理与应用,刘海成等编著,北京航空航天大学出版社
[5].电子设计竞赛赛题解析,黄正瑾主编,东南大学出版社
[6].微型计算机控制技术,于海生等编著,清华大学出版社