基于ATC的简易电子密码锁说明书(完整资料)_第1页
基于ATC的简易电子密码锁说明书(完整资料)_第2页
基于ATC的简易电子密码锁说明书(完整资料)_第3页
基于ATC的简易电子密码锁说明书(完整资料)_第4页
基于ATC的简易电子密码锁说明书(完整资料)_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

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

文档简介

基于ATC的简易电子密码锁说明书(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)

基于ATC的简易电子密码锁说明书(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)湖南理工学院单片微机原理课程设计说明书设计题目:基于AT24C02的简易电子密码锁院部:机械学院专业:机械电子工程组长姓名:学号:组员姓名:学号:学号:学号:起迄日期:2016年6月19日2016年6月30日指导教师:教研室主任:目录1引言.。。。..。.。.。.。..。。.。......。。。...。.41.1电子密码锁简介.。.。。。...。..。.。......。..。..。...。41。2电子密码锁的发展趋势.。。。.。.。..。。。。。...。。。.。。。.41。3本设计所要实现的目标...。..。。.。......。。.52设计方案的选择..。。。.。。....。..。。。.....。。。。。.....。52。1方案一:采用数字电路控制方案...。.。.。.。。.。.52.2方案二:采用无线遥控方式控制方案....。.。。。。..。。5HYPERLINK\l"_Toc201543239"2。3方案三:采用以单片机为核心的控制方案..。..。....53主要元器件介绍。。。。。.。.。.。。。....。..。...。.。。.。...。6HYPERLINK\l"_Toc201543241"3。1主控芯片AT89S51......。。。.。....。.。。。..。。。。..63.1。1AT89S51性能简介.。。.。。。.。..。.。。.。.。.......63.1.2AT89S51引角功能说明.。.。。...。.。..。。。..。......。7HYPERLINK\l"_Toc201543242”3.2存储芯片AT24C02.。...。....。..。。。.。...。。。。..。..。93。3LCD1602显示器......。..。.。.。。...。......。。..。。。103.3.1接口信号说明。.。..。。。.。...。。......。...103.3.2主要技术参数.....。。。......。。。...。.。.......。.113.3。3基本操作程序。.。.。。..。..。...。...。.。...。。。。.。.11HYPERLINK\l”_Toc201543244”3.4晶体振荡器..。.。。.。。.。...。。.。。。..。..。.。.。..12HYPERLINK\l”_Toc201543245”4系统硬件构成.。....。。..。。。...。。。。..。。.。......。。.。12HYPERLINK\l"_Toc201543246”4。1设计原理。.。.。.。...。....。。...。.。.。。。。..。。。。12HYPERLINK\l"_Toc201543247”4。2电路总体构成....。。。..。。。...。.....。.....13HYPERLINK\l”_Toc201543249"4。3键盘输入部分..。.。..。.。.。.....。...。.。。.....。...134.4密码存储部分。..。..。。。。......。..。...。。144.5复位部位..。.。.。.。.。。。。.。.。.。。。......。。.。.154.6晶振部分。.。.。......。。。.。。......。.。。..。....。15_Toc201543254”4。8报警部分..。。.....。....。.......。.....。.。。..。。.。。17PAGEREF_Toc201543254\h4.9开锁部分。。。。。....。。。.。。。。...。。.。。..。....。。.18PAGEREF_Toc201543255\h5系统软件设计.。。。。。..。。.。。.。。.....。.。.........。。..19PAGEREF_Toc201543256\hHYPERLINK\l"_Toc201543257”6总结.......。..。.。.。.。.。。。。...。...。。.。。.。。..。..。.。22PAGEREF_Toc201543257\h参考文献..。。.........。。...。.。..。。..。。....。.。.。。.23PAGEREF_Toc201543259\hHYPERLINK\l"_Toc201543261”附录一。。。。。...。.......。....。。.....。.。.....。。...。..。.23PAGEREF_Toc201543261\h附录二..。..。.。...。。。.。..。.。.....。。..。.。...33PAGEREF_Toc201543262\h1引言HYPERLINK\l"_Toc201543234"1.1电子密码锁简介电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的.其性能和安全性已大大超过了机械锁。其特点如下:1)保密性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零。2)密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降.3)误码输入保护,当输入密码多次错误时,报警系统自动启动。4)无活动零件,不会磨损,寿命长。5)使用灵活性好,不像机械锁必须佩带钥匙才能开锁。6)电子密码锁操作简单易行,一学即会。1.2电子密码锁的发展趋势在日常生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。目前门锁主要用弹子锁,其钥匙容易丢失;保险箱主要用机械密码锁,其结构较为复杂,制造精度要求高,成本高,且易出现故障,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。针对这些锁具给人们带来的不便若使用机械式钥匙开锁,为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生.它的出现为人们的生活带来了很大的方便,有很广阔的市场前景。由于电子器件所限,以前开发的电子密码锁,其种类不多,保密性差,最基本的就是只依靠最简单的模拟电子开关来实现的,制作简单但很不安全,在后为多是基于EDA来实现的,其电路结构复杂,电子元件繁多,也有使用早先的20引角的2051系列单片机来实现的,但密码简单,易破解。随着电子元件的进一步发展,电子密码锁也出现了很多的种类,功能日益强大,使用更加方便,安全保密性更强,由以前的单密码输入发展到现在的,密码加感应元件,实现了真真的电子加密,用户只有密码或电子钥匙中的一样,是打不开锁的,随着电子元件的发展及人们对保密性需求的提高出现了越来越多的电子密码锁。出于安全、方便等方面的需要许多电子密码锁已相继问世。但这类产品的特点是针对特定有效卡、指纹或声音有效,且不能实现远程控制,只能适用于保密要求高且供个人使用的箱、柜、房间等。由于数字、字符、图形图像、人体生物特征和时间等要素均可成为钥匙的电子信息,组合使用这些信息能够使电子防盗锁获得高度的保密性,如防范森严的金库,需要使用复合信息密码的电子防盗锁,这样对盗贼而言是“道高一尺、魔高一丈"。组合使用信息也能够使电子防盗锁获得无穷扩展的可能,使产品多样化,对用户而言是“千挑百选、自得其所”.可以看出组合使用电子信息是电子密码锁以后发展的趋势。1.3本设计所要实现的目标该密码锁初次使用时的原始密码为123456,用户输入正确的密码信息则能够发出开锁信号。功能要求:能够修改密码。只有输入原设定的正确密码后才能修改密码.三次输入开锁密码错误,则启动报警。显示按键信息,而且要有按键音。系统设0~9十个数字键,一个密码修改键,一个确认键。按下密码修改键,先输入原密码,解密正确后键入新密码,按确认键生效。解密错误启动报警,5秒钟后报警自动解除。技术要求:1、系统停电后,密码信息不会丢失,上电后仍能正常执行开锁操作.2、系统安全可靠,不会出现死机现象。3、密级〈106。HYPERLINK\l"_Toc201543237”2设计方案的选择2.1方案一:采用数字电路控制方案用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过10秒(一般情况下,用户不会超过10秒,若用户觉得不便,还可以修改)电路将报警20秒,若电路连续报警三次,电路将锁定键盘2分钟,防止他人的非法操作。采用数字电路设计的方案好处就是设计简单但控制的准确性和灵活性差.故不采用。HYPERLINK4.7显示部分为了提高密码锁的密码显示效果能力。本设计的显示部分由液晶显示器LCD1602取代普通的数码管来完成。只有按下键盘上的开启按键后,显示器才处于开启状态。同理只有按下关闭按键后显示器才处于关闭状态。否则显示器将一直处于初始状态,当需要对密码锁进行开锁时,按下键盘上的开锁按键后利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*.当密码输入完成时,按下确认键,如果输入的密码正确的话,LCD子显示“RIGHT”,单片机其中P3.0引角会输出低电平,使三极管Q2导通,电磁铁吸合,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“ERROR”,P3。0输出的是高电平,电子密码锁不能被打开。通过LCD显示屏,可以清楚的判断出锁所处的状态。其显示部分引脚接口如图4—7所示:图4-7显示电路原理图4。8报警部分报警部分由蜂鸣器发声装置及外围电路组成,加电后不发声,当有键按下时,“嘀”声,每按一下,发声一次,密码正确时,不发声直接开锁,当密码输入错误时,单片机的P3.5引脚为低电平,三极管Q1导通轰鸣器发出噪鸣声报警。如图4-8所示:图4-8报警电路原理图PAGEREF_Toc201543254\h4.9开锁部分开锁控制电路的功能是当输入正确的密码后将锁打开。系统使用单片机其中一引脚线发出信号,经三极管放大后,由继电器驱动电磁阀动作将锁打开.用户通过键盘任意设置密码,并储存在EEPROM中作为锁码指令。只有用户操作键盘时,单片机的电源端才能得到5V电源,否则.单片机处于节电工作方式。开锁步骤如下:首先按下键盘上的开锁按键,然后利用键盘上的数字键0-9输入密码,最后按下确认键。当用户输入一密码后,单片机自动识码,如果识码不符,则报警。只有当识码正确,单片机才能控制电子锁内的微型继电器吸台。当继电器吸台以后带动锁杆伸缩,这时,锁勾在弹簧的作用下弹起,完成本次开锁。开锁以后,单片机自动清除掉由用户输人的这个密码.如图4—9所示:图4-9开锁电路原理图5系统软件设计本系统软件设计由主程序、初始化程序、LCD显示程序、键盘扫描程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。主要程序设计流程图如下所示:PAGEREF_Toc201543256\h初始化初始化键盘扫描启动程序键盘扫描键功能程序关闭程序开始结束图5-1主程序流程图PAGEREF_Toc201543255\h键值=键值=‘0-9’?键值=‘开锁’?键值=‘清除’?键值=‘设置’?键值=‘确认’?密码输入程序设置程序清除程序开锁程序确认程序YYYYYNNNNN键值=‘清零’?清零程序YN返回功能键程序图5-2键功能流程图YYNNYNY初始化按下设置键输旧密码确认程序所输入旧密码正确?输新密码确认程序输入次数加1次数>3?报警程序确认程序再次输新密码两次新密码输入相同?返回设置成功设置程序图5-3密码设置流程图开锁成功N开锁成功NNYY初始化按开锁键输入密码确认程序所输入密码正确?输入次数加1次数>3?报警程序返回开锁程序图5-4开锁流程图HYPERLINK\l”_Toc201543257"6总结随着期末的到来,各种课程设计都在有序进行中。经过两周的奋战,我的单片机课程设计终于完成了。在没有做课程设计以前觉得课程设计只是对这门课程所学知识的单纯总结,但是通过这次做课程设计发现自己的看法有点太片面。课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高.通过这次课程设计使我明白了自己原来课堂所学知识还比较欠缺.自己要学习的东西还太多,以前老是觉得自己什么东西都会,什么东西都懂,有点眼高手低。通过这次课程设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。在此要感谢老师的指导,感谢同学给我的帮助。在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向同学请教等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响.而且大大提高了实践的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益。课程设计组2016年6月29日于湖南理工学院PAGEREF_Toc201543257\h参考文献:[1]彭伟编著.单片机C语言程序设计实训100例.电子工业出版社[2]赵全利主编。单片机原理及应用教程.机械工业出版社.第3版[3]郭天祥编著.51单片机C语言教程.电子工业出版社[4]张文祥等编著.单片机系统设计与开发教程。电子工业出版社[5]康光华主编。电子技术基础.高等教育出版社。第五版[6]杨路明主编。C语言程序设计教程.北京邮电大学出版社.第2版PAGEREF_Toc201543259\h附录一程序清单:#include<reg51。h〉#include<string。h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineLCDIOP2#definedelay4us()_nop_();_nop_();_nop_();_nop_();ucharbuffer[6]={0};sbitsda=P3^7;sbitscl=P3^6;sbitbeep=P3^5;sbitrs=P0^4;sbitrd=P0^3;sbitlcden=P0^2;sbitled=P3^0;bitflag=0,a=0,b=0,d=0,aa;unsignedintn=0;unsignedcharfrq,j=0;ucharDSY_BUFFER[16]="";ucharDSY_BUFFER1[16]="”;ucharUserpassword[6]={0};ucharcodetable2[]="123456";ucharcodetable[]="YourPassword。。。";voiddelayms(uintz)//延时Zms程序{uintx,y;for(x=z;x>0;x--)for(y=110;y〉0;y--);}voidbaojin()//报警发声子程序{TMOD=0x01;frq=0x00;TH0=0x00;TL0=0xff;TR0=1;EA=1;ET0=1;n=0;while(n<5003){if(n>5000){TR0=0;beep=0;}frq++;n++;delayms(1);}}voidtimer0()interrupt1//定时器0中断程序{TH0=0xfe;TL0=frq;{beep=~beep;}}voidBeep()//按键发声和报警发声程序{uchari;if(j==3||(b==1&&d==0))baojin();else{for(i=0;i<100;i++){delayms(1);beep=~beep;}beep=0;}}voiddelay()//微秒延时程序{;;}voidwrite_com(ucharcom){rs=0;rd=0;lcden=0;P2=com;delayms(3);lcden=1;delayms(3);lcden=0;}voidwrite_date(uchardate){rs=1;rd=0;lcden=0;P2=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<n-1;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<n;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=0;break;case2:keynum=1;break;case4:keynum=2;break;case8:keynum=3;break;break;}P1=0xF0;delayms(5);temp=P1>>4^0x0F;while(P1==0xF0){switch(temp){case1:keynum+=0;break;case2:keynum+=4;break;case4:keynum+=8;break;case8:keynum+=12;break;break;}d=1;Beep();d=0;delayms(600);returnkeynum;}voidmain()//主程序{uchartemp,i=0,k=0,n;ucharIS_valid_user;beep=1;init();init_lcd();delayms(5);aa=Sendstring(0xa0,1,table2,6);delayms(5);aa=Recstring(0xa0,1,buffer,6);delayms(10);P1=0x0f;while(1){if(P1!=0x0f){temp=Keys_Scan();switch(temp)//数字键{case0:case1:case2:case3:case4:case5:case6:case7:case8:case9:if(i〈=5){Userpassword[i]=temp;DSY_BUFFER[i]='*';Display_String(DSY_BUFFER,0xc0);i++;}break;case10://确定键if(!a){for(k=0;k<6;k++){if(buffer[k]==(Userpassword[k]+48))flag=1;elseflag=0;}if(flag==1){flag=0;i=0;led=0;clear_password();Display_String("",0x80);Display_String(”OPENOK!”,0xc0);IS_valid_user=1;j=0;}else{if(b==0)j++;if(j==3||b==1){Beep();b=0;}led=1;clear_password();Display_String("ERROR!Havetry”,0xc0);write_com(0xcf);write_date(0x30+j);IS_valid_user=0;}i=0;}else{if(!IS_valid_user){i=0;Display_String("Norights!”,0xc0);delayms(1000);Display_String("YourPassword。..",0x80);Display_String("LockOK!",0xc0);}else{i=0;init();delayms(5);for(k=0;k<6;k++){Userpassword[k]=Userpassword[k]+48;}aa=Sendstring(0xa0,1,Userpassword,6);delayms(5);aa=Recstring(0xa0,1,buffer,6);delayms(5);clear_password();Display_String(table,0x00);Display_String("",0x80);Display_String(”PasswordSaved!",0xc0);delayms(1000);Display_String("OPENOK!",0xc0);Display_String(””,0x80);a=0;}break;}break;case11://上锁键led=1;clear_password();Display_String(table,0x80);Display_String("LockOK!",0xc0);i=0;IS_valid_user=0;break;case12://设置键a=1;if(!IS_valid_user){i=0;Display_String(”Norights!”,0xc0);delayms(1000);Display_String(”YourPassword.。。",0x80);Display_String("LockOK!",0xc0);a=0;b=1;}else{i=0;Display_String(”NowPassword..。”,0x80);Display_String("",0xc0);}break;case13://未定义键break;case14://清零键i=0;clear_password();Display_String("”,0xc0);break;case15://清除键if(i!=0)i——;for(n=0;n〈i;n++){DSY_BUFFER1[n]='*';}Display_String(DSY_BUFFER1,0xc0);}P1=0x0f;}if(j==3){Display_String(”THIEF!!!THIEF!!!",0xc0);j=0;beep=0;}}}}PAGEREF_Toc201543261\h附录二部分仿真结果展示:锁关:锁开:设置密码:密码设置成功:密码输入错误:PAGEREF_Toc201543262\h一、前言电子密码锁的使用体现了人们的消费水平、保安意识和科技水平的提高,而且避免了携带甚至丢失钥匙的麻烦。目前设计密码锁的方法很多,例如传统的PCB板设计、用PLC设计或者单片机设计等等.而用VHDL可以更加快速、灵活地设计出符合各种要求的密码锁,优于其他设计方法。VHDL是一种符合IEEE标准的硬件描述语言,其最大的特点是借鉴高级程序语言的功能特性,对电路的行为与结构进行高度的抽象化、规范化的形式描述,并对设计的不同层次、不同领域的模拟验证与综合优化等处理,使设计过程延到高度自动化。二、方案设计密码锁的的构成主要由密码输入、密码设置、比较控制和报警部分组成,此外密码锁必须能够保存已设置的密码,因而需要一个寄存器来保存密码,同时由于控制电路和报警电路要用到不同的时钟,因而需要一个时序产生电路来生成需要的不同信号,采用分频方法实现。根据密码锁的电路特点,选用的是实验箱的模式6电路,根据电路功能,在这里设计的密码锁以4位2进制代码作为密码的电子密码锁.其原理框图如下所示:报警电路时序产生电路报警电路时序产生电路比较控制比较控制密码输入开锁信号密码输入开锁信号寄存器(保存设置的密码)寄存器(保存设置的密码)密码设置密码设置图一、电子密码锁原理框图三、功能模块的实现1、时序电路在密码锁的电路中,输入计时、报警计时需要的1HZ的时钟脉冲信号,而驱动蜂鸣器工作需要的很高频率的脉冲信号,因而这里采用输入一个高频脉冲(1024HZ)信号来驱动蜂鸣器,采用分频的方法得到1HZ的计时脉冲,程序如下:process(clk_1k)variablecnt1:integer:=0;beginifrising_edge(clk_1k)thenifcnt1=512thenclk_1〈=notclk_1;cnt1:=0;elsecnt1:=cnt1+1;endif;endif;endprocess;程序说明:clk_1k为输入的1024HZ高频脉冲,cnt为分频得到的1HZ计时脉冲。2、密码设置为了安全性,密码锁必须能够重复的设定密码,在设定密码锁后,应该设置一个寄存器来存储设定的密码,程序如下:process(rst,password,enter_p)isbeginifrst=’0'thenifenter_p='1'thenram〈=password;en1〈='1';endif;endif;endprocess;程序说明:rst低电平时所有的模块复位,只有密码设置模块工作;password为设置密码时的输入端,ram就是存储密码的寄存器;enter_p为在这里为密码设置使能端,高电平有效。密码设置的仿真波形如下图,由图中可以清楚地看到在enter_p高电平时寄存器ram中得到了输入的密码1001。图二、密码设置仿真波形密码输入密码输入部分要求在密码开始输入时进行计时,超时了要求报警,因此在密码输入时设置一个计时使能信号en2,密码开始输入时使能信号en2有效,控制电路的计时器开始计时;而且在密码确认键按下之前,电路不能对输入密码和已设置密码进行比较,因此需要设置一个寄存器,来存储输入的数据,当确认键按下时,就将寄存器里的数据送给控制部分进行比较。程序如下:process(rst,enter_c,en1,code)beginifrst=’1'thenifen1=’1'thenifenter_c=’1'thencode_tmp〈=code;en2〈='1';endif;elsecode_tmp<="0000";en2〈='0';endif;elsecode_tmp<="0000";en2<='0';endif;endprocess;程序说明:rst置高,设置密码模块不工作,其他部分正常工作,en1为高时代表密码设置完毕,密码锁开始工作;enter_c是密码输入使能信号,高电平时表示开始密码输入,此时code_tmp中开始存储输入的数据,计时使能信号en2也变成高电平.密码输入仿真波形如下,由图中可清楚的看到在enter_c为高时,寄存器code_tmp中存储了输入的数据code(系统仿真时有10ns的延时)。图三、密码输入仿真波形控制部分此部分是密码锁设计的核心模块,它实现密码锁的逻辑功能。开锁代码为4位二进制数,当输入代码的位数和位值与锁内设置的密码一致,且在规定时间内开锁,方可打开,并且点亮开锁指示灯led_g;否则,系统进入“错误"状态,并且发出警报。警报的方式为蜂鸣器发出警报,指示灯led_r闪烁。直到30秒过后或者按下复位键,经行下一次密码输入.模块源程序:process(rst,clk_1,en2)variablelock:std_logic:=’0’;variablecnt3:integer:=0;beginifrst=’0’thenlock:='0’;cnt3:=0;sp_en<='0';led_g<='0';led_r〈='0';elseifrising_edge(clk_1)theniflock='0'thenifen2='1'thenifcnt3=5thensp_en<='1’;led_g<='0';led_r<=’1';cnt3:=0;lock:='1';elseifcode_en=’1'thenifram=code_tmpthensp_en<='0';led_g<='1’;led_r<=’0';lock:='1';elsesp_en〈=’1’;led_g<='0';led_r〈=’1’;endif;endif;cnt3:=cnt3+1;endif;endif;elsecnt3:=0;endif;endif;endif;endprocess;程序说明:eq\o\ac(○,1)、lock为自锁信号,lock为1时,系统进入自锁状态,不再工作。eq\o\ac(○,2)、Cnt3为密码输入计时信号,en2为1(即开始输入密码)时开始计时,当超过5秒而没有输入正确密码时,系统自锁并报警。eq\o\ac(○,3)、code_en为密码确认键,此键按下时,系统开始将输入的密码和设置的密码进行比较,若二者一致则发出开锁信号,若不一致则发出报警信号,系统进入自锁状态。报警电路报警电路的作用就是在密码输入错误或者输入超时的情况下经行报警,蜂鸣器发出声音,并且警报灯不停闪烁,直到复位键按下或者计时30s结束。源程序如下:process(rst,sp_en,clk_1,clk_1k)variabletmp_en1:std_logic:='0';variablecnt4:integer:=1;beginifrst=’1’thenifrising_edge(clk_1)thenifsp_en=’1'andcnt4>0thenifcnt4=31thencnt4:=0;tmp_en1:='0’;elsecnt4:=cnt4+1;tmp_en1:='1';endif;endif;endif;elsetmp_en1:='0’;cnt4:=1;endif;speaker<=tmp_en1andclk_1k;led_f<=tmp_en1andclk_1;endprocess;程序说明:Cnt4是一个30进制计数器,对报警时间进行计时。Sp_en是控制电路发出的报警信号。软件仿真将完整的程序在Quartus软件下进行编译,通过之后进行波形仿真,观察仿真波形看是否实现了密码锁的逻辑功能,下面是在密码输入正确、密码输入超时和密码输入错误时的仿真波形图.图四、密码输入正确仿真波形如图所示,首先在rst为0时将密码设为1001,然后输入密码1001,当确认键code_en按下时,系统判断密码正确,输出一个开锁信号,开锁指示灯led_g点亮.图五、密码输入错误仿真波形如图,密码设置仍然为1001,但输入一个错误的密码1000,当密码确认按下时,系统发出错误警报,蜂鸣器Speaker发出响声,报警灯led_f闪烁。图六、出入超时仿真波形如图,密码设置不变,依旧是1001,但是密码输入按键enter_c按下,输入密码后不按下确认键,五秒过后,系统判断密码输入超时,此时输出超时警报,蜂鸣器报警,led_g点亮,led_f闪烁。心得体会这次的课程设计安排在了假期以后,上学期的VHDL语言已经有些生疏了,这给编程带来了一些难度,但是经过复习还是重新熟悉了编程的方法和技巧。在写程序的时候有时候不注意仿真,犯了想当然的毛病,认为程序会实现想象中的逻辑功能,但实际不然,所以在编程过程中,不能单凭想象来做,必须写完一部分后就进行一次仿真,及时发现问题,及时改正,避免可在写完程序之后才发现错误,这时再修改就会很麻烦了。这次的课程设计标题是密码锁设计,通过在查阅资料的过程中了解了电子密码锁的发展前景和FPGA的广泛应用,在日常生活中会有许多的电子设备都与FPGA有关,因此学好EDA技术对自己的以后的发展会有很大的帮助.本科生学年论文(设计)(2011级)基于protues的电子密码锁设计姚晓强电气信息工程电子1102指导教师(职称)孙亚萍(讲师)6280成果完成时间2013-12—26杭州师范大学钱江学院教学部制基于protues的电子密码锁设计电气信息专业1102班姚晓强指导教师孙亚萍摘要:本文以AT89C51单片机为核心器件,结合按键电路、LED数码管显示电路、报警指示电路和开锁机构,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性通过软件程序来控制整个系统实现电子密码锁的基本功能,其主要具有如下功能:●密码通过键盘输入,若密码正确,则将锁打开●密码输入错误,蜂鸣器将报警提示●用户可以自由设定密码本密码锁具有设计方法合理,简单易行成本低,安全实用等特点,具有一定的推广价值。关键词:AT89C51;电子密码锁;功能Thedesignofelectronic

