我在我的代码中加入了ErrorNumber变量,用来计数密码输入错误的次数,当次数达到3密码锁就会暂时锁死(用延时函数实现锁死功能)。感觉自己的代码没问题,但是貌似没有实现我上面所说的这个功能。
后来对ErrorNumber做了跟踪,发现它只能自增到1,然后就一直保持值为1了。怎样改才能让它实现我想要的功能?
希望有懂的人来帮我解决这个问题。谢谢!
附上代码:
#include <REGX52.H>
#include <intrins.H>
#include "LCD1602.h"
#include "juzhen.h"
#include "delay.h"
#include "Buzzer.h"
unsigned char KeyNum;
unsigned int Password,cout,ErrorNumber;
int pw[6];
int realpw[6]={0,0,0,0,0,0};
void Delay5000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 36;
j = 5;
k = 211;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
int a=0,i=0,b=1,j=0,A=0,B=0;
LCD_csh();
LCD_zfc(1,1,"Password:");
while(1)
{
KeyNum=juzhen();
if(KeyNum)
{
if(KeyNum<=10)
{
if(KeyNum==10){KeyNum=0;}
if(cout<6)
{
pw[i]=KeyNum;
LCD_wfh10(2,cout+1,pw[i],1);
i++;
b++;
cout++;
Buzzer_Time(100);
}
}
}
if(KeyNum==11)
{
Buzzer_Time(100);
for(i=0;i<6;i++)
{
if(pw[i]!=realpw[i]){A=2;break;}
else {A=1;}
}
if(cout<6){A=2;}
if(A==1)
{
for(B=0;B<3;B++)
{
LCD_zfc(1,14,"OK ");
i=30000;
while(i--);
LCD_zfc(1,14," ");
}
cout=0;
i=0;
b=0;
A=0;
for(i=0;i<6;i++) LCD_zfc(2,1," ");
pw[6]=0;
main();
}
if(A==2)
{
for(B=0;B<3;B++)
{
LCD_zfc(1,14,"ERR");
i=30000;
while(i--);
LCD_zfc(1,14," ");
}
cout=0;
i=0;
b=0;
A=0;
for(i=0;i<9;i++)LCD_zfc(2,1," ");
pw[6]=0;
ErrorNumber++;
if(ErrorNumber==3)
{
LCD_zfc(2,1,"WRONG!WAIT 5S!");
Delay5000ms();
LCD_zfc(2,1," ");
ErrorNumber=0;
}
main();
}
}
if(KeyNum==12)
{
Buzzer_Time(100);
LCD_zfc(2,cout," ");
cout--;
i--;
pw[cout]=0;
}
}
}