电子密码锁课程设计单片机原理及应用课程设计.docx

上传人:b****7 文档编号:8676256 上传时间:2023-02-01 格式:DOCX 页数:28 大小:343.14KB
下载 相关 举报
电子密码锁课程设计单片机原理及应用课程设计.docx_第1页
第1页 / 共28页
电子密码锁课程设计单片机原理及应用课程设计.docx_第2页
第2页 / 共28页
电子密码锁课程设计单片机原理及应用课程设计.docx_第3页
第3页 / 共28页
电子密码锁课程设计单片机原理及应用课程设计.docx_第4页
第4页 / 共28页
电子密码锁课程设计单片机原理及应用课程设计.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

电子密码锁课程设计单片机原理及应用课程设计.docx

《电子密码锁课程设计单片机原理及应用课程设计.docx》由会员分享,可在线阅读,更多相关《电子密码锁课程设计单片机原理及应用课程设计.docx(28页珍藏版)》请在冰豆网上搜索。

电子密码锁课程设计单片机原理及应用课程设计.docx

电子密码锁课程设计单片机原理及应用课程设计

渝州科技职业学院

 

电子密码锁

 

院系:

电子信息工程学院

专业班级:

学生姓名:

学号:

指导教师姓名:

指导教师职称:

1绪论………………………………………………………………………………3

1.1电子密码锁简介………………………………………………………………3

1.2本设计所要实现的目标………………………………………………………3

1.3设计方案简介…………………………………………………………………3

2.1设计框图………………………………………………………………………4

2.2设计原理………………………………………………………………………4

3硬件系统构成……………………………………………………………………4

3.1主要源器件……………………………………………………………………4

3.2电路总体构成…………………………………………………………………5

3.3电源输入电路…………………………………………………………………5

3.4键盘输入电路…………………………………………………………………5

3.5密码存储电路…………………………………………………………………6

3.6复位电路……………………………………………………………………6

3.7晶振电路……………………………………………………………………7

3.8显示电路……………………………………………………………………8

3.9报警电路……………………………………………………………………8

3.10开锁电路……………………………………………………………………9

4软件系统设计……………………………………………………………………10

4.1主程序流程图………………………………………………………………10

4.2按键软件设计………………………………………………………………11

4.3密码设置软件设计…………………………………………………………12

4.4开锁软件设计………………………………………………………………13

结论…………………………………………………………………………………15

参考文献……………………………………………………………………………15

附录…………………………………………………………………………………15

附录1硬件原理图…………………………………………………………………15

附录2C语言程序…………………………………………………………………15

 

1绪论

1.1电子密码锁简介

电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。

它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。

现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。

其性能和安全性已大大超过了机械锁。

其特点如下:

1)保密性好,编码量多,远远大于弹子锁。

随机开锁成功率几乎为零。

2)密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因

人员的更替而使锁的密级下降。

3)误码输入保护,当输入密码多次错误时,报警系统自动启动。

4)无活动零件,不会磨损,寿命长。

5)使用灵活性好,不像机械锁必须佩带钥匙才能开锁。

1.2本设计所要实现的目标

本设计采用单片机为主控芯片,结合外围电路,组成电子密码锁,用户想要打开锁,必先通过提供的键盘输入正确的密码才能将锁打开,密码输入错误有提示,为了提高安全性,当密码输入错误三次将报警。

密码可以有用户自己修改设定,锁打开后才能修改密码。

修改密码之前必须再次输入就的密码,在输入新密码的时候要二次确认,以防止误操作。

1.3设计方案简介

采用以单片机为核心的控制方案

由于单片机种类繁多,各种型号都有其一定的应用环境,因此在选用时要多加比较,合理选择,以期获得最佳的性价比。

一般来说在选取单片机时从下面几个方面考虑:

性能、存储器、运行速度、I/O口、定时/计数器、串行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性,除了以上的一些的还有一些最基本的比如:

中断源的数量和优先级、工作温度范围、有没有低电压检测功能、单片机内有无时钟振荡器、有无上电复位功能等。

在开发过程中单片机还受到:

开发工具、编程器、开发成本、开发人员的适应性、技术支持和服务等等因素。

基于以上因素本设计选用单片机80C51作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。

在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接AT24C02芯片用于密码的存储,外接LCD1602显示器用于显示作用。

