数字式密码电子锁电路设计.docx

上传人:b****4 文档编号:26994320 上传时间:2023-06-24 格式:DOCX 页数:34 大小:154.80KB
下载 相关 举报
数字式密码电子锁电路设计.docx_第1页
第1页 / 共34页
数字式密码电子锁电路设计.docx_第2页
第2页 / 共34页
数字式密码电子锁电路设计.docx_第3页
第3页 / 共34页
数字式密码电子锁电路设计.docx_第4页
第4页 / 共34页
数字式密码电子锁电路设计.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

数字式密码电子锁电路设计.docx

《数字式密码电子锁电路设计.docx》由会员分享,可在线阅读,更多相关《数字式密码电子锁电路设计.docx(34页珍藏版)》请在冰豆网上搜索。

数字式密码电子锁电路设计.docx

数字式密码电子锁电路设计

课程设计任务书

学生姓名:

专业班级:

指导教师:

工作单位:

题目:

数字式密码电子锁电路设计

初始条件:

本设计既可以使用集成电路和必要的元器件等。

本设计也可以使用单片机系统构建数字密码电子锁。

自行设计所需工作电源。

电路组成原理框图见图1,数字密码锁的实际锁体一般由电磁线圈、锁栓、弹簧和锁柜构成。

当线圈有电流时,产生磁力,吸动锁栓,即可开锁。

反之则不开锁。

图1数字式电子锁电路原理框图

要求完成的主要任务:

(包括课程设计工作量及技术要求,以及说明书撰写等具体要求)

1、课程设计工作量:

1周。

2、技术要求:

课程设计中,锁体用LED代替(如“绿灯亮”表示开锁,“红灯亮”表示闭锁)。

其密码为方4位(或8位)二进制代码(代码自设定)。

开锁指令为串行输入码,当开锁密码与存储密码一致时,锁被打开。

当开锁密码与存储密码不一致时,可重复进行,若连续三次未将锁打开,电路则报警并实现自锁。

(报警动作为响1分钟,停10秒)

选择电路方案,完成对确定方案电路的设计。

计算电路元件参数与元件选择、并画出总体电路原理图,阐述基本原理。

安装调试设计电路。

3、查阅至少5篇参考文献。

按《武汉理工大学课程设计工作规范》要求撰写设计报告书。

全文用A4纸打印,图纸应符合绘图规范。

时间安排:

1、2012年7月1日集中,作课设具体实施计划与课程设计报告格式的要求说明。

2、2012年7月1日,查阅相关资料,学习电路的工作原理。

2、2012年7月2日至2012年7月3日,方案选择和电路设计。

2、2012年7月4日至2012年7月5日,电路调试和设计说明书撰写。

3、2012年7月6日上交课程设计成果及报告,同时进行答辩。

课设答疑地点:

鉴主14楼实验室。

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

摘要

本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。

系统能完成开锁、超时报警、超次锁定、声光提示、修改用户密码基本的密码锁的功能。

依据实际的情况还可以添加管理员解密、调电存储、遥控功能。

本系统成本低廉,功能实用

关键词:

电子密码锁,单片机系统,液晶显示,密码检验

1.绪论

随着人们生活水平的提高,家庭防盗这一问题越来越引人注目,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐。

设计本课题时构思了两种方案:

一种是用以MSP430为主控芯片的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。

考虑到数字电路方案电路复杂,控制度比较低,难以满足现在的安全需求,所以本设计采用前一种方案。

本次课程设计就是利用所学的数字电路知识,忽略复杂的实物锁体器件的驱动,简单模拟实现数字密码锁原理功能,从而复习相关知识,达到理论与实践相结合的目的。

2.设计内容及要求

2.1设计的初始条件及主要任务

课程设计中,锁体用LED代替(如“绿灯亮”表示开锁,“红灯亮”表示闭锁)。

其密码为方4位(或8位)二进制代码(代码自设定)。

开锁指令为串行输入码,当开锁密码与存储密码一致时,锁被打开。

当开锁密码与存储密码不一致时,可重复进行,若连续三次未将锁打开,电路则报警并实现自锁。

(报警动作为响1分钟,停10秒)

选择电路方案,完成对确定方案电路的设计。

计算电路元件参数与元件选择、并画出总体电路原理图,阐述基本原理。

安装调试设计电路。

2.2设计思路

本次的设计任务,运用集成逻辑器件组成的门电路也可以完成,但是考虑到输入信号的数量、逻辑判断的复杂度可以预知其数字逻辑电路会是相当复杂的。

