数字式密码电子锁电路.docx
《数字式密码电子锁电路.docx》由会员分享,可在线阅读,更多相关《数字式密码电子锁电路.docx(33页珍藏版)》请在冰豆网上搜索。
数字式密码电子锁电路
课程设计任务书
学生姓名:
柯一凡专业班级:
通信1102
指导教师:
许建霞工作单位:
信息工程学院
题目:
数字式密码电子锁电路设计
初始条件:
Protel软件、PC机和相关的参考书籍如:
1.Protel99入门与提高.赵品编著.人民邮电出版社.2000.11
2.Protel99高级应用.赵品编著.人民邮电出版社.2000.11
3.Protel99SE电路设计与仿真应用
要求完成的主要任务:
1、绘制具有一定规模、一定复杂程度的电路原理图*.sch(自选)。
可以涉及模拟、数字、高频、单片机、或者一个具有完备功能的电子电路系统。
(注意:
电路选择不可过分简单,元件种类(包括电源和信号源)少于5种;或者元件个数少于10个将导致不及格。
)
2、绘制相应电路原理图的双面印刷版图*.pcb
3、
对电路原理图进行仿真,给出仿真结果(如波形*.sdf、数据)并说明是否达到设计意图。
(注意:
仿真提倡对所绘制的原理图*.sch进行全面仿真,如果不能做到全面仿真成功,则要说明原因,但要完成局部电路的仿真。
)
时间安排:
序号
设计内容
所用时间
1
选择合适的电路
1天
2
用Protel绘制相应的电路双面印刷版图,并仿真
3天
3
总结编写课程设计报告
1天
合计
1周
指导教师签名:
2014年6月10日
系主任(或责任教师)签名:
2014年6月10日
摘要
本系统以STC89C52单片机最小系统为核心,结合矩阵键盘、1602LCD和报警系统组成。
系统能完成锁闭状态显示、密码输入错误超次(大于三次)异常,系统锁定声光告警、初始化设置用户密码等基本的密码锁的功能。
除上述基本的密码锁功能外,依据实际的情况还可以添加通过超级密码重置密码、键盘背光与通过背光显示密码、系统产生随机密码等扩展空间。
ProtelDXP6将项目管理方式、原理图和PCB图的双向同步技术、多通道技术、自动布线技术以及强大的电路仿真的技术完美的融合在一起。
ProtelDXP提供了丰富的元件库,包括原理图符号。
PCB封装、SI模型及仿真模型,可以方便地进行同步修改。
这次课程设计主要要求掌握原理电路图设计、PCB设计和仿真。
关键词:
ProtelDXP,PCB设计,电子密码锁,STC89C52,液晶显示
Abstract
ThesystemSTC89C52microcomputerasthecore,combinedwithmatrixkeyboards,1602LCDandalarmsystemcomponents.Systemcancompletethelockstatusdisplay,thepasswordinputerrorandUltra(morethanthreetimes)abnormalsoundandlightalarmsystemlock,initializedtosetuserpasswords,andotherbasiclockfunction.Inadditiontothebasiclockfunction,basedontheactualsituationcanalsobeaddedthroughsuperpasswordresetyourpassword,keyboardbacklightandpasswordthroughthebacklitdisplay,thesystemgeneratesrandompasswordsforexpansion.
ProtelDXP6combineProjectmanagement,thePCBandschematicmapofthetwo-waysynchronizationtechnology,multi-channeltechnology,automaticroutingtechnologyandastrongcircuitsimulationtechnologytogetherperfectly.ProtelDXPprovidesarichlibrary,includingtheprincipleofsymbols.PCBpackage,SImodelandsimulationmodelcaneasilysynchronizeedits.Themaindemandsofthecurriculumdesignmasterprinciplecircuitdesign,PCBdesignandsimulation.
Keywords:
ProtelDXP,PCBdesigntools,electroniccodelock,STC89C52,liquidcrystaldisplay
1设计任务与要求
1.1设计任务
设计一个以单片机AT89C52为主控芯片,结合外围电路,组成电子密码锁。
用户想要打开锁,必先通过提供的键盘输入正确的密码才能将锁打开,密码输入错误有提示,为提高安全性,当密码输入错误三次将报警。
密码可以由用户自己修改设定,锁打开后才能修改密码。
修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。
完成密码锁的功能。
1.2设计要求
(1)使用protel制作数字式密码电子锁的电路原理图
(2)使用protel制作数字式密码电子锁的PCB图
(3)使用Protuse对数字式密码电子锁电路进行仿真
2原理分析
2.1单片机控制原理
本次设计选用单片机STC89C52作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁信号判断、状态保存、电平控制的功能。
设计从总体可以分为硬件和软件两个部分。
在硬件部分中,由单片机最小系统、矩阵键盘、1602液晶显示、声光显示这几个部分,其相关控制如图2-1;在软件部分中,由矩阵键盘键值读取、1602液晶显示函数、延时模块、密码读取模块、密码设置模块、密码比较模块、声光状态模块等几部分组成。
图2-1硬件模块关系
2.2模块硬件电路分析
2.2.1单片机最小系统
此为一个单片机最小系统,其有P0~P3四组I/O口,可以进行相关的电平状态读取与控制操作。
开关SW_RST为复位开关,当其接通,单片机RST9复位端至于高电位,满足一定时长后,单片机会进行复位操作,重新开始工作。
Y1、C1.2、C1.3组成了单片机的振荡电路,为单片机系统提供稳定可靠地时钟信号,协助单片机完成相关操作。
Header9为一组排阻,座位上拉电阻。
由于STC89C52使用串口方式下载程序,因此需要使用MAX232完成程序下载的处理工作。
图2-2单片机最小系统原理图
图2-3串口电路
2.2.2键盘矩阵
设计准备使用4×4键盘,对应的电路如图2-4所示。
0~9输入相应的数字。
在输入密码是L\R分别实现输入位置的左右移动,B为退格键,C为清除键,清楚当前所有的输入字符,S为功能扩展键,暂时未定义,E为确认键。
由于本设计所用到的按键数量较多而不适合用独立按键式键盘。
采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。
图2-44×4键盘矩阵
2.2.3LCM1602液晶显示
图2-5为1602液晶的引脚分布。
1,2为液晶显示供电,3接滑动变阻器改变3的相对电位,调节显示对比度。
4,5,6为液晶的控制端,调节工作状态。
7~14为液晶的数据输入端,15、16为液晶背光的电源接口。
17,18可以悬空不接。
图2-5LCM1602液晶显示
2.2.4声光显示
光显示有红绿两种颜色的发光二极管组成,负极接单片机引脚,正极结一个限流电阻后接地。
当单片机输出高电平,其不亮,当单片机输出低电平,二极管点亮。
声信号告警有长鸣蜂鸣器与一个三极管、电阻组成,三极管在单片机的控制下驱动蜂鸣器正常工作。
长鸣蜂鸣器,在给予有效电平时可以不间断的以一定的频率发出蜂鸣。
图2-6蜂鸣器工作电路
3电路原理图绘制
3.1DXP绘制电路原理图
进入ProtelDXP2004后,依次点击工具栏上的File/New/PCBProject,新建一个后缀名为prjPCB的工程文件。
图3-1新建prjPCB工程文件
接下来在刚建立的prjPCB的工程文件下点击File/New/Schematic新建一个后缀名为SchDoc的原理图,建立原理图与工程的关联。
图3-2新建原理图
在绘制原理图时,ProtelDXP2004在工具栏上提供了常用元件的快捷方式,例如电阻、电解电容、瓷片电容以及常用的与、或、非等组合逻辑门,使用起来很方便。
如果要使用其他元件则可以使用Place/Part命令打开元件选择窗口。
若使用的是比较基本的元件可以在ProtelDXP2004默认提供的元件库MiscellaneousDevices.lntLib中直接浏览。
ProtelDXP2004将元件的原理图符号,元件描述、封装号以及SI仿真模型都集中在一起显示,使用起来很方便,也在一定程度上避免了Protel99SE中不知道元件封装号的问题。
如果需要修改,可以在ModelName框中自行修改。
图3-3添加元件
如果是寻找不那么常用的元件可以在元件库管理器中选择Libraries/Search/SearchLibraries命令,再输入元件名称查找。
根据电路要求可以在DXP中加载相应的元件库,DXP中带有非常丰富的元件库,并且按照芯片的生产公司的名称分开放置,便于查找。
如果没有相应的元件,还可以通过PCB库文件编辑器来自己编辑。
图3-4加载元件库
在依照电路安放好所有元件之后再开始连线。
点击工具栏上的placewire图标进行连线操作,将各元件的引脚连接起来。
在连线时需要注意导线交叉时是否导通的问题。
如图3.5所示,第一条水平导线与竖直导线导通,但在绘图时经常忽略这一点,处理成第二条水平线。
所以在画图时应该在连接处用Place菜单下的ManualJunction工具添加一个电气结点。
图3-5连线时的结点处理
完成所有连线之后,选择File/New/TextDocument命令,开启一个数据库文本;再选择Project/ProjectOptions命令设置工程检查参数,在执行Project/CompileDocument检查系统错误。
如果提示错误则返回修改原理图,如果没有错误,则选择Design/NetlistForDocument/Protel命令生成网络表。
图3-6数字式密码电子锁原理图
3.2DXP绘制PCB图
3.2.1加载网络表
生成网络表之后,就进入了PCB板绘制的阶段。
选择File/New/PCB生成一个后缀为PcbDoc的文件。
PCB板分为很多层,主要有Top-Layer、Bottom-Layer、Mechanical、TopOverlay、Keep-Out-layer和Multi-Layer。
按步骤设置PCB板的Mechanical物理边界以及Keep-OutLayer电气边界。
先执行Design/BoardSharp/RedefineBoardSharp命令,此时光变变成十字形。
然后在Mechanical层面上划定PCB板的物理边界,最后在禁止布线层(Keep-OutLayer)上面划定电器边界。
在正确设置完成PCB板之后,在PcbDoc文件下选择Design/ImportChangesFrom命令加载网络表(或者在SchDoc文件下选择Design/UpdatePCBDocument命令),屏幕上显示详细的网络连接信息。
点击ValidateChanges按钮可以检查装入的元件封装、电器规则以及元件的网络连接是否正确,如果正确,屏幕上将显示绿色打勾标记。
再点击ExecuteChanges按钮完成元件网络表的加载。
3.2.2PCB板的排版
网络表加载完成之后,PCB根据网络表产生预拉线,在屏幕上会出现排列整齐的所有元件以及设置过的PCB板,然后PCB根据预拉线一条一条变为铜膜走线。
选定所有的元件拖至PCB板上,执行Tools/AutoPlacement/AutoPlacer/ClusterPlacer命令,DXP开始自动排版。
一般来说DXP的自动排版后的PCB板已经比较理想了,但是仍然可以手动排版进行进一步美化。
图3-7PCB手动排版
3.2.3PCB板的布线
在元件排版完毕之后,就可以进入到最后的布线阶段。
ProtelDXP2004沿袭了Protel99SE强大的自动布线功能,不仅布线快速而且合理,通过率很高。
我们可以执行AutoRoute/All命令,选择Default2LayerBoard选项,再点击RouteAll完成双层PCB板的布线。
图3-8DXP自动布线后的PCB板
DXP在完成自动布线之后显示一共布线总数,并且全部成功,至此基于DXP的PCB板设计全部制作完成。
3.3.4PCB板的覆铜
选择工具栏上的
按钮,将弹出一个对话框,如图3-9所示,在ConnecttoNet中选择GND点击OK,鼠标将变成光标,用光标将需要覆铜的区域圈起来,则得到覆铜后的顶层图,如图3-9所示,在设计工作区的板层标签选中BottomLayer,执行以上相同步骤,得到覆铜后的底层图,如图3-9。
图3-9覆铜参数设置
图3-10覆铜后的顶层图
4电路仿真及分析
(1)密码锁开始菜单
图4-1密码锁开始菜单
(2)密码锁设置初始密码
图4-2设置初始密码
(3)成功设置密码
图4-3设置密码成功提示
(4)输入错误提示
图4-4密码输入错误提示
结论:
由此可以看出,此设计的矩阵键盘键值读取,1602液晶显示模块,密码读取模块,密码设置模块比较模块,声光状态模块都能正常工作,设计成功。
5心得体会
作为电路设计必须使用的软件,ProtelDXP被现代电子设计者们广泛的使用,我们作为电子信息工程专业的学习者,理应熟练掌握这种实用性好、专业性强的软件。
经过对ProtelDXP一周的学习和应用,从开始的无法上手,到现在的马马虎虎,虽然不能说做的很好,但是自己看到了自己的进步,从这点上还是很高兴的。
本设计从经济实用的角度出发,采用美国Atmel公司的单片机AT89C52作为主控芯片与数据存储器单元,结合外围的键盘输入、显示、报警、开锁等电路并用C编写主控芯片的控制程序,研制了一款可以多次更改密码具有报警功能的电子密码锁。
设计完全可行可以达到设计目的。
使用单片机制作的电子密码锁具有软硬件设计简单,易于开发,成本较低,安全可靠,操作方便等特点。
可应用于住宅、办公室的保险箱及档案柜等需要防盗的场所,有一定的实用性。
该电路设计还具有按键有效提示,输入错误提示,控制开锁电路,控制报警电路,修改密码等多种功能。
可在意外泄密的情况下随时修改密码。
保密性强,灵活性高,特别适用于家庭、办公室、学生宿舍及宾馆等诸多场所。
与此同时本次课程设计也使我学到了关于protel软件的安装、电子线路原理图的设计、电路原理图元件库文件的设计、电子线路PCB电路板设计、PCB元件封装库设计。
但是这些内容对于我们今后的所用是远远不够的。
为此,在以后的时间里要进一步的去学习和思考,对protel要有近一步的认识,更好能熟练地掌握各种操作此软件。
6参考文献
[1]伍时和等.数字电子技术基础.北京:
清华大学出版社,2009.4.
[2]张天凡等.51单片机C语言开发详解.北京:
电子工业出版社,2008.6.
[3]李东生,许四毛.Protel电路设计教程.北京:
电子工业出版社,2010.
[4]朱定华,蔡苗.Protel原理图和印制板设计.北京:
清华大学出版社,2011.
[5]陈汝全.电子技术常用器件应用手册2版.北京:
机械工业出版社,2006.
[6]余孟尝.数字电子技术基础简明教程.2版.北京:
高等教育出版社,2007.
[7]谢自美.《电子线路设计.实验.测试》.武汉:
华中科技大学出版,2006.
附录
名称
型号
数量
备注
单片机芯片
STC89C52
1
石英晶振
12M
1
瓷片电容
33
2
105
4
电解电容
4.7uf
1
电位器
10K
1
电阻
1K
4
10K
1
10K排阻
1
LED
红色
1
绿色
1
长鸣蜂鸣器
1
三极管
8550
1
LCD显示模块
1602
1
按键开关
17
自锁开关
1
排针
若干
导线
若干
万用表
1
电工工具
1套
数字式密码电子锁程序源代码(仿真)
#include"reg52.h"
#include"string.h"
#defineLCD_DATAP0//LCD的数据口
//输入方式设置
#defineLCD_AC_AUTO_INCREMENT0x06//数据读、写操作后,AC自动增一
#defineLCD_AC_AUTO_DECREASE0x04//数据读、写操作后,AC自动减一
#defineLCD_MOVE_ENABLE0x05//数据读、写操作,画面平移
#defineLCD_MOVE_DISENABLE0x04//数据读、写操作,画面不动
//设置显示、光标及闪烁开、关
#defineLCD_DISPLAY_ON0x0C//显示开
#defineLCD_DISPLAY_OFF0x08//显示关
#defineLCD_CURSOR_ON0x0A//光标显示
#defineLCD_CURSOR_OFF0x08//光标不显示
#defineLCD_CURSOR_BLINK_ON0x09//光标闪烁
#defineLCD_CURSOR_BLINK_OFF0x08//光标不闪烁
//光标、画面移动,不影响DDRAM
#defineLCD_LEFT_MOVE0x18//LCD显示左移一位
#defineLCD_RIGHT_MOVE0x1C//LCD显示右移一位
#defineLCD_CURSOR_LEFT_MOVE0x10//光标左移一位
#defineLCD_CURSOR_RIGHT_MOVE0x14//光标右移一位
//工作方式设置
#defineLCD_DISPLAY_DOUBLE_LINE0x38//两行显示
#defineLCD_DISPLAY_SINGLE_LINE0x30//单行显示
unsignedcharcodetab[4][4]={
{'1','2','3','C'},
{'4','5','6','B'},
{'7','8','9','S'},
{'L','0','R','E'}};//键盘键值表
unsignedcharinput_password[9]={0,0,0,0,0,0,0,0,'\0'};//临时读入密码数组
unsignedcharnormal_password[9]={"12345678"};//密码存储数组
unsignedchartemp_normal_password[9]={"12345678"};//临时设定密码数组
unsignedcharlock=0,miss=0,key=0;//系统环境变量分别为锁状态、连续错误次数、读入键值
sbitbeep=P3^2;//蜂鸣器控制变量
sbitLEDR=P3^4;//开锁指示灯控制变量
sbitLEDE=P3^6;//闭锁指示灯控制变量
sbitLCD_BUSY=LCD_DATA^7;//LCD忙信号位
sbitLCD_RW=P2^0;//LCD读写控制
sbitLCD_RS=P2^1;//LCD寄存器选择
sbitLCD_EN=P2^2;//LCD使能信号*/
voidLCD_cls(void);
voidLCD_write_data(unsignedchar);
voidLCD_initial(void);
voidLCD_set_position(unsignedchar);
voidLCD_prints(unsignedchar*);
voidLCD_printc(unsignedchar);
voiddidi();//蜂鸣报警模块函数
voidverify_password();//开锁判断模块函数
voidLoad();//初始化函数
voidFirst();
voidread_password();//读入密码模块函数
voidSet_password();//设定密码模块函数
voiddelay(unsignedchara);//毫秒延时模块函数
unsignedcharkbscan();//键盘扫描模块函数
voidLCD_check_busy(void)//检测LCD状态
{
while
(1)
{
LCD_EN=0;
LCD_RS=0;
LCD_RW=1;
LCD_DATA=0xff;
LCD_EN=1;
if(!
LCD_BUSY)break;
}
LCD_EN=0;
}
voidLCD_cls(void)//LCD清屏
{
LCD_check_busy();
LCD_RS=0;
LCD_RW=0;
LCD_DATA=1;
LCD_EN=1;
LCD_EN=0;
}
voidLCD_write_instruction(unsignedcharLCD_instruction)//写指令到LCD
{
LCD_check_busy();
LCD_RS=0;
LCD_RW=0;
LCD_DATA=LCD_instruction;
LCD_EN=1;
LCD_EN=