电子密码锁的电路设计hsb_第1页
电子密码锁的电路设计hsb_第2页
电子密码锁的电路设计hsb_第3页
电子密码锁的电路设计hsb_第4页
电子密码锁的电路设计hsb_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

-.z侯少博QQ:604150086实现功能:输入正确密码绿灯亮,输入错误密码报警并且红灯亮,可以输入三次密码。C程序:*include<reg52.h>*defineucharunsignedchar*defineuintunsignedintsbitlcdrs=P1^0; //液晶数据、指令端sbitwr=P1^1; //读、写端sbitlcden=P1^2; //液晶使能端sbitgreen_light=P1^3; //绿灯1灭,0亮sbitspeaker=P1^4; //扬声器0响sbitred_light=P1^5; //红灯1灭,0亮ucharcodetable[]={"enterpassword:"}; ucharcodetable1[]={"error!tryagain:"}; ucharcodetable2[]={"wele!!!"}; ucharcodetable4[]={"setpassword:"}; ucharcodetable5[]={"inputagain:"}; ucharcodetable6[]={"badluck!"}; ucharcodetable7[]={"getout!!"}; ucharcodetable8[]={"setsucceed"}; bitflag,flag1,flag2,flag3,flag4,flag5,rst;ucharkey,count;voiddelayms(uint*){ uinti,j; for(i=*;i>0;i--) //延时函数 for(j=110;j>0;j--);}voidwrite_(uchar) //液晶写指令函数{ wr=0; lcdrs=0; P2=; delayms(5); lcden=1; delayms(5); lcden=0;}voidwrite_data(uchardate) //液晶写数据函数{ wr=0; lcdrs=1; P2=date; delayms(5); lcden=1; delayms(5); lcden=0;} //液晶初始化函数voidlcdinit(){ lcden=0; write_(0*38); write_(0*06); write_(0*0f); write_(0*01);}voidkeyscan() //键盘扫描函数{ uchartemp; P3=0*fe; if(P3!=0*fe) { delayms(8); if(P3!=0*fe) { temp=0*f0&P3; switch(temp) { case0*e0:key=0;flag5=1;break; //数字键盘按下时显示‘*‘字符,把对应的数字放入数组中 case0*d0:key=1;flag5=1;break; //flag5为1时才能把数据放进数组,只是为了防止删减密码 case0*b0:key=2;flag5=1;break; //时把key的值装进已输入正确的密码中 case0*70:key=3;flag5=1;break; } while(P3!=0*fe); write_data('*'); count++; } } P3=0*fd; if(P3!=0*fd) { delayms(8); if(P3!=0*fd) { temp=0*f0&P3; switch(temp) { case0*e0:key=4;flag5=1;break; case0*d0:key=5;flag5=1;break; case0*b0:key=6;flag5=1;break; case0*70:key=7;flag5=1;break; } while(P3!=0*fd); write_data('*'); count++; } } P3=0*fb; if(P3!=0*fb) { delayms(8); if(P3!=0*fb) { temp=0*f0&P3; switch(temp) { case0*e0:key=8;write_data('*');flag5=1;count++;break; case0*d0:key=9;write_data('*');flag5=1;count++;break; case0*b0:flag=1;break; case0*70:rst=1;break; } while(P3!=0*fb); } } P3=0*f7; if(P3!=0*f7) { delayms(8); if(P3!=0*f7) { temp=0*f0&P3; switch(temp) { case0*e0: switch(count) { case1:write_(0*c5);write_data('');write_(0*c5);break; //当按下delete键时,往前一个地址显示空字符, case2:write_(0*c6);write_data('');write_(0*c6);break; //再把指针指回前一个地址 case3:write_(0*c7);write_data('');write_(0*c7);break; case4:write_(0*c8);write_data('');write_(0*c8);break; case5:write_(0*c9);write_data('');write_(0*c9);break; case6:write_(0*ca);write_data('');write_(0*ca);break; } if(0<count)count--; //只有在有输入密码的情况下才能删减 break; } while(P3!=0*F7); } }}voidmain(){ uchara[6],b[6],i,num,table3[6]={1,2,3,4,5,6}; //初始化原始密码为“123456 lcdinit(); //液晶初始化 while(1) { keyscan(); //键盘扫描 if(!flag3) { write_(0*0f); //标志位flag3为0时, write_(0*80); //显示“enterpassword:〞字符串for(i=0;i<15;i++) write_data(table[i]); write_(0*c5); //令光标在液晶第二行中间闪烁 flag3=1; //flag3为1时不显示“enterpassword:〞字符串,因为不停扫描此语句时会造成字符串的闪烁 } if(num<=2) //控制密码的输入次数为三次,超过了就不能再输入 { if(flag5) { switch(count) { case1:a[count-1]=key;break; //把输入的六位密码 case2:a[count-1]=key;break; case3:a[count-1]=key;break; case4:a[count-1]=key;break; case5:a[count-1]=key;break; case6:a[count-1]=key;break; } flag5=0; //防止delete键按下时把正确的密码改掉 } if(count==6) //输入的数为够六位执行,密码正确时进入 { if((a[0]==table3[0])&&(a[1]==table3[1])&&(a[2]==table3[2])&&(a[3]==table3[3])&&(a[4]==table3[4])&&(a[5]==table3[5])) { if(!flag4) { write_(0*01); //显示“welconme字符串〞 write_(0*80); for(i=0;i<13;i++) write_data(table2[i]); write_(0*0c); //光标闪烁关闭 green_light=0; delayms(5000); green_light=1; flag=0; flag4=1; rst=0; //清零,执行下面程序 } while(!rst) { keyscan(); if(flag) break; } while(flag) //flag为1时进入修改密码状态 { keyscan(); if(!flag1) { write_(0*01); write_(0*0f); write_(0*80);for(i=0;i<13;i++) //显示“setpassword:〞字符串 write_data(table4[i]); write_(0*c5); count=0; flag1=1; } if(flag5) { switch(count) { case1:table3[count-1]=key;break; case2:table3[count-1]=key;break; case3:table3[count-1]=key;break; case4:table3[count-1]=key;break; case5:table3[count-1]=key;break; case6:table3[count-1]=key;break; } flag5=0; } if(count==6) { if(!flag2) { write_(0*01); //显示“inputagain字符串〞 write_(0*80); for(i=0;i<12;i++) write_data(table5[i]); write_(0*c5); flag2=1; count=0; } while(1) { keyscan(); if(flag5) { switch(count) //再次输入密码 { case1:b[count-1]=key;break; case2:b[count-1]=key;break; case3:b[count-1]=key;break; case4:b[count-1]=key;break; case5:b[count-1]=key;break; case6:b[count-1]=key;break; } flag5=0; } if(count==6) //如果第一次输入的密码和第二次一样,输出“setsucceed〞字符串 { if((b[0]==table3[0])&&(b[1]==table3[1])&&(b[2]==table3[2])&&(b[3]==table3[3])&&(b[4]==table3[4])&&(b[5]==table3[5])) { write_(0*01); write_(0*80); for(i=0;i<13;i++) //显示“setsucceed〞字符串 write_data(table8[i]); write_(0*0c); //光标停顿闪烁 {green_light=0;red_light=0;delayms(5000);red_light=1;green_light=1;} flag=0; //所有标志位从新清零 flag1=0; flag2=0; flag3=0; flag4=0; count=0; num=0; while(!rst)keyscan(); } else { //当进入修改状态第二次输入的密码和第一次不一样时再次输入,知道一样为止 count=0; write_(0*01); write_(0*80); for(i=0;i<12;i++)

温馨提示

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

评论

0/150

提交评论