版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版设备租赁与技术支持合同
- 电梯设备销售及技术支持合同(2024年度)
- 二零二四年度停车场建设合同
- 碧桂园二零二四年度体育场馆施工总承包合同
- 2024年度第四人民医院广告宣传合同3篇
- 医院股份协议书(2篇)
- 服装面料采购合同范本采购合同
- 二零二四年新能源开发与利用合同
- 补充协议之合同延长规定
- 补充协议的修改与完善
- 心理健康教育在小学音乐教学中的应用研究
- 新生儿消化道出血查房课件
- 销售送礼品管理制度
- 2024年中国三峡集团招聘笔试参考题库含答案解析
- 管理学原理:控制习题与答案
- 管理哲学导论(第3版) 课件 第三章 中国古代的术治主义传统
- 色彩设计在餐饮空间中的应用
- Unit1Myname'sGina单元作业整体设计2023-2024学年人教版英语七年级上册
- 江苏省启东市长江中学2023-2024学年七年级上学期12月月考道德与法治试题
- 脑出血研究现状与展望课件
- 高速铁道工程职业生涯规划书
评论
0/150
提交评论