数字式密码电子锁电路课程设计任务_第1页
数字式密码电子锁电路课程设计任务_第2页
数字式密码电子锁电路课程设计任务_第3页
数字式密码电子锁电路课程设计任务_第4页
数字式密码电子锁电路课程设计任务_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/课程设计任务书学生姓名:柯一凡专业班级:通信1102指导教师:许建霞工作单位:信息工程学院题目:数字式密码电子锁电路设计初始条件:Protel软件、PC机和相关的参考书籍如:Protel99入门与提高.赵品编著。人民邮电出版社。2000。11Protel99高级应用。赵品编著.人民邮电出版社.2000.11Protel99SE电路设计与仿真应用要求完成的主要任务:1、绘制具有一定规模、一定复杂程度的电路原理图*.sch(自选)。可以涉及模拟、数字、高频、单片机、或者一个具有完备功能的电子电路系统.(注意:电路选择不可过分简单,元件种类(包括电源和信号源)少于5种;或者元件个数少于10个将导致不及格.)绘制相应电路原理图的双面印刷版图*.pcb3、对电路原理图进行仿真,给出仿真结果(如波形*.sdf、数据)并说明是否达到设计意图。(注意:仿真提倡对所绘制的原理图*。sch进行全面仿真,如果不能做到全面仿真成功,则要说明原因,但要完成局部电路的仿真。)时间安排:序号设计内容所用时间1选择合适的电路1天2用Protel绘制相应的电路双面印刷版图,并仿真3天3总结编写课程设计报告1天合计1周指导教师签名:2014年6月10日系主任(或责任教师)签名:2014年6月10日目录TOC\o"1-3”\h\uHYPERLINK\l_Toc14目录ﻩPAGEREF_Toc14IHYPERLINK\l_Toc9874摘要ﻩPAGEREF_Toc9874IHYPERLINK\l_Toc3900AbstractﻩPAGEREF_Toc3900IIHYPERLINK\l_Toc190191设计任务与要求 PAGEREF_Toc190191HYPERLINK\l_Toc237851.1设计任务ﻩPAGEREF_Toc237851HYPERLINK\l_Toc125081.2设计要求ﻩPAGEREF_Toc125081HYPERLINK\l_Toc194702原理分析 PAGEREF_Toc194702HYPERLINK\l_Toc179242。1单片机控制原理ﻩPAGEREF_Toc179242HYPERLINK\l_Toc8822.2模块硬件电路分析ﻩPAGEREF_Toc8822HYPERLINK\l_Toc244262。2。1单片机最小系统ﻩPAGEREF_Toc244262HYPERLINK\l_Toc31192。2.2键盘矩阵 PAGEREF_Toc31193HYPERLINK\l_Toc29472.2.3LCM1602液晶显示ﻩPAGEREF_Toc29474HYPERLINK\l_Toc259912.2.4声光显示ﻩPAGEREF_Toc259914HYPERLINK\l_Toc216783电路原理图绘制ﻩPAGEREF_Toc216786HYPERLINK\l_Toc164053。1DXP绘制电路原理图ﻩPAGEREF_Toc164056HYPERLINK\l_Toc5073.2DXP绘制PCB图 9HYPERLINK\l_Toc255733。2。1加载网络表 PAGEREF_Toc255739HYPERLINK\l_Toc275253.2.2PCB板的排版 PAGEREF_Toc2752510HYPERLINK\l_Toc81883.2.3PCB板的布线 PAGEREF_Toc818810HYPERLINK\l_Toc261823.3。4PCB板的覆铜ﻩPAGEREF_Toc2618211HYPERLINK\l_Toc223454电路仿真及分析 PAGEREF_Toc2234513HYPERLINK\l_Toc112075心得体会 PAGEREF_Toc1120715HYPERLINK\l_Toc77226参考文献 PAGEREF_Toc772216HYPERLINK\l_Toc1055附录ﻩ17HYPERLINK\l_Toc13526数字式密码电子锁程序源代码(仿真) 2618摘要本系统以STC89C52单片机最小系统为核心,结合矩阵键盘、1602LCD和报警系统组成。系统能完成锁闭状态显示、密码输入错误超次(大于三次)异常,系统锁定声光告警、初始化设置用户密码等基本的密码锁的功能。除上述基本的密码锁功能外,依据实际的情况还可以添加通过超级密码重置密码、键盘背光与通过背光显示密码、系统产生随机密码等扩展空间.ProtelDXP6将项目管理方式、原理图和PCB图的双向同步技术、多通道技术、自动布线技术以及强大的电路仿真的技术完美的融合在一起。ProtelDXP提供了丰富的元件库,包括原理图符号.PCB封装、SI模型及仿真模型,可以方便地进行同步修改.这次课程设计主要要求掌握原理电路图设计、PCB设计和仿真。关键词:ProtelDXP,PCB设计,电子密码锁,STC89C52,液晶显示AbstractThesystemSTC89C52microcomputerasthecore,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,liquidcrystaldisplay1设计任务与要求1。1设计任务设计一个以单片机AT89C52为主控芯片,结合外围电路,组成电子密码锁。用户想要打开锁,必先通过提供的键盘输入正确的密码才能将锁打开,密码输入错误有提示,为提高安全性,当密码输入错误三次将报警。密码可以由用户自己修改设定,锁打开后才能修改密码.修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。完成密码锁的功能。1.2设计要求(1)使用protel制作数字式密码电子锁的电路原理图(2)使用protel制作数字式密码电子锁的PCB图(3)使用Protuse对数字式密码电子锁电路进行仿真2原理分析2.1单片机控制原理本次设计选用单片机STC89C52作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁信号判断、状态保存、电平控制的功能。设计从总体可以分为硬件和软件两个部分。在硬件部分中,由单片机最小系统、矩阵键盘、1602液晶显示、声光显示这几个部分,其相关控制如图2-1;在软件部分中,由矩阵键盘键值读取、1602液晶显示函数、延时模块、密码读取模块、密码设置模块、密码比较模块、声光状态模块等几部分组成。单片机最小系统单片机最小系统声光显示模块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后,依次点击工具栏上的Project,新建一个后缀名为prjPCB的工程文件。图3-1新建prjPCB工程文件接下来在刚建立的prjPCB的工程文件下点击新建一个后缀名为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连线时的结点处理完成所有连线之后,选择命令,开启一个数据库文本;再选择Project/ProjectOptions命令设置工程检查参数,在执行Project/CompileDocument检查系统错误。如果提示错误则返回修改原理图,如果没有错误,则选择Design/NetlistForDocument/Protel命令生成网络表。图3-6数字式密码电子锁原理图3。2DXP绘制PCB图3.2.1加载网络表生成网络表之后,就进入了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电路仿真及分析密码锁开始菜单图4-1密码锁开始菜单密码锁设置初始密码图4—2设置初始密码成功设置密码图4—3设置密码成功提示输入错误提示图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.附录名称型号数量备注单片机芯片STC89C521石英晶振12M1瓷片电容3321054电解电容4.7uf1电位器10K1电阻1K410K110K排阻1LED红色1绿色1长鸣蜂鸣器1三极管85501LCD显示模块16021按键开关17自锁开关1排针若干导线若干万用表1电工工具1套数字式密码电子锁程序源代码(仿真)#include"reg52。h"#include”string.h"#defineLCD_DATAP0ﻩ ﻩ ﻩﻩﻩﻩ//LCD的数据口//输入方式设置#defineLCD_AC_AUTO_INCREMENTﻩ0x06 //数据读、写操作后,AC自动增一#defineLCD_AC_AUTO_DECREASEﻩ0x04ﻩﻩ//数据读、写操作后,AC自动减一#defineLCD_MOVE_ENABLEﻩﻩ 0x05 ﻩ//数据读、写操作,画面平移#defineLCD_MOVE_DISENABLE 0x04ﻩﻩ//数据读、写操作,画面不动//设置显示、光标及闪烁开、关#defineLCD_DISPLAY_ON 0x0C ﻩ//显示开#defineLCD_DISPLAY_OFF 0x08 ﻩ//显示关#defineLCD_CURSOR_ONﻩ0x0Aﻩﻩ//光标显示#defineLCD_CURSOR_OFFﻩ0x08ﻩﻩ//光标不显示#defineLCD_CURSOR_BLINK_ON 0x09ﻩﻩ//光标闪烁#defineLCD_CURSOR_BLINK_OFFﻩ0x08 //光标不闪烁//光标、画面移动,不影响DDRAM#defineLCD_LEFT_MOVE 0x18 ﻩ//LCD显示左移一位#defineLCD_RIGHT_MOVE 0x1Cﻩﻩ//LCD显示右移一位#defineLCD_CURSOR_LEFT_MOVE 0x10ﻩ //光标左移一位#defineLCD_CURSOR_RIGHT_MOVEﻩ0x14 ﻩ//光标右移一位//工作方式设置#defineLCD_DISPLAY_DOUBLE_LINEﻩ0x38ﻩ //两行显示#defineLCD_DISPLAY_SINGLE_LINE 0x30ﻩ //单行显示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);void ﻩ ﻩdidi(); ﻩ ﻩ ﻩﻩ//蜂鸣报警模块函数voidﻩ ﻩverify_password(); ﻩ ﻩ ﻩ//开锁判断模块函数void ﻩLoad();ﻩﻩﻩﻩ ﻩﻩﻩﻩ//初始化函数void First();voidﻩ ﻩ read_password(); ﻩ ﻩ//读入密码模块函数void ﻩSet_password(); ﻩﻩ ﻩﻩ //设定密码模块函数voidﻩ ﻩdelay(unsignedchara); ﻩﻩﻩ//毫秒延时模块函数unsignedcharﻩkbscan(); ﻩ ﻩ//键盘扫描模块函数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=0;}voidLCD_write_data(unsignedcharLCD_data)ﻩﻩ //输出一个字节数据到LCD{LCD_check_busy();LCD_RS=1;LCD_RW=0;LCD_DATA=LCD_data;LCD_EN=1;LCD_EN=0;}voidLCD_set_position(unsignedcharx)ﻩ //LCD光标定位到x处{LCD_write_instruction(0x80+x);}/*voidLCD_go_home(void)ﻩﻩﻩ//LCD光标归位{LCD_write_instruction(LCD_GO_HOME);}*/voidLCD_printc(unsignedcharlcd_data)ﻩﻩﻩﻩ//输出一个字符到LCD{LCD_write_data(lcd_data);}voidLCD_prints(unsignedchar*lcd_string) ﻩ //输出一个字符串到LCD{unsignedchari=0;while(lcd_string[i]!=0x00){LCD_write_data(lcd_string[i]);i++;}}voidLCD_initial(void)ﻩﻩ ﻩ//初始化LCD{LCD_write_instruction(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE);LCD_write_instruction(LCD_DISPLAY_ON|LCD_CURSOR_OFF);LCD_write_instruction(LCD_DISPLAY_DOUBLE_LINE);LCD_cls();}/************************************************************************ﻩFunction:ﻩ delay(unsignedchart)* InputVariables:ﻩt<256* ReturnVariables:ﻩNone* Usage:ﻩﻩﻩﻩ通过读入的时间值进行延时*ﻩNotes:None***********************************************************************/void delay(unsignedchara) ﻩ ﻩ{ ﻩunsignedchari; ﻩwhile(a-—)ﻩﻩ for(i=110;i〉0;i--)ﻩﻩ ﻩ;ﻩ}/************************************************************************ Function:ﻩ ﻩkbscan()* InputVariables: None* ReturnVariables:ﻩkey*ﻩUsage: ﻩﻩ将读出的按键保存在全局变量key,并将其当做函数值返回*ﻩNotes:None***********************************************************************/unsignedcharcodekbscan()ﻩ ﻩ ﻩﻩ //键盘扫描模块函数ﻩ{ unsignedcharhang,lie; ﻩ if(P1!=0x0f) delay(5);ﻩ ﻩ ﻩ ﻩ//软件消抖ﻩ if(P1!=0x0f)ﻩﻩ ﻩﻩ ﻩ //判断是否有按键ﻩ ﻩ{ﻩﻩ switch(P1&0x0f)ﻩﻩ ﻩﻩ{ﻩﻩ case0x0e:hang=0;break; ﻩﻩ ﻩcase0x0d:hang=1;break;ﻩ ﻩﻩcase0x0b:hang=2;break;ﻩﻩ ﻩcase7:hang=3;break;ﻩ ﻩ //扫描行ﻩﻩﻩﻩ }ﻩﻩ P1=0xf0;ﻩﻩ P1=0xf0; ﻩﻩswitch(P1&0xf0) ﻩﻩ ﻩ{ ﻩ ﻩcase0xe0:lie=0;break;ﻩ ﻩﻩcase0xd0:lie=1;break;ﻩ ﻩﻩcase0xb0:lie=2;break; ﻩﻩ case0x70:lie=3;break; ﻩﻩ//扫描列 ﻩﻩ } P1=0x0f; ﻩwhile(P1!=0x0f);ﻩ ﻩkey=tab[hang][lie];ﻩ ﻩﻩﻩ ﻩ//确定按键键值ﻩ } else ﻩkey=0;ﻩﻩ ﻩﻩﻩ ﻩﻩﻩ//无按键ﻩ return(key); }/************************************************************************ﻩFunction: ﻩﻩLoad()* InputVariables: None*ﻩReturnVariables: None* Usage:ﻩﻩ ﻩ系统初始化*ﻩNotes:None***********************************************************************/voidLoad()ﻩ ﻩ ﻩ ﻩ ﻩﻩ//初始化函数ﻩ{ unsignedchari;ﻩ beep=1;ﻩﻩLEDR=0;ﻩﻩLEDE=1; key=0;ﻩ P1=0xf0; ﻩP0=0xff;ﻩ for(i=0;i<9;i++)ﻩﻩ{input_password[i]=’\0’;}ﻩ ﻩﻩ//系统变量数组清零 ﻩnormal_password[9]=’\0';ﻩ LCD_initial();ﻩﻩLCD_set_position(1); LCD_prints("Why’sElectron"); LCD_set_position(0x40); ﻩLCD_prints("CipherLock");ﻩ ﻩﻩ //提示信息LCD显示 while(kbscan()==0);ﻩ ﻩ ﻩ //按任意值返回 ﻩreturn;ﻩ}/************************************************************************ Function:ﻩﻩ first()* InputVariables: None* ReturnVariables: None*ﻩUsage:ﻩﻩ ﻩ等待清屏函数*ﻩNotes:None***********************************************************************/voidfirst() ﻩﻩﻩﻩ ﻩﻩ ﻩ{ﻩ while(kbscan()==0); LCD_cls(); ﻩreturn; }/************************************************************************ﻩFunction:ﻩ ﻩread_password()*ﻩInputVariables: None* ReturnVariables: None* Usage: ﻩ读入通过键盘输入的密码* Notes:None***********************************************************************/voidread_password()ﻩﻩ ﻩﻩ ﻩ ﻩ //读入密码模块函数ﻩ{ unsignedchari=0;ﻩﻩLCD_set_position(0x40); LCD_prints("”);ﻩ for(i=0;i<9;i++)ﻩﻩ {input_password[i]='\0’;}ﻩ ﻩ //读入密码数组初始化 for(i=0;i<9;) { while(kbscan()==0); ﻩﻩﻩ if(i==8&&(key〉='0'&&key<=’9’))continue;ﻩ //判断是否输入最长密码 ﻩswitch(key) ﻩﻩ ﻩ ﻩﻩ//判断按键种类 ﻩ {ﻩﻩ ﻩcase'L':ﻩ if(i〉0)i—-;ﻩﻩ ﻩ break; ﻩﻩ ﻩ //读入位置左移ﻩﻩﻩ case'R’:ﻩﻩ ﻩ if(i<7)i++;ﻩﻩ ﻩﻩﻩbreak; ﻩﻩ ﻩ//读入位置右移ﻩﻩ ﻩcase'E’: ﻩ return; case'C': ﻩ ﻩﻩLCD_set_position(0x40);ﻩ ﻩLCD_prints(”");ﻩﻩ ﻩfor(i=9;i>0;i——) ﻩ ﻩinput_password[i]=’\0’; ﻩinput_password[i]=’\0'; break; ﻩﻩﻩ ﻩﻩ //清空读入内容 ﻩﻩﻩcase'B':ﻩ ﻩ if(i>0) ﻩ ﻩ{ ﻩﻩ i—-;input_password[i]=0;ﻩ ﻩﻩ LCD_set_position(0x44+i);ﻩ ﻩ ﻩLCD_printc(''); ﻩﻩ ﻩ} ﻩ ﻩ ﻩ //进行退格操作 ﻩ ﻩbreak; ﻩ case'S':break;ﻩ ﻩ ﻩ ﻩ//功能键处理ﻩ ﻩdefaultﻩ:input_password[i]=key;ﻩﻩ //有效数字密码保存ﻩ ﻩ ﻩﻩLCD_set_position(0x44+i); ﻩﻩ ﻩ LCD_printc(input_password[i++]); }ﻩ ﻩkey=0; ﻩ ﻩﻩ ﻩﻩ//键值清零 ﻩ}ﻩ}/************************************************************************ﻩFunction:ﻩﻩ voidSet_password()*ﻩInputVariables: None*ﻩReturnVariables: None* Usage:ﻩﻩﻩﻩ设置密码锁系统的密码*ﻩNotes:None***********************************************************************/voidSet_password() ﻩ ﻩﻩ//设定密码模块函数{ﻩﻩunsignedchari,j; ﻩ ﻩ ﻩﻩﻩ//局部循环、判断变量ﻩﻩ while(1) ﻩ{ﻩﻩﻩLCD_cls(); ﻩLCD_set_position(1);ﻩ ﻩLCD_prints("SetPassword”);ﻩ ﻩLCD_set_position(0x40);ﻩ ﻩLCD_prints("");ﻩﻩﻩ //提起信息显示ﻩ read_password();ﻩ ﻩ ﻩﻩﻩ //读入密码ﻩ strncpy(temp_normal_password,input_password,9); //读入密码保存在临时设定密码数组 for(i=0;i<9;i++) ﻩﻩ {input_password[i]=’\0’;} ﻩ //读入密码数组初始化ﻩﻩﻩLCD_set_position(0x44);ﻩﻩﻩwhile(kbscan()==0); ﻩﻩLCD_cls(); ﻩ LCD_set_position(1); ﻩﻩLCD_prints(”Inputagain”);ﻩ ﻩread_password(); ﻩﻩﻩ ﻩ//进行设定密码确认 ﻩﻩj=strcmp(input_password,temp_normal_password)==0;//判断两次密码是否相同ﻩ ﻩfor(i=0;i<9;i++)ﻩﻩﻩﻩ{input_password[i]='\0’;} ﻩﻩif(j) ﻩ{ﻩﻩ ﻩLCD_cls(); ﻩLCD_set_position(2); ﻩ LCD_prints("SetPassword");ﻩﻩﻩﻩLCD_set_position(0x42); ﻩ LCD_prints("Successfully”);ﻩﻩ strncpy(normal_password,temp_normal_password,9); ﻩfor(i=0;i<9;i++)ﻩﻩ ﻩ{temp_normal_password[i]='\0';} ﻩ while(kbscan()==0); ﻩbreak;ﻩ ﻩﻩ ﻩ//如果相同保存密码进行提示ﻩ ﻩ}ﻩ ﻩelse ﻩﻩ{ ﻩ LCD_cls();ﻩ ﻩﻩLCD_set_position(1);ﻩ ﻩﻩﻩfor(i=0;i〈9;i++) ﻩ ﻩﻩ{temp_normal_password[i]='\0’;} ﻩ ﻩLCD_prints(”Passwordsis"); ﻩLCD_set_position(0x43);ﻩﻩ ﻩLCD_prints(”difference"); ﻩ while(kbscan()==0); ﻩﻩcontinue; ﻩﻩ ﻩﻩﻩ//如果不同放弃密码并返回重新设定ﻩ }ﻩﻩ}ﻩ}/************************************************************************ Function:ﻩﻩﻩverify_password()*ﻩInputVariables: None*ﻩReturnVariables: None*ﻩUsage: ﻩﻩ验证密码,控制锁和声光显示部件的状态*ﻩNotes:None***********************************************************************/voidverify_password()ﻩﻩﻩﻩﻩ ﻩﻩﻩ //开锁判断模块函数{ unsignedchari;ﻩlock=(strcmp(input_password,normal_password)==0); ﻩﻩ//判断是否开锁ﻩif(lock==1) {ﻩﻩLCD_cls(); LCD_set_position(5);ﻩ LCD_prints(”Unlock”);ﻩﻩLCD_set_position(0x42); ﻩLCD_prints("Successfully"); LEDR=1;LEDE=0;ﻩ miss=0;ﻩﻩﻩwhile(kbscan()==0); ﻩLCD_cls();ﻩﻩLCD_set_position(1); LCD_prints("Pressanykey”);ﻩﻩLCD_set_position(0x43);ﻩﻩLCD_print

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论