电子密码锁 总结报告 李超 电气093班.docx
- 文档编号:26520679
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:47
- 大小:1.60MB
电子密码锁 总结报告 李超 电气093班.docx
《电子密码锁 总结报告 李超 电气093班.docx》由会员分享,可在线阅读,更多相关《电子密码锁 总结报告 李超 电气093班.docx(47页珍藏版)》请在冰豆网上搜索。
电子密码锁总结报告李超电气093班
基于单片机的电子密码锁设计
TheDesignofElectronicPassword-lockwithSCM
第一章课题任务
基于51单片机的简易电子密码锁
一、实现功能:
1、设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。
2、密码可以由用户自己修改设定(只支持6位密码),锁打开后才能修改密码。
修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。
3、报警、锁定键盘功能。
密码输入错误显示器会出现错误提示,若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘。
4、AT24C02保存密码,支持复位保存,掉电保存功能。
第2章系统总体方案设计
方案一:
采用数字电路控制。
其原理方框图如图2-1所示。
图2-1数字密码锁电路方案
采用数字密码锁电路的好处就是设计简单。
用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。
电路由两大部分组成:
密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。
密码锁电路包含:
键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。
方案二:
采用一种是用以AT89S51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。
其原理如图2-2所示。
图2-2单片机控制方案
通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。
本方案采用一种是用以89c51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。
作用说明:
开锁:
插上电源后,输入正确密码,然后按【#】(确认)键,此时锁会打开,可以看到显示open,密码锁打开。
1、退出并关锁:
按下【*】(取消)键,此时锁关闭,所有输入清除。
2、修改密码:
在开锁状态下,再次输入正确的密码并按下【#】(确认)键,此时听到两声提示,输入新的六位密码并按【D】(重设)键,再重复输入一次新密码并按【D】,会听到报警并锁定键盘:
当输入密码错误后,报警并锁定键盘3秒,如3秒内又有按键,3秒再启动。
当重置新密码时,新密码会保存于AT24C02存储器里。
第3章硬件电路设计
3.1键盘电路设计
使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。
其原理如图3.1
。
图3.1矩阵键盘
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。
在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
当确认有按键按下后,下一步就要识别哪一个按键按下。
对键的识别通常有两种方法:
一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。
对照图3.1所示的4×4键盘,说明线反转个工作原理。
首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。
方法是:
向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。
如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。
判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。
方法是:
依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。
具体的功能设计如下
按键说明
采用4X4键盘输入,键盘对应名称如下:
123A
456B
789C
*0#D
其中,【0—9】为数字键,用于输入相应的密码,
【*】号键为取消当前操作
【#】号键为确认
其它键无功能及定义
3.2开关电路
电磁继电器的工作原理和特性
电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。
只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。
当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)吸合。
这样吸合、释放,从而达到了在电路中的导通、切断的目的。
对于继电器的“常开、常闭”触点,可以这样来区分:
继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。
当输入正确密码时,二极管导通发光。
输入错误密码时,二极管不能导通。
3.3报警电路
当输入错误密码时,电路中蜂鸣器开始报警。
当输入密码错误三次时,蜂鸣器持续报警,并锁定键盘
3.4密码存储模块
密码经过修改后,存储在AT24C02中,从而实现掉电保护
3.5复位电路
复位操作完成单片机片内电路的初始化,使单片机从一种确定的状态开始运行。
当8XX51单片机的复位引脚RST出现5ms以上的高电平时单片机就完成了复位操作。
如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序。
因此要求复位后能脱离复位状态。
根据应用的要求,复位操作通常有两种基本形式:
上电复位、开关复位。
上电复位要求接通电源后,自动实现复位操作。
第四章程序设计
主程序设计流程图如图5-1所示。
N
Y
NNY
图5-1主程序流程图
键功能程序流程图如图5-2所示。
Y
N
Y
N
Y
N
Y
N
图5-2键功能流程图
开锁程序流程图如图5-3所示。
Y
图5-3开锁流程图
第五章系统调试
先在proteus中仿真出来结果,能够达到预期目标。
通过自己的焊接,使得实物的密码锁也成功满足要求。
当输入正确密码时,液晶显示屏上显示open,且绿灯亮。
当输入密码错误时,屏上显示error,且发出滴滴滴的报警声。
第六章总结
作为一名电气专业的大三学生,我觉得做利用单片机做电子综合设计设计是十分有意义的,而且是十分必要的。
在已度过的大学时间里,我们大多数接触的是专业基础课。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?
如何把我们所学的专业基础课理论知识运用到实践中去呢?
我想做类似的电子综合设计就为我们提供了良好的实践平台。
在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。
我们是在做电子综合设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。
其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:
protel99制图、汇编语言、c语言等。
虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。
最后,要做好一个电子综合设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。
在焊接完成了调试的过程中,也出现了一些问题,一开始,液晶屏不亮,则根据情况找出原因是没有调节滑动变阻器改变灰度。
当屏幕有显示之后,发现密码总是存不进去,则进一步找出是AT24c02连接有问题,经过反复的检查电路,发现其正极没有连接,经过连接之后,终于实现了理想的功能。
在整个电子设计的过程当中,发现问题,并解决问题,才是我们急需锻炼的能力。
另外,这次课程设计让我感到了团队合作的重要性。
在团队中,我们互帮互助,对整个课程设计来说,这是至关重要的,缺少每一个人都会对我们的设计产生影响。
几周的课程设计结束了,但是从中学到的知识会让我受益终身。
发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。
同时意识到自己还有很多不足的地方,以后还得继续改进,争取做到越来越好。
第七章参考文献
1康华光.电子技术基础(模拟部分).第五版.高等教育出版社
2赵晓安.MCS-51单片机原理及应用.天津:
天津大学出版社,2001.3
3李广第.单片机基础.第1版.北京:
北京航空航天大学出版社,1999
4袁小平.电子技术综合设计教程.机械工业出版社
5谭浩强.C程序设计.清华大学出版社
附录:
A
程序如下:
#include
#include
#defineLCM_DataP0
#defineucharunsignedchar
#defineuintunsignedint
#definew6//定义密码位数
sbitlcd1602_rs=P2^5;
sbitlcd1602_rw=P2^6;
sbitlcd1602_en=P2^7;
sbitScl=P3^4;//24C02串行时钟
sbitSda=P3^5;//24C02串行数据
sbitALAM=P2^1;//报警
sbitKEY=P2^0;//开锁
sbitopen_led=P2^2;//开锁指示灯
bitoperation=0;//操作标志位
bitpass=0;//密码正确标志
bitReInputEn=0;//重置输入充许标志
bits3_keydown=0;//3秒按键标志位
bitkey_disable=0;//锁定键盘标志
unsignedcharcountt0,second;//t0中断计数器,秒计数器
voidDelay5Ms(void);
unsignedcharcodea[]={0xFE,0xFD,0xFB,0xF7};//控盘扫描控制表
unsignedcharcodestart_line[]={“password:
“};
unsignedcharcodename[]={“===CodedLock===”};//显示名称
unsignedcharcodeCorrect[]={“correct“};//输入正确
unsignedcharcodeError[]={“error“};//输入错误
unsignedcharcodecodepass[]={“pass“};
unsignedcharcodeLockOpen[]={“open“};//OPEN
unsignedcharcodeSetNew[]={“SetNewWordEnable”};
unsignedcharcodeInput[]={“input:
“};//INPUT
unsignedcharcodeResetOK[]={“ResetPasswordOK“};
unsignedcharcodeinitword[]={“Initpassword...”};
unsignedcharcodeEr_try[]={“error,tryagain!
”};
unsignedcharcodeagain[]={“inputagain“};
unsignedcharInputData[6];//输入密码暂存区
unsignedcharCurrentPassword[6]={1,3,1,4,2,0};//当前密码值
unsignedcharTempPassword[6];
unsignedcharN=0;//密码输入位数记数
unsignedcharErrorCont;//错误次数计数
unsignedcharCorrectCont;//正确输入计数
unsignedcharReInputCont;//重新输入计数
unsignedcharcodeinitpassword[6]={0,0,0,0,0,0};
//=====================5ms延时==============================
voidDelay5Ms(void)
{
unsignedintTempCyc=5552;
while(TempCyc--);
}
//===================400ms延时==============================
voidDelay400Ms(void)
{
unsignedcharTempCycA=5;
unsignedintTempCycB;
while(TempCycA--)
{
TempCycB=7269;
while(TempCycB--);
}
}
//=============================================================================================
//================================24C02========================================================
//=============================================================================================
voidmDelay(uintt)//延时
{
ucharI;
while(t--)
{
for(i=0;i<125;i++)
{;}
}
}
voidNop(void)//空操作
{
_nop_();
_nop_();
_nop_();
_nop_();
}
/*起始条件*/
voidStart(void)
{
Sda=1;
Scl=1;
Nop();
Sda=0;
Nop();
}
/*停止条件*/
voidStop(void)
{
Sda=0;
Scl=1;
Nop();
Sda=1;
Nop();
}
/*应答位*/
voidAck(void)
{
Sda=0;
Nop();
Scl=1;
Nop();
Scl=0;
}
/*反向应答位*/
voidNoAck(void)
{
Sda=1;
Nop();
Scl=1;
Nop();
Scl=0;
}
/*发送数据子程序,Data为要求发送的数据*/
voidSend(ucharData)
{
ucharBitCounter=8;
uchartemp;
do
{
temp=Data;
Scl=0;
Nop();
if((temp&0x80)==0x80)
Sda=1;
else
Sda=0;
Scl=1;
temp=Data<<1;
Data=temp;
BitCounter--;
}
while(BitCounter);
Scl=0;
}
/*读一字节的数据,并返回该字节值*/
ucharRead(void)
{
uchartemp=0;
uchartemp1=0;
ucharBitCounter=8;
Sda=1;
do{
Scl=0;
Nop();
Scl=1;
Nop();
if(Sda)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}
while(BitCounter);
return(temp);
}
voidWrToROM(ucharData[],ucharAddress,ucharNum)
{
ucharI;
uchar*Pdata;
Pdata=Data;
for(i=0;i { Start(); Send(0xa0); Ack(); Send(Address+i); Ack(); Send(*(Pdata+i)); Ack(); Stop(); mDelay(20); } } voidRdFromROM(ucharData[],ucharAddress,ucharNum) { ucharI; uchar*Pdata; Pdata=Data; for(i=0;i { Start(); Send(0xa0); Ack(); Send(Address+i); Ack(); Start(); Send(0xa1); Ack(); *(Pdata+i)=Read(); Scl=0; NoAck(); Stop(); } } //================================================================================================== //=======================================LCD1602==================================================== //================================================================================================== #defineyi0x80//LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80) #defineer0x80+0x40//LCD第二行初始位置(因为第二行第一个字符位置地址是0x40) //----------------延时函数,后面经常调用---------------------- voiddelay(uintxms)//延时函数,有参函数 { uintx,y; for(x=xms;x>0;x--) for(y=110;y>0;y--); } //--------------------------写指令--------------------------- write_1602com(ucharcom)//****液晶写入指令函数**** { lcd1602_rs=0;//数据/指令选择置为指令 lcd1602_rw=0;//读写选择置为写 P0=com;//送入数据 delay (1); lcd1602_en=1;//拉高使能端,为制造有效的下降沿做准备 delay (1); lcd1602_en=0;//en由高变低,产生下降沿,液晶执行命令 } //-------------------------写数据----------------------------- write_1602dat(uchardat)//***液晶写入数据函数**** { lcd1602_rs=1;//数据/指令选择置为数据 lcd1602_rw=0;//读写选择置为写 P0=dat;//送入数据 delay (1); lcd1602_en=1;//en置高电平,为制造下降沿做准备 delay (1); lcd1602_en=0;//en由高变低,产生下降沿,液晶执行命令 } //-------------------------初始化------------------------- voidlcd_init(void) { write_1602com(0x38);//设置液晶工作模式,意思: 16*2行显示,5*7点阵,8位数据 write_1602com(0x0c);//开显示不显示光标 write_1602com(0x06);//整屏不移动,光标自动右移 write_1602com(0x01);//清显示 } //======================================================================================== //========================================================================================= //==============将按键值编码为数值========================= unsignedcharcoding(unsignedcharm) { unsignedchark; switch(m) { case(0x18): k=1;break; case(0x28): k=2;break; case(0x48): k=3;break; case(0x88): k=’A’;break; case(0x14): k=4;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子密码锁 总结报告 李超 电气093班 电子 密码锁 电气 093
![提示](https://static.bdocx.com/images/bang_tan.gif)