当用户需要开锁时,先按键盘开锁键之后按键盘的数字键0-9输入密码。

密码输完后按下确认键,如果密码输入正确则开锁,不正确显示密码错误重新输入密码,当三次密码错误则发出报警;当用户需要修改密码时,先按下键盘设置键后输入原来的密码,只有当输入的原密码正确后才能设置新密码。

新密码输入无误后按确认键使新密码将得到存储,密码修改成功。

2系统总体方案设计

2.1设计框图

设计框图见图2-1。

图2-1系统设计框图

2.2基本原理

本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。

其中矩阵键盘用于输入数字密码和进行各种功能的实现。

由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用时只要将单片机的负载由继电器换成电子密码锁的电磁铁吸合线圈即可,当然也可以用继电器的常开触点去控制电磁铁吸合线圈。

本系统共有两部分构成,即硬件部分与软件部分。

其中硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、建功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。

3硬件系统设计

3.1主要源器件

1、主控芯片80C51

2、存储芯片AT24C02

3、LCD16022显示器

4、晶体振荡器

3.2电路总体构成

电路总体构成图见图3-1。

图3-1电路总体构成图

3.3电源输入电路

密码锁主要控制部分电源需要用5V直流电源供电,其电路如图3-2所示,而5V电源输入时往往伴有杂波,所以加一个2.2uF的电容滤波。

这样输出的电压一般能满足要求。

图3-2电源输入电路原理图

3.4键盘输入电路

由于本设计所用到的按键数量较多而不适合用独立按键式键盘。

采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。

本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。

键盘的每个按键功能在程序设计中设置。

其大体功能(看键盘按键上的标记)及与单片机引脚接法见图3-3。

图3-3键盘输入原理图

3.5密码存储电路

AT24C02是ATMEL公司的2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。

其电路见图3-4。

图3-4AT24C02引脚图

图中1、2、3脚是三条地址线,用于确定芯片的硬件地址,在80C51上它们都能接地,第5脚和第8脚分别为正、负电源。

AT24C02中带有片内地址寄存器,每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个储存单元的读写,所有字节均以单一操作方式读取。

3.6复位电路

单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后PC=0000H,使单片机从第—个单元取指令。

无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。

在复位期间(即RST为高电平期间),P0口为高组态,P1-P3口输出高电平;外部程序存储器读选通信号PSEN无效。

地址锁存信号ALE也为高电平。

根据实际情况选择如图2-8所示的复位电路。

该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C1足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。

增加手动复位按键是为了避免死机时无法可靠复位。

当复位按键按下后电容C1通过R5放电。

当电容C1放电结束后,RST端的电位由R11与R15分压比决定。

由于R11<

R11的作用在于限制按键按下瞬间电容C1的放电电流,避免产生火花,以保护按键触电。

复位电路原理图见图3-5。

图3-5复位电路原理图

3.7晶振电路

AT89C51引脚XTAL1和XTAL2与晶体振荡器及电容C2、C1按图3-6所示方式连接。

晶振、电容C2/C3及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在0~33MHz之间,电容C2、C3取值范围在5~30pF之间。

根据实际情况,本设计中采用12MHZ做系统的外部晶振。

电容取值为20pF。

图3-6晶振电路原理图

3.8显示电路

为了提高密码锁的密码显示效果能力。

本设计的显示部分由液晶显示器LCD1602取代普通的数码管来完成。

只有按下键盘上的开启按键后,显示器才处于开启状态。

同理只有按下关闭按键后显示器才处于关闭状态。

否则显示器将一直处于初始状态,当需要对密码锁进行开锁时,按下键盘上的开锁按键后利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。

当密码输入完成时,按下确认键,如果输入的密码正确的话,LCD子显示“RIGHT”,单片机其中P2.0引角会输出低电平,使三极管T2导通,电磁铁吸合,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“ERROR”,P2.0输出的是高电平,电子密码锁不能被打开。

通过LCD显示屏,可以清楚的判断出密码锁所处的状态。

其显示部分引脚接口见图3-7。

图3-7显示电路原理图

3.9报警电路

报警部分由陶瓷压电发声装置及外围电路组成,加电后不发声,当有键按下时,“叮”声,每按一下,发声一次,密码正确时,不发声直接开锁,当密码输入错误时,单片机的P2.1引脚为低电平,三极管T3导喇叭发出噪鸣声报警。

