基于51单片机的简易电子密码锁毕业设计课程设计内容摘要:

write_1602dat(Error[j])。 } ThreeAlam()。 //错误提示 pass=0。 ReInputEn=0。 //关闭重置功能, ReInputCont=0。 DisplayChar()。 break。 } } if(i==6) { //DisplayListChar(0,1,ResetOK)。 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(ResetOK[j])。 } TwoAlam()。 //操作成功提示 WrToROM(TempPassword,0,6)。 //将新密码写入 24C02存储 ReInputEn=0。 } ReInputCont=0。 CorrectCont=0。 } else { OneAlam()。 //DisplayListChar(0, 1, again)。 //显示再次输入一次 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(again[j])。 } for(i=0。 i6。 i++) { TempPassword[i]=InputData[i]。 //将第一次输入的数据暂存起来 } } N=0。 //输入数据位数计数器清 零 } } } } //======================= 输入密码错误超过三过,报警并锁死键盘====================== void Alam_KeyUnable(void) { P1=0x00。 { ALAM=~ALAM。 Delay5Ms()。 } } //======================= 取消所有操作============================================ void Cancel(void) { unsigned char i。 unsigned char j。 //DisplayListChar(0, 1, start_line)。 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(start_line[j])。 } TwoAlam()。 //提示音 for(i=0。 i6。 i++) { InputData[i]=0。 } KEY=1。 //关闭锁 ALAM=1。 //报警 关 operation=0。 //操作标 志位清零 pass=0。 //密码正确标志清零 ReInputEn=0。 //重置输入充许标志清零 ErrorCont=0。 //密码错误输入次数清零 CorrectCont=0。 //密码正确输入次数清零 ReInputCont=0。 //重置密码输入次数清零 open_led=1。 s3_keydown=0。 key_disable=0。 N=0。 //输入位数计数器清零 } //========================== 确认键,并通过相应标志位执行相应功能=============================== void Ensure(void) { unsigned char i,j。 RdFromROM(CurrentPassword,0,6)。 //从 24C02里读出存储密码 if(N==6) { if(ReInputEn==0) //重置密码功能未开启 { for(i=0。 i6。 ) { if(CurrentPassword[i]==InputData[i]) { i++。 } else { ErrorCont++。 if(ErrorCont==3) //错误输入计数达三次时,报警并锁定键盘 { write_1602(er)。 for(i=0。 i16。 i++) { write_1602dat(Error[i])。 } do Alam_KeyUnable()。 while(1)。 } else { TR0=1。 //开启定时 key_disable=1。 //锁定键盘 pass=0。 break。 } } } if(i==6) { CorrectCont++。 if(CorrectCont==1) //正确输入计数,当只有一次正确输入时,开锁, { //DisplayListChar(0,1,LockOpen)。 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(LockOpen[j])。 } TwoAlam()。 //操作成功提示音 KEY=0。 //开锁 pass=1。 //置正确标志位 TR0=1。 //开启定时 open_led=0。 //开锁指示灯亮 for(j=0。 j6。 j++) //将输入清除 { InputData[i]=0。 } } else //当两次正确输入时,开启重置密码功能 { //DisplayListChar(0,1,SetNew)。 write_1602( er)。 for(j=0。 j16。 j++) { write_1602dat(SetNew[j])。 } TwoAlam()。 //操作成功提示 ReInputEn=1。 //允许重置密码输入 CorrectCont=0。 //正确计数器清零 } } else //=========================当第一次使用或忘记密码时可以用 131420对其密码初始化 ============ { if((InputData[0]==1)amp。 amp。 (InputData[1]==3)amp。 amp。 (InputData[2]==1)amp。 amp。 (InputData[3]==4)amp。 amp。 (InputData[4]==2)amp。 amp。 (InputData[5]==0)) { WrToROM(initpassword,0,6)。 //强制将初始密码写入 24C02存储 //DisplayListChar(0,1,initword)。 //显示初始化密码 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(initword[j])。 } TwoAl am()。 Delay400Ms()。 TwoAlam()。 N=0。 } else { //DisplayListChar(0,1,Error)。 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(Error[j])。 } ThreeAlam()。 // 错误提示音 pass=0。 } } } else //当已经开启重置密码功能时,而按下开锁键, { //DisplayListChar(0,1,Er_try)。 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(Er_try[j])。 } ThreeAlam()。 } } else { //DisplayListChar(0,1,Error)。 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(Error[j])。 } ThreeAlam()。 //错误提示音 pass=0。 } N=0。 //将输入数据计数器清零,为下一次输入作准备 operation=1。 } //==============================主函数 =============================== void main(void) { unsigned char KEY,NUM。 unsigned char i,j。 P1=0xFF。 TMOD=0x11。 TL0=0xB0。 TH0=0x3C。 EA=1。 ET0=1。 TR0=0。 Delay400Ms()。 //启动等待,等 LCM讲入工作状态 lcd_init()。 //LCD初始化 write_1602(yi)。 //日历显示固定符号从第一行第 0个位置之后开始显示 for(i=0。 i16。 i++) { write_1602dat(name[i])。 //向液晶屏写日历显示的固定符号部分 } write_1602(er)。 //时间显示固定符号写入位置,从第 2个位置后开始显示 for(i=0。 i16。 i++) { write_1602dat(start_line[i])。 //写显示时间固定符号,两个冒号 } write_1602(er+9)。 //设置光标位置 write_1602(0x0f)。 //设置光标为闪烁 Delay5Ms()。 //延时片刻 (可不要 ) N=0。 //初始化数据输入位数 while(1) { if(key_disable==1) Alam_KeyUnable()。 else ALAM=1。 //关报警 KEY=keynum()。 if(KEY!=0) { if(key_disable==1) { second=0。 } else { NUM=coding(KEY)。 { switch(NUM) { case (39。 A39。 ):。 break。 case (39。 B39。 ):。 break。 case (39。 C39。 ):。 break。 case (39。 D39。 ): ResetPassword()。 break。 //重新设置密码 case (39。 *39。 ): Cancel()。 break。 //取消当前输入 case (39。 39。 ): Ensure()。 break。 // 确认键, default: { //DisplayListChar(0,1,Input)。 write_160。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。