给你个框架看看
#define N 4
#dfeine INPUT 12
#define CHG 13
#define CONFIRM 14
#define idle 0
#define inputpass 1
#define chgpass 2
#define waitconfirm 3
#define end 4
unsigned char keyscan()
{
unsigned char key,tempkey;
//get key
//delay()
//confirm key
//return key
}
void show_Led(/***/)
{
//show something on leds
}
void main(void)
{
unsigned char State = idle,Key_Value,Pass[4] = {0},passCNT;
while(1)
{
Key_Value = keyscan();
switch(State)
{
case idle:{
if(INPUT == Key_Value) State = inputpass;
if(ICHG == Key_Value) State = chgpass;
State = idle;
show_Led(/*idle*/);
break;
}
case inputpass:{
if(/*Key_Value != CHG && != INPUT* && passCNT < N/)
{/*get pass into Pass[] & show_Led()*/}
else
{
if(passCNT == N)
{
State = waitconfirm;
}
else
{
State = idle; /*state error!*/
show_Led(/*error then idle*/);
}
}
break;
}
case chgpass:{
/*see inputpass*/
}
case waitconfirm:{
if(CONFIRM == Key_value){State = end ;};
else{/*if timeout( State = idle)*/}
break;
}
case end:{
/* add do pass check*/
}
default :{
State = idle;
show_Led(/*idle*/);
break;
}
}
}
}。
全部