见图3-8。

图3-8报警电路原理图

3.10开锁电路

通过单片机开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的。

其原理见图3-9。

图3-9密码锁开锁机构示意图

当用户输入的密码正确时,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。

其实际电路见图3-10。

电路由驱动和开锁两级组成。

由D1、R12、Q1组成驱动电路,其中Q1可以选择普通的小功率三极管如8050、9018都可以满足要求。

D1是开锁指示灯;由D2、C5组成开锁。

其中D2、C5是为了消除电磁锁可能产生的反向高电压以及可能产生的电磁干扰。

电磁锁的选用要视情况而定,但是吸合力要足够且有一定的余量。

在设计中,暂时用发光二极管代替电磁锁,发光管亮,表示开锁;灭,表示没有开锁。

图3-10开锁电路原理图

4系统软件设计

4.1主程序流程图

如图4-1为主程序流程图,开始接上电源,程序进行初始化设置,然后在键盘上输入密码,此系统进行键盘扫描,密码正确,开锁成功,密码错误3次出错报警,选择是否修改密码,若要修改密码,先输入旧密码,密码正确后设置新密码,错误时报警,需要两次确认新密码,确认后,密码修改成功,否则结束最终返回。

然后启动程序,进行保护,再次在键盘上输入密码,系统进行扫描,如果和之前一样,则执行相同程序,如不是,则执行另一种程序。

图4-1主程序流程图

4.2按键软件设计

如图4-2按键功能流程图,在按键当中,有与输入、开锁、清除、设置、确认的程序相对应的按键,并按顺序与输入的数相比较,当输入正确时,进入密码程序,错误时进行清除,输入两次新密码正确时,可进行重新设置密码,最后确认程序。

 

图4-2按键功能流程图

 

4.3密码设置软件设计

如图4-3为密码设置流程图,开始按下设置键,输入旧密码,如果错误累计三次,进行报警程序。

如果输入正确,可以修改密码,确认后再次输入新密码,如果两次输入一样,则输入成功。

如果两次输入的新密码不一样,则修改密码失败,重新返回设置新密码。

 

图4-3密码设置流程图

4.4开锁软件设计

如图4-4开锁流程图,开始时按开锁键,输入密码,如果输入正确,则开锁成功。

如果输入错误累计达到三次,则执行报警程序。

 

图4-4开锁流程图

结论

在此次课程设计中,首先是Proteus和Keil软件使用的不熟练造成了一定的阻碍,经过一段时间的使用和练习克服了该困难。

其次,对于模块结构程序.要一个个子程序分别调试。

调试时,一定要符合入口条件和出口条件,调试可用单步运行和断点运行方式,通过检查用者系统的CPU现场情况、RAM的内容和I/O口的状态,检测程序执行结果是否符合设计要求,有无循环错误、有无机器码错误以及转移地址的错误,该问题的解决消耗了相当长的时间。

同时,还可以发现系统中存在的硬件设计错误和软件算法错误。

各程序模块通过后,则可以把相关功能块连在一起进行总调。

这个阶段若有故障,可以考虑各子程序运行时是否破坏了现场,缓冲单元、工作寄存器是否发生冲突,标志位的建立和清除是否有误,堆栈区是否有溢出,输入设备的状态是否正常等等,若用者系统是在开发机的监控程序下运行时,还要考虑用者缓冲单元是否和监控程序的工作单元发生冲突。

单步和断点调试后,还应进行连续调试,用以确定定时精度、CPU的实时响应等问题。

当全部调试和修改完成后,将程序固化到80C51中。

进行整机调试。

各功能实现则调试完成。

附录

附录1硬件原理图

附录2C语言程序

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineLCDIOP0

#definedelay4us()_nop_();_nop_();_nop_();_nop_();

ucharbuffer[6]={0};

sbitsda=P3^4;

sbitscl=P3^3;

sbitbeep=P3^7;

sbitrelay=P2^3;

sbithuifu=P2^6;

bitflag=0,aa;//用户zi定时溢出标志位

ucharDSY_BUFFER[16]="";

ucharDSY_BUFFER1[16]="";

ucharUserpassword[6]={0};

ucharMem[6]={0};

sbitrs=P2^0;

sbitrd=P2^1;

sbitlcden=P2^2;

sbitled=P2^4;

sbitled1=P2^7;

