电子信息工程技术专业毕业论文30788.docx_第1页
电子信息工程技术专业毕业论文30788.docx_第2页
电子信息工程技术专业毕业论文30788.docx_第3页
电子信息工程技术专业毕业论文30788.docx_第4页
电子信息工程技术专业毕业论文30788.docx_第5页
免费预览已结束,剩余7页可下载查看

下载本文档

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

文档简介

毕业设计(论文)题目: 数子密码锁设计设计内容:基于at89c51单片机,设计数字密码锁二、设计要求:(一)基本要求1、利用at89c51作为控制器组成一数字型码锁。 2、开锁动作用led管模拟。 3、开锁代码由小健盘输入,且同时有6位led显示器上显出来,显示时为保证密码不被泄露用-表示,当你输入的六位数字与原存的密码完全相同时,则开锁led管亮,否则锁关led管亮。 4、密码可由小键盘输入进行改写。 5、当修改密码时,设置密码led管亮即可进行修改密码。修改成功后灯灭。 6、/* 现程序如下 六位密码,原始密码为362330, */#include#define uchar unsigned char#define uint unsigned intuint num=10;/开始让数码管什么都显示bit set=0;/定义设置密码的位char count=-1;/开始让count=-1,方便后面显示数码管sbit beep=p12; /蜂鸣器uchar temp;uchar pws6=3,6,2,3,3,0;/原始密码uchar pwx6;/按下的数字存储区bit rightflag;/密码正确标志位uchar workbuf6;uchar code tabledu=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40;/段选码,共阴极uchar code tablewe=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;/位选码uint keyscan();void delay(uchar z)/延时,ms级uchar y;for(;z0;z-)for(y=120;y0;y-);void setpw()/设置密码函数keyscan();uint keyscan()/键盘扫描函数p3=0xfe;temp=p3;temp=temp&0xf0;if(temp!=0xf0)delay(5);/键盘去抖,最好20ms以上,这里用了5mstemp=p3;temp=temp&0xf0;if(temp!=0xf0)count+;/按键计数加1temp=p3;switch(temp)case 0xee: num=7;if(count6)/六位密码,所以count6if(set=0)/设置密码键没有按下时pwxcount=num; /存储按下的数字elsepwscount=num; /设置密码键按下时,设置新密码workbufcount=tabledu11; /相应位的数码管显示-,不显示相应的数字,密码是保密的break;case 0xde: num=8;if(count6)/以下扫描键盘的原理差不多同上if(set=0)pwxcount=num;elsepwscount=num;workbufcount=tabledu11;break;case 0xbe: num=9;if(count6)if(set=0)pwxcount=num;elsepwscount=num;workbufcount=tabledu11; break;case 0x7e:/设置密码键按下set=1;/设置密码标志位置1p1_3=0;/设置密码指示灯亮workbuf0=0x00;/数码管第一位不显示workbuf1=0x00;/.workbuf2=0x00;/.workbuf3=0x00;workbuf4=0x00;workbuf5=0x00;/.count=-1;/按键计数复位为-1if(count6)/密码没有设置完,继续设置密码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)case 0xed: num=4;if(count6)if(set=0)pwxcount=num;elsepwscount=num;workbufcount=tabledu11;break;case 0xdd: num=5;if(count6)if(set=0)pwxcount=num;elsepwscount=num;workbufcount=tabledu11;break;case 0xbd:num=6;if(count6)if(set=0)pwxcount=num;elsepwscount=num;workbufcount=tabledu11;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)case 0xeb: num=1;if(count6)if(set=0)pwxcount=num;elsepwscount=num;workbufcount=tabledu11;break;case 0xdb: num=2;if(count6)if(set=0)pwxcount=num;elsepwscount=num;workbufcount=tabledu11;break;case 0xbb: num=3;if(count6)if(set=0)pwxcount=num;elsepwscount=num;workbufcount=tabledu11;break;while(temp!=0xf0)temp=p3;temp=temp&0xf0;p3=0xf7;temp=p3;temp=temp&0xf0;if(temp!=0xf0)delay(5);temp=p3;temp=temp&0xf0;if(temp!=0xf0)count+;temp=p3;switch(temp)case 0xd7:num=0;if(count6)if(set=0)pwxcount=num;elsepwscount=num;workbufcount=tabledu11;break;case 0xe7: num=20;break;/确定键按下检测case 0x77: /复位键或者输入密码全部一次删除p1_1=0;/锁关p1_3=1;/密码设置指示灯灭set=0;/不设置密码num=10;/num复位count=-1;/count复位workbuf0=tabledu10;/第一位数码管不显示workbuf1=tabledu10;/第二位数码管不显示workbuf2=tabledu10;workbuf3=tabledu10;workbuf4=tabledu10;workbuf5=tabledu10;/.p1_0=1;/锁关break;case 0xb7:/输入密码删除键(一位一位删除)count-;workbufcount=0x00;/因确定键按下时,count也会加1,而确定键不是密码,所以这里是count,而不是count+1count-;/因确定键按下时,确定键不是密码,count也会加1,这里count再自减1if(count=-1)count=-1;break;while(temp!=0xf0)temp=p3;temp=temp&0xf0;return(num);void init()/利用定时显示数码管tmod=0x01;th0=(65536-500)/200;tl0=(65536-500)%200;et0=1;ea=1;tr0=1;bit compare()/密码比较函数if(pwx0=pws0)&(pwx1=pws1)&(pwx2=pws2)&(pwx3=pws3)&(pwx4=pws4)&(pwx5=pws5) rightflag=1;elserightflag=0;return(rightflag);void main()uint i,j;init();p0=0;p1_1=0;/锁关while(1)keyscan();if(num=20)/如果确定键按下(修改密码和输入密码共用的确定键)if(count=6)if(set=1)/修改密码确定p1_3=1;workbuf0=0;workbuf1=0;workbuf2=0;workbuf3=0;workbuf4=0;workbuf5=0;else/输入密码确定set=0;compare();if(rightflag=1)/如果密码正确p1_0=0;/锁开p1_1=1;workbuf0=tabledu8;/数码管第一位显示8workbuf1=tabledu8;/数码管第二位显示8workbuf2=tabledu8;workbuf3=tabledu8;workbuf4=tabledu8;workbuf5=tabledu8;/.elsep1_1=0;/锁仍然是关workbuf0=0x71;/数码管第一位显示fworkbuf1=0x71;workbuf2=0x71;workbuf3=0x71;workbuf4=0x71;workbuf5=0x71;/.for(i=0;i1000;i+)/密码错误报警for(j=0;j80;j+);beep=beep;break;else /若输入的密码位数不为6位时p1_1=0;/锁仍然关workbuf0=0x71;/数码管第一位显示fworkbuf1=0x71;workbuf2=0x71;workbuf3=0

温馨提示

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

评论

0/150

提交评论