而运用具有可以写入程序,按程序完成相关逻辑判断、电平控制的单片机芯片则会大大降低系统的复杂度,因此基于单片机来完成此次设计成为了总体设计方案的首选。

本设计使用的是MSP430单片机,该单片机芯片功能齐全,体积小,性价比高,使用该芯片可以轻易完成该设计任务。

配合上外围电路独立按键、1602液晶、蜂鸣器和LED灯构成整个系统。

实物电路体积小巧,结构精简。

设计从总体可以分为硬件与软件两个部分。

在硬件部分中,由单片机最小系统、1602液晶显示模块、按键控制模块和声光报警模块几个部分构成,其相关控制关系如图2.1;在软件部分中,由按键键值读取、1602液晶显示函数、延时模块、密码读取模块、密码设置模块、密码比较模块、密码找回模块、声光状态模块等几部分组成。

系统整体框架图如下:

MSP430

单片机

LCD1602显示电路

独立按键控制电路

声光指示电路

Flash掉电存储

图2.2系统整体框架图

3.模块硬件电路设计

3.1单片机最小系统

此为一个单片机最小系统,其有P1~P6六组I/O口,可以进行相关的电平状态读取与控制操作。

最小系统中使用了两个晶振,32768Hz的低速晶振和8MHz的高速晶振,为系统提供可选择的时钟源。

由于MSP430单片机工作电压为3.3V,故最小系统中使用了输出3.3V的稳压电路。

最小系统电路图如图3.1所示:

 

 

图3.1单片机最小系统

3.2独立按键

本设计使用了三个独立按键进行电路设计控制,硬件结构简单,免去了矩阵键盘的大体积,通过程序控制可以通过独立按键输入2进制和10进制数,使用方便。

其电路图如图3.2所示:

图3.2独立按键电路

3.31602液晶显示

图3.3为1602液晶的引脚分布。

1,2为液晶显示供电,3接滑动变阻器改变3的相对电位,调节显示对比度。

4,5,6为液晶的控制端,其中5脚是使能端,为方便使用,直接将其接地让其有效工作。

7~14为液晶的数据输入端,15、16为液晶背光的电源接口。

17,18可以悬空不接。

 

图3.31602液晶显示

3.4声光显示

光显示有红绿两种颜色的发光二极管组成,负极接单片机引脚,正极结一个限流电阻后接地。

当单片机输出高电平,其不亮,当单片机输出低电平,二极管点亮。

(图略)

声信号告警有长鸣蜂鸣器与一个三极管、电阻组成,三极管在单片机的控制下驱动蜂鸣器正常工作。

长鸣蜂鸣器,在给予有效电平时可以不间断的以一定的频率发出蜂鸣。

如图3.4所示:

 

 

图3.4蜂鸣器工作电路

4.模块软件程序设计

4.1独立按键键值读取模块

独立按键接在P1口的低三位,由于只用了三个独立按键,所以每个按键有多种功能,这需要在软件中设置一些标志变量,在不同的状态下不同的标志变量置位,按键的功能也随之发生改变。

比如在输入密码的时候其中两个按键是用来输入2进制值,当找回密码时那两个按键的功能又变成了输入十进制值。

按键的读取是通过MSP430单片机的P1口的外部中断读取的,按下按键,IO口接收一个下降沿,触发中断,再根据各IO的高低电平,判断所按下按键,从而可以读取按键值。

4.21602液晶显示模块

1602具有三个工作状态控制端,调节他们的高低变化配合数据口的信息,可以显示2×16的字母或者数字,通过子函数可以实现检测初始化LCD、写指令到LCD、LCD状态、LCD清屏、输入一个字节数据到LCD、LCD光标定位到x处、LCD光标归位、输入一个字符到LCD、输入一个字符串到LCD等功能。

4.3密码输入及读取模块

密码的读取是在密码输入的界面状态下进行的,在其他界面下按键不能输入密码。

输入过程中密码的显示是“*”号,从而有保密的功能。

四位二进制数输入完成时密码读取功能也同时完成。

4.4密码比较模块

密码读取完毕后系统就会自动进行密码比较,当四位二进制输入值和设定密码的四位二进制值都相同时,密码正确,显示开锁成功;当不相等时,密码错误,自动回到密码重新输入状态,在此状态下可以再次输入密码。

但是,当三次密码都错误时密码锁便会锁住,不能再次输入密码,在此时只能使用找回密码功能。

4.5密码找回模块

当密码输入错误的时候可以进行找回密码,找回密码的过程实际上就是一个回答密保问题的过程,本设计在程序中设定了一个密保问题是“Mybirthday?