lockontheProtuesYaoXiaoqiangInstructor:SunYapingAbstract:BasedontheAT89C51single-chipmicrocomputerasthecoredevice,combiningwiththekeycircuit,LEDdigitaltubedisplaycircuit,analarmcircuitandunlockingmechanism,designthewholesystemtoachievethebasicfunctionsofelectroniccipherlockbyitsflexibleprogramming,richI/Oport,andaccuracybasingonthesoftwareprogram.Withthefollowingfunctions:●Inputpasswordthroughthekeyboard,ifthepasswordiscorrect,lockwillopen●Ifthepasswordiserror,thebuzzerwillalarm●UserscanfreelysetthepasswordThelockhassomefeatureslikeareasonabledesignmethods,simpletowork,lowcostandsecurity,italsohassomepromotionvalue。Keywords:AT89C51;Electroniclock;Function目录TOC\o”1—3"\h\z\u第一章引言PAGEREF_Toc375833545\h1HYPERLINK\l"_Toc375833546”1.1研究背景PAGEREF_Toc375833546\h1HYPERLINK\l"_Toc375833547"1.2应用现状PAGEREF_Toc375833547\h1HYPERLINK\l”_Toc375833548”2.1Protues软件概述PAGEREF_Toc375833548\h2HYPERLINK\l”_Toc375833549”2.2Protues软件的功能和特点PAGEREF_Toc375833549\h2HYPERLINK\l"_Toc375833550”第三章电子密码锁电路的设计PAGEREF_Toc375833550\h2HYPERLINK\l”_Toc375833551”3。1电子密码锁的工作原理PAGEREF_Toc375833551\h23。2系统的总体思路设计5833552\h33.3主要元器件介绍PAGEREF_Toc375833553\h3HYPERLINK\l"_Toc375833554”3。3。1AT89C51介绍PAGEREF_Toc375833554\h3HYPERLINK\l”_Toc375833555”3.3.2LED数码管介绍PAGEREF_Toc375833555\h5HYPERLINK\l"_Toc375833556"3.3.3LED矩阵键盘介绍3556\h6第四章电子密码锁的仿真分析PAGEREF_Toc375833557\h64.1Protues原理图设计PAGEREF_Toc375833558\h64。1。1单片机主控制模块(含晶振、复位基本工作电路)PAGEREF_Toc375833559\h7HYPERLINK\l”_Toc375833560"4。1。2键盘输入模块5833560\h74.1.3显示模块PAGEREF_Toc375833561\h8HYPERLINK\l"_Toc375833562"4。1。4报警模块和开锁模块PAGEREF_Toc375833562\h94。2仿真效果总图PAGEREF_Toc375833563\h10HYPERLINK\l"_Toc375833564”总结PAGEREF_Toc375833564\h10HYPERLINK\l”_Toc375833565"参考文献PAGEREF_Toc375833565\h10HYPERLINK\l"_Toc375833566”附录PAGEREF_Toc375833566\h11基于protues的电子密码锁设计电子信息专业1102班姚晓强指导教师孙亚萍第一章引言1.1研究背景电子线路的设计需要经过设计方案提出、方案验证和修改三个阶段,有时甚至需要经过多次的反复.传统的设计方法一般是采用搭接实验电路的方法进行,这种方法费时、费用高、效率低。随着计算机技术水平的不断提高,电子线路设计仿真软件迅速发展起来,EDA[1](ElectronicDesignAutomation电子设计自动化)技术应运而起,功能日益强大,运行速度快,使得电子线路设计人员能在计算机上完成电路的功能设计、逻辑设计、性能分析等等。Protues软件是英国Labcenterelectronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具.虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐.1.2应用现状现今常见的密码锁设计主要有两种方案,一种是中规模集成电路控制的方案,另一种是单片机控制的方案。对于采用集成电路控制的方案,其中的编码电子锁电路分为编码电路、控制电路、复位电路、解码电路、防盗报警电路、门铃电路,而电子锁主要由输入元件、电路(包括电源)以及锁体三部分组成。显然此种方案的物理实现结构较为复杂且重新设置密码、输入密码的操作过程也会给用户带来一定的不方便;而利用单片机控制的方案,由于单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加掉电存储、声光提示甚至添加遥控控制功能,但其也有一定的局限性,就在于其控制原理的复杂以及要求设计人员具有更加良好的程序设计能力,调试较为繁琐,否则程序一旦跑飞将造成意想不到的损失。通过对这两种方案的优缺点比较,再考虑到本人自己对单片机设计具有一定的基础,所以此次选择利用单片机来进行密码锁的设计。第二章Protues软件包介绍2.1Protues软件概述Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。迄今为止是世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MATLAB等多种编译。2。2Protues软件的功能和特点Protues软件具有其它EDA工具软件(例:multisim)的功能。这些功能是:(1)原理布图(2)PCB自动或人工布线(3)SPICE电路仿真第三章电子密码锁电路的设计3。1电子密码锁的工作原理以AT89C51单片机为主控制单元,键盘为主要输入单元,结合开锁装置、报警器和显示器完成整个系统设计。它的系统结构图如图.3.1所示:图.3。1系统结构图3.2系统的总体思路设计系统的运行过程大致如下:假设初始状态为闭锁,此时整个系统只等待按键输入,数码管也不显示.先按除号键修改密码,每按下一个数据键(即每输入一个密码),数码管相应的显示一个“-”标志,当密码全部输入完成后,需按下确认键“ON/C".设置密码后,先按“+”复位,然后输入密码,输入完毕后按下确认键“ON/C”,此时系统判断密码是否正确,正确则开锁(仿真中以数码管显示全8、绿色LED灯亮为标志),错误则报警,此后数码管熄灭继续等待按键。3.3主要元器件介绍3.3.1AT89C51介绍AT89C51是一种带4K字节FLASH存储器(FPEROM-FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机.单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。图3。3.1。1AT89C51封装图图3.3.1。2AT89C51引脚图AT89C51主要特性:1.与MCS—51兼容2.4K字节可编程FLASH存储器3.寿命:1000写/擦循环4.数据保留时间:10年5.全静态工作:0Hz—24MHz6.三级程序存储器锁定7.128×8位内部RAM8.32可编程I/O线9。两个16位定时器/计数器10。5个中断源11.可编程串行通道12.低功耗的闲置和掉电模式13。片内振荡器和时钟电路AT89C51单片机引脚:VCC:供电电压.GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位.在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻.P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流.P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3。6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲.在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6.因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高.如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出.该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度.3.3.2LED数码管介绍图3.3。2数码管LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示.当数码管特定的段加上电压后,这些特定段就会发亮,以形成我们眼睛看到的样子。以“2"为例,应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。LED数码管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1。8V左右,电流不超过30mA。发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管.常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。3。3.3LED矩阵键盘介绍在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下.行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。本设计采用Protues库中KEYPAD-SMALLCALC作为键盘。第四章电子密码锁的仿真分析4.1Protues原理图设计4.1。1单片机主控制模块(含晶振、复位基本工作电路)图4。1。1主控制模块4。1.2键盘输入模块本设计中采用Protues库中KEYPAD-SMALLCALC作为键盘,与AT89C51的P3口相连,提供按键输入,如图4。1。2:图4。1。2键盘输入模块按键键名功能说明1-9键数字键输入密码÷键重设密码键设定新密码+键复位键密码全部一次删除=键密码删除键一次删除一位密码ON/C键确定键确认密码输入完毕表4。1。2按键功能4.1.3显示模块图4.1。3显示模块此设计中,使用了四个共阳极数码管,使用动态显示技术控制数码管。其6个位选信号与P2.0—P2.5相连,当其中某位为低电平时表示选中该位;8段段选信号与P0口相连,当其中某段为高电平时导通该段,特殊的,由于AT89C51的P0口的驱动能力较弱,不足以驱动数码管点亮,故在此又引入上拉电阻以驱动数码管.关于上拉电阻有如下介绍:1、当TTL电路驱动CMOS电路时,如果电路输出的高电平低于CMOS电路的最低高电平(一般为3.5V),这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值.2、OC门电路必须加上拉电阻,以提高输出的高电平值。3、为加大输出引脚的驱动能力,有的单片机管脚上也常使用上拉电阻.4、在CMOS芯片上,为了防止静电造成损坏,不用的管脚不能悬空,一般接上拉电阻产生降低输入阻抗,提供泄荷通路.5、芯片的管脚加上拉电阻来提高输出电平,从而提高芯片输入信号的噪声容限增强抗干扰能力。6、提高总线的抗电磁干扰能力.管脚悬空就比较容易接受外界的电磁干扰。7、长线传输中电阻不匹配容易引起反射波干扰,加上下拉电阻是电阻匹配,有效的抑制反射波干扰。4。1.4报警模块和开锁模块图4。1.4报警和开锁模块4.2仿真效果总图图4.2输入正确密码时仿真效果总图总结通过上述设计电路的仿真分析,不难发现使用单片机制作的电子密码锁具有软硬件设计简单,易于开发,成本较低,安全可靠,操作方便等特点。正是由于单片机的众多优良特性的吸引,最终从经济实用的角度出发,采用单片机AT89C51作为主控芯片,结合外围的键盘输入、显示、报警、开锁等电路,用C语言编写主控芯片的控制程序,设计了一款可以多次更改密码具有报警功能的电子密码锁。参考文献[1]于殿泓,王新年。单片机原理与程序设计实验教程[M].西安电子科技大学出版社,2007.127-151页.[2]赵文博,刘文涛.单片机语言C51程序设计[M].人民邮电出版社,2005.258—294页.附录#include<at89x51。h>#defineucharunsignedchar#defineuintunsignedintuintnum=10;ﻩ//开始让数码管什么都显示bitset=0; //定义设置密码的位charcount=—1; //开始让COUNT=-1,方便后面显示数码管sbitBeep=P1^2;//蜂鸣器uchartemp;ucharpws[6]={8,8,8,8,8,8};ﻩ//原始密码ucharpwx[6]; ﻩﻩ//按下的数字存储区bitrightflag;ﻩﻩ //密码正确标志位ucharworkbuf[6];ucharcodetabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};ﻩﻩﻩ//段选码,共阴极ucharcodetablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; ﻩﻩ//位选码uintkeyscan();voiddelay(ucharz)ﻩﻩ//延时,ms级 {ﻩuchary;ﻩfor(;z>0;z—-) for(y=120;y〉0;y——);}voidsetpw() //设置密码函数{ keyscan();}uintkeyscan() //键盘扫描函数{ﻩP3=0xfe; temp=P3;ﻩtemp=temp&0xf0; if(temp!=0xf0) { ﻩdelay(5);ﻩ//键盘去抖,最好20ms以上,这里用了5ms temp=P3; temp=temp&0xf0;ﻩﻩif(temp!=0xf0) { ﻩ count++;//按键计数加1 temp=P3;ﻩ switch(temp) { ﻩ case0xee:ﻩﻩ ﻩ{ num=7; ﻩﻩif(count〈6) //六位密码,所以COUNT<6 ﻩ{ ﻩﻩ if(set==0) //设置密码键没有按下时ﻩﻩ ﻩ ﻩpwx[count]=num;//存储按下的数字ﻩ ﻩ ﻩelseﻩﻩ ﻩ ﻩpws[count]=num;//设置密码键按下时,设置新密码ﻩ ﻩﻩworkbuf[count]=tabledu[11];//相应位的数码管显示"-—”,不显示相应的数字,密码是保密的ﻩ ﻩ} ﻩ }ﻩﻩ ﻩbreak;ﻩﻩﻩﻩcase0xde: { ﻩﻩﻩ num=8; ﻩ ﻩﻩif(count<6) ﻩ//以下扫描键盘的原理差不多同上 {ﻩﻩﻩﻩﻩ if(set==0) ﻩ ﻩ ﻩpwx[count]=num; ﻩﻩ ﻩ elseﻩﻩﻩﻩﻩﻩpws[count]=num;ﻩ ﻩ ﻩ workbuf[count]=tabledu[11]; ﻩﻩ}ﻩﻩ } ﻩbreak; ﻩcase0xbe:ﻩ {ﻩﻩ ﻩ num=9; ﻩﻩﻩ{ﻩﻩﻩﻩ ﻩif(count<6)ﻩﻩ ﻩﻩ { ﻩ ﻩﻩﻩif(set==0)ﻩ ﻩ pwx[count]=num;ﻩﻩﻩﻩ ﻩ else ﻩ ﻩpws[count]=num; workbuf[count]=tabledu[11];ﻩ ﻩ ﻩ}ﻩ ﻩﻩ } ﻩ ﻩ}ﻩ break; ﻩ case0x7e: //设置密码键按下 ﻩ{ ﻩ set=1; //设置密码标志位置1ﻩﻩ ﻩP1_3=0; //设置密码指示灯亮ﻩ ﻩ workbuf[0]=0x00;//数码管第一位不显示 ﻩﻩﻩﻩworkbuf[1]=0x00;//。..。.。ﻩﻩﻩﻩ workbuf[2]=0x00;//..。。.. ﻩﻩﻩﻩworkbuf[3]=0x00; ﻩ ﻩworkbuf[4]=0x00; ﻩﻩ ﻩworkbuf[5]=0x00;//。..... ﻩ ﻩcount=-1; //按键计数复位为-1 if(count〈6) //密码没有设置完,继续设置密码ﻩﻩ ﻩ { ﻩﻩﻩﻩ setpw(); //设置密码ﻩ ﻩﻩ}ﻩ ﻩ } break; ﻩ }ﻩﻩﻩwhile(temp!=0xf0)//按键抬起检测ﻩﻩ { ﻩﻩtemp=P3;ﻩﻩ ﻩtemp=temp&0xf0; ﻩ }ﻩ }ﻩ} P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0)ﻩ{ﻩﻩdelay(5); temp=P3;ﻩ temp=temp&0xf0;ﻩﻩif(temp!=0xf0) ﻩ{ﻩ count++; ﻩﻩtemp=P3;ﻩ ﻩswitch(temp) ﻩﻩ{ﻩ ﻩﻩcase0xed: ﻩﻩﻩ{ ﻩﻩ ﻩnum=4;ﻩﻩﻩﻩﻩif(count<6) ﻩﻩ ﻩ{ﻩﻩﻩﻩ if(set==0)ﻩ ﻩ pwx[count]=num;ﻩ ﻩﻩ ﻩelse ﻩ ﻩpws[count]=num;ﻩ ﻩ ﻩﻩworkbuf[count]=tabledu[11]; ﻩ }ﻩ ﻩ}ﻩﻩﻩﻩbreak; ﻩﻩcase0xdd: ﻩ {ﻩ ﻩﻩ ﻩnum=5;ﻩ ﻩﻩ if(count<6)ﻩﻩ ﻩ{ﻩ if(set==0)ﻩﻩ ﻩpwx[count]=num;ﻩ ﻩﻩelseﻩﻩ ﻩ ﻩpws[count]=num;ﻩﻩﻩﻩﻩ workbuf[count]=tabledu[11]; ﻩﻩﻩﻩ}ﻩﻩ } ﻩﻩbreak; case0xbd:ﻩﻩ {ﻩ ﻩﻩﻩnum=6;ﻩﻩﻩ if(count<6) ﻩﻩﻩ{ ﻩ ﻩif(set==0) ﻩﻩ pwx[count]=num; ﻩ ﻩ elseﻩﻩﻩﻩ ﻩpws[count]=num;ﻩ ﻩworkbuf[count]=tabledu[11];ﻩﻩﻩﻩ } ﻩﻩﻩ}ﻩ ﻩ break;ﻩ ﻩ} while(temp!=0xf0)ﻩ ﻩ{ﻩﻩﻩ temp=P3;ﻩﻩ temp=temp&0xf0; }ﻩ }ﻩ}ﻩP3=0xfb; temp=P3;ﻩtemp=temp&0xf0; if(temp!=0xf0) { ﻩdelay(5); temp=P3;ﻩﻩtemp=temp&0xf0; if(temp!=0xf0)ﻩﻩ{ ﻩﻩcount++; temp=P3; ﻩ switch(temp)ﻩﻩﻩ{ ﻩﻩﻩcase0xeb: ﻩﻩ{ﻩ num=1;ﻩ ﻩ if(count<6) ﻩﻩﻩﻩ{ﻩﻩﻩ ﻩﻩif(set==0) ﻩﻩﻩ pwx[count]=num;ﻩﻩ elseﻩ ﻩ pws[count]=num; ﻩﻩﻩﻩﻩworkbuf[count]=tabledu[11]; ﻩ ﻩﻩ} ﻩﻩ } ﻩﻩﻩbreak; ﻩﻩﻩcase0xdb: ﻩﻩﻩ{ ﻩ ﻩnum=2;ﻩﻩ ﻩﻩif(count<6)ﻩﻩ { ﻩﻩ if(set==0)ﻩ ﻩ ﻩpwx[count]=num;ﻩﻩﻩ elseﻩ ﻩﻩ ﻩpws[count]=num;ﻩ ﻩﻩ workbuf[count]=tabledu[11];ﻩﻩﻩ }ﻩ ﻩ} ﻩbreak; ﻩ case0xbb:ﻩ ﻩ {ﻩﻩ ﻩﻩnum=3;ﻩ ﻩif(count<6) ﻩﻩﻩ { ﻩ ﻩ if(set==0)ﻩ ﻩﻩ pwx[count]=num;ﻩﻩ ﻩ else ﻩ ﻩﻩﻩpws[count]=num;ﻩ workbuf[count]=tabledu[11]; ﻩ ﻩ }ﻩ ﻩ }ﻩ ﻩbreak;ﻩﻩﻩ}ﻩﻩﻩwhile(temp!=0xf0)ﻩ { ﻩ ﻩtemp=P3;ﻩﻩ temp=temp&0xf0;ﻩ ﻩ}ﻩﻩ}ﻩ}ﻩP3=0xf7; te

温馨提示

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

评论

0/150

提交评论