ucharcodetable2[]="123456";

ucharcodetable[]="Inputyourcode:

";

voiddelayms(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voiddelay()//短延时,两个机器周期,做总线的延时用

{;;}

voidwrite_com(ucharcom)

{

rs=0;

rd=0;

lcden=0;

P0=com;

delayms(3);

lcden=1;

delayms(3);

lcden=0;

}

voidwrite_date(uchardate)

{

rs=1;

rd=0;

lcden=0;

P0=date;

delayms(3);

lcden=1;

delayms(3);

lcden=0;

}

voidDisplay_String(uchar*p,ucharcom)

{uchari;

write_com(com);

for(i=0;i<16;i++)

{

write_date(p[i]);

}

}

voidinit_lcd()

{

lcden=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

Display_String(table,0x80);

Display_String("===LockOK!

======",0xc0);

}

voidstart()

{

sda=1;

scl=1;

delay4us();

sda=0;

delay4us();

scl=0;

}

voidstop()

{

sda=0;

scl=1;

delay4us();

sda=1;

delay4us();

scl=0;

}

voidinit()//初始化

{

sda=1;

delay();

scl=1;

delay();

}

 

voidack()

{

sda=0;

scl=1;

delay4us();

scl=0;

sda=1;

}

voidnoack()

{

sda=1;

scl=1;

delay4us();

scl=0;

sda=0;

}

ucharrecbyte()

{

uchari,rd;

rd=0x00;

sda=1;

for(i=0;i<8;i++)

{

scl=1;

rd<<=1;

rd|=sda;

delay4us();

scl=0;

delay4us();

}

scl=0;

delay4us();

returnrd;

}

ucharsendbyte(ucharwd)

{

uchari;

bitack0;

for(i=0;i<8;i++)

{

sda=(bit)(wd&0x80);

_nop_();

_nop_();

scl=1;

delay4us();

scl=0;

wd<<=1;

}

delay4us();

sda=1;

scl=1;

delay4us();

ack0=!

sda;

scl=0;

delay4us();

returnack0;

}

ucharRecstring(ucharslave,ucharsubaddr,uchar*buffer,ucharn)

{

uchari;

start();

if(!

sendbyte(slave))return0;

if(!

sendbyte(subaddr))return0;

start();

if(!

sendbyte(slave+1))return0;

for(i=0;i

{

buffer[i]=recbyte();

ack();

}

buffer[n-1]=recbyte();

noack();

stop();

return1;

}

ucharSendstring(ucharslave,ucharsubaddr,uchar*buffer,ucharn)

{

uchari;

start();

if(!

sendbyte(slave))return0;

if(!

sendbyte(subaddr))return0;

for(i=0;i

{

if(!

sendbyte(buffer[i]))return0;

}

stop();

return1;

}

voidclear_password()

{uchari;

for(i=0;i<6;i++)

{

Userpassword[i]='';

}

for(i=0;i<16;i++)

{

DSY_BUFFER[i]='';

}

}

ucharKeys_Scan()

{

uchartemp,keynum;

P1=0x0F;

delayms(5);

temp=P1^0x0F;//扫描行线值

switch(temp)

{

case1:

keynum=1;break;

case2:

keynum=4;break;

case4:

keynum=7;break;

case8:

keynum=10;break;

break;

}

P1=0xF0;

delayms(5);

temp=P1>>4^0x0f;

switch(temp)

{

case8:

keynum+=0;break;

case4:

keynum+=1;break;

case2:

keynum+=2;break;

case1:

keynum+=12;break;

break;

}

delayms(600);

returnkeynum;

}

voidmain()

{uchartemp,i=0,j=0,k=0,n,m=0,flay,error,ne=1;

ucharIS_valid_user;

relay=1;

init();

init_lcd();

delayms(5);

P1=0x0f;

while

(1)

{if(!

huifu==1)

{aa=Sendstring(0xa0,1,table2,6);

delayms(10);

aa=Recstring(0xa0,1,buffer,6);

}

else

aa=Recstring(0xa0,1,buffer,6);

if(P1!

=0x0f)

{delayms(10);

if(P1!

=0x0f)

{

temp=Keys_Scan();

switch(temp)

{

case11:

temp=0;case1:

case2:

case3:

case4:

case5:

case6:

case7:

case8:

case9:

i

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

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1