”,当开锁者在此时界面下输入“0829”四位十进制数即可找回密码,找回的密码显示在1602液晶上;但是,如果在找回密码的过程中回答错误锁体便会终极锁住,不能再次输入任何值,也不能再次找回密码,只能通过复位程序恢复。

4.6密码修改模块

为了达到修改密码的目的,在输入密码正确时可以进入修改密码界面,在此界面下可以输入四位二进制密码。

同样为了保密,输入密码过程中同样是显示“*”。

输完四位二进制密码后还需再次输入密码以确定修改密码,只有当两次输入的密码一样密码才会被修改,否则需要重复确认修改密码。

4.7声光状态模块

本模块通过读取相关控制变量,控制声光部件的状态。

当闭锁状态点亮红灯,开锁状态点亮绿灯;当需要进行异常告警时,利用延时函数周期性的变换蜂鸣器的响静。

鸣响状态下,响250ms,停250ms;鸣响状态保持50s后,静止10s,后继续进入鸣响状态,如此反复。

在三次密码错误时发生异常告警,找回密码后告警停止。

 

4.8系统软件流程图

综合以上模块,得到系统软件流程图如图4.8所示:

 

 

图4.8总程序流程图

图4.8.1总程序流程图

5.模块组合调试

按照前述模块进行设计,制作实物电路、编写软件程序代码,然后进行相关调试。

5.1硬件调试

由于使用了单片机,所以硬件电路比较简单,故调试过程比较顺利。

5.2软件调试

由于这个系统主要部分是软件程序,比较复杂,所以在软件调试过程中出现了一些问题,如有时不能读取按键键值,有时不能退出某个状态界面,但是通过不断调试,所有问题都已经解决,软件调试成功。

6.系统调试

综合硬件电路和软件程序进行调试,最后系统成功地实现了开锁、闭锁、修改密码、找回密码和声光报警功能。

达到并超额完成了课程设计的要求。

7.心得体会

本次课程设计不仅仅是对于一学期数字电子技术课程学习的一个简单考核,更是是我们在数电方向、电子方向继续学习深造的一个无尽动力。

在完成课程设计的过程中,遇到了一些问题,经过不断地修改,问题都被解决。

同时,自己的知识也一点点地提升。

这次课程设计也让我对我自己所学习专业有了更多的兴趣,我相信在接下来的时间里我会更加努力地学习专业知识,争取能够在专业内有所建树。

 

参考文献

[1]伍时和等.数字电子技术基础.北京:

清华大学出版社,2009.4.

[2]张天凡等.51单片机C语言开发详解.北京:

电子工业出版社,2008.6.

[3]马忠梅等.单片机的C语言应用程序设计.北京:

北京航空航天大学出版社,2007.1.

[4]梅丽凤等.单片机原理及接口技术.北京:

清华大学出版社;北京交通大学出版社,2004.2

[5]谭浩强.C程序设计(第三版).北京:

清华大学出版社,2005.7.

附录:

数字式密码电子锁程序源代码

1.主函数:

/*------------------------------------------------------------------------------

**Createdby:

XuYuanchun

**Createddate:

2012.06.02

**Version:

V1.0

**Descriptions:

Themain.coftricklock

*****************************************************/

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineulintunsignedlongint

#include"coded_lock.h"

constuchartable1_0[]="Enterpassword:

";

constuchartable2_0[]="____";

constuchartable1_1[]="^_^^_^";

constuchartable2_1[]="Welcome!

";

constuchartable1_2[]="Wrongpassword";

constuchartable2_2[]="Enteragain!

";

constuchartable1_3[]="-_--_-";

constuchartable2_3[]="LOCK";

constuchartable1_4[]="Findpassword?

";

constuchartable2_4[]="0:

No1:

Yes";

constuchartable1_5[]="Changepassword?

";

constuchartable1_6[]="Mybirthday?

";

constuchartable2_7[]="Succeed";

constuchartable1_8[]="ByeBye";

constuchartable1_9[]="Congratulation!

";

constuchartable2_9[]="Password:

0000";

constuchartable1_10[]="Newpassword:

";

constuchartable1_11[]="Makesure:

";

constuchartable2_12[]="Unequal";

 

ucharps[4],ps_1[4];

ucharnum,function,busy;

ucharlocation;

ucharerrorcount;

ucharlockflag;//Flagdefination

ucharunlockflag;

ucharanswerflag;

ucharstartflag;

ucharerrorflag;

ucharsucceedflag;

ucharchangeflag;

ucharsureflag;

ucharchangedflag;

uchartemp[4],answer[4];

