数字密码锁单片机课程设计(编辑修改稿)内容摘要:

1,n2=1,lock,minu,sign,tov,state,n,sound,point=1, showlist[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x71,0xff,0x21,0x85,0xe1,0x7f,0x7d}。 uint ms。 /*主函数 */ void main() { EA=1。 //开总中断 ET0=1。 //开内部中断 0 ET1=0。 //关内部中断 1 TMOD=0x11。 TH0=0xf9。 //计数器 0 高八位 TL0=0xdb。 //计数器 0 低八位 TR0=1。 //计数器 0 开始计数 I2CCON=0xe8。 sound=0。 tov=1。 //超时计数置为 1 P1=0x00。 //P1 全置为 0 作为输入 if(sign!=1) p_new1()。 //调用首次使用判 断函数 湖南大学电气与信息工程学院 第 16 页 p_base()。 //调用基础解锁函数 } /*基础解锁函数 */ void p_base() { n=0。 //密码数组置首位 state=fanin。 //指示管置为输入状态 fanin while(1) //无限循环 { if(n==0) state=fanin。 else state=n。 bot=p_scan()。 if(n!=0amp。 amp。 tov==0) //判断密码数组是不是在首位 ,超时计数是否为 0 { p_state(tover)。 //调用指示管状态闪烁函数 ,置为用超时状态 tover main()。 //调用主函数 } switch(bot) { case vain: break。 case enter: key1[n]=end。 //把密码后一位置为 end if(p_pare(key1,save)) //判断输入的密码是否与原密码相同 { p_state(succed)。 //调用指示管状态闪烁函数 ,置为成功 状态 succed lock=0。 //锁定键盘计数置为 0 point=1。 //多次密码输入错误计数 state=opened。 //指示管置为输入状态 opened while(1) { bot=p_scan()。 switch(bot) { case off: main()。 break。 case back: while(1) { bot=p_scan()。 湖南大学电气与信息工程学院 第 17 页 switch(bot) { case off: main()。 break。 case enter: main()。 break。 } } } } } else { p_state(error)。 //调用指示管状态闪烁函数 ,置为用错误状态 error p_record()。 //调用错误计数函数 main()。 //调用主函数 } break。 case cancel: main()。 break。 case back: if(n!=0) //判断当前密码是否为首位 key1[n]=end。 //当前密码位置 end,密码退位 break。 case revise: p_revise()。 break。 case trevise: p_trevise()。 break。 default: if(n+1==9) { p_state(error)。 main()。 } key1[n++]=bot。 } } } 湖南大学电气与信息工程学院 第 18 页 /*密码修改模块 */ void p_revise() { ET0=1。 ET1=0。 n=0。 p_state(fanin)。 state=fanin。 while(1) { if(n==0) state=fanin。 else state=n。 bot=p_scan()。 if(tov==0) { p_state(tover)。 main()。 } switch(bot) { case vain: break。 case enter: key1[n]=end。 if(p_pare(key1,save)) { lock=0。 point=1。 p_state(succed)。 p_new1()。 } else { p_state(error)。 p_record()。 main()。 } break。 case cancel: 湖南大学电气与信息工程学院 第 19 页 main()。 break。 case back: if(n!=0) key1[n]=end。 break。 case revise: p_revise()。 case off: break。 case trevise: p_trevise()。 break。 default: if(n+1==9) { p_state(error)。 main()。 } key1[n++]=bot。 } } } /*首次使用设置密码 */ void p_new1() { n=0。 state=new1。 while(1) { if(n==0) state=new1。 else state=n。 if((tov==0amp。 amp。 sign==1)||(n!=0amp。 amp。 tov==0)) { p_state(tover)。 main()。 } bot=p_scan()。 湖南大学电气与信息工程学院 第 20 页 switch(bot) { case vain: break。 case enter: key1[n]=end。 p_new2()。 break。 case cancel: main()。 break。 case back: if(n!=0) key1[n]=end。 break。 case revise: if(sign==1) p_revise()。 break。 case trevise: p_trevise()。 break。 default: if(n+1==9)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。