uintms,s;

voidDelayms(uintz)//Delayabout1ms

{

uintx,y;

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

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

}

voidClock_Mode()//Select8MhzXT2forSMCLK

{uchari;

WDTCTL=WDTPW+WDTHOLD;//StopWDT

BCSCTL1&=~XT2OFF;//ActivateXT2highfreqxtal

do

{

IFG1&=~OFIFG;//ClearOSCFaultflag

for(i=0xFF;i>0;i--);//Timeforflagtoset

}

while(IFG1&OFIFG);//OSCFaultflagstillset?

BCSCTL2|=SELM_2+SELS;//SMCLK=XT2(8Mhz)HFXTAL(safe)

}

voidTimer_A_Init()

{

CCR0=8000;//Interruptevery1/1000s

TACTL=TACLR+MC_1+TASSEL_2;//Upmode,SMCLK

}

voidAlarm()

{

uchari;

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

{

Ab0;

Delayms(1000);

Ab1;

Delayms(1000);

}

}

/****************************Part:

LCD****************************/

voidLCD_Operation_Init()

{

uchari;

Write_Com(0x80);

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

{

Write_Date(table1_0[i]);

}

Write_Com(0x80+0x40);

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

{

Write_Date(table2_0[i]);

}

}

voidLCD_Operation_Enter()

{

Write_Com(0x80+0x40+6+location);

Write_Date('*');

}

voidLCD_Operation_Unlock()

{

uchari;

Write_Com(0x80);

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

{

Write_Date(table1_1[i]);

}

Write_Com(0x80+0x40);

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

{

Write_Date(table2_1[i]);

}

}

voidLCD_Operation_EnterAgain()

{

uchari;

Write_Com(0x80);

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

voidLCD_Operation_Question()

{

uchari;

Write_Com(0x80);

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

{

Write_Date(table1_6[i]);

}

Write_Com(0x80+0x40);

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

{

Write_Date(table2_0[i]);

}

}

voidLCD_Operation_Answer(uchari)

{

Write_Com(0x80+0x40+6+location);

Write_Com(0x0f);

Write_Date(i+0x30);

Write_Com(0x80+0x40+6+location);

}

voidLCD_Operation_Succeed()

{

uchari;

Write_Com(0x80);

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

{

Write_Date(table1_1[i]);

}

Write_Com(0x80+0x40);

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

{

Write_Date(table2_7[i]);

}

}

voidLCD_Operation_Congratulation()

{

uchari;

Write_Com(0x80);

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

{

Write_Date(table1_9[i]);

}

Write_Com(0x80+0x40);

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

{

Write_Date(table2_9[i]);

}

Write_Date(ps[0]+0x30);

Write_Date(ps[1]+0x30);

Write_Date(ps[2]+0x30);

Write_Date(ps[3]+0x30);

Write_Date('');

}

voidLCD_Operation_Bye()

{

uchari;

Write_Com(0x80);

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

{

Write_Date(table1_8[i]);

}

Write_Com(0x80+0x40);

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

{

Write_Date(table2_3[i]);

}

}

/*****************************************************************/

voidReset()

{

errorcount=0;

lockflag=0;

unlockflag=0;

answerflag=0;

startflag=0;

errorflag=0;

succeedflag=0;

changeflag=0;

Write_Com(0x0c);

}

/****************************Part:

Flash****************************/

voidFlash_Init()

{

FCTL2=FWKEY+FSSEL0+FN4+FN3;//MCLK/25forFlashTimingGenerator

}

voidFlash_Write()//Write'bj'and'waveform'toflash

{

uchari;

uchar*Flash_ptr;//Flashpointer

Flash_ptr=(uchar*)0x1080;//InitializeFlashpointer

FCTL1=FWKEY+ERASE;//SetErasebit

FCTL3=FWKEY;//ClearLockbit

*Flash_ptr=0;//DummywritetoeraseFlashsegment

FCTL1=FWKEY+WRT;//SetWRTbitforwriteoperation

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

{

*Flash_ptr++=ps[i];

}

FCTL1=FWKEY;//ClearWRTbit

FCTL3=FWKEY+LOCK;//SetLOCKbit

}

voidFlash_Read()//Read'bj'and'waveform'fromflash

{

uchari;

uchar*Flash_ptrA;

Flash_ptrA=(uchar*)0x1080;//InitializeFlashsegmentApointer

FCTL1=FWKEY;//SetErasebit

FCTL3=FWKEY+LOCK;//ClearLockbit

for(i=0;i<4;i++

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

当前位置:首页 > 求职职场 > 简历

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

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