很忙 发表于 2014-2-21 17:34
很好理解啊。
if(key1_buf!=KEY1)和if(key2_buf!=KEY2)
说明IO口电压有变化 bit KEY1
bit KEY2
bit key1_buf=1;
bit key2_buf=1;
unsigned char key_detect=0;
unsigned char key_ok=0;
/***********************************************
首先按键1按下松开:因为初始时key_detect = 0,所以使得key_detect = 2,
如果按键2一直不动作,key_detect值会一直不变(为2)。
即使再次按下按键1,key_detect值仍会一直不变
然后按键2动作:因为key_detect = 2,则key_detect=0;且key_ok=2;
首先按键2动作:key_detect=1,
如果按键1一直不动作key_detect仍为1
即使再次动作按键2,key_detect仍为1
然后按键1动作:key_detect=0;key_ok=1;
结论:key_ok=2:先按键1动作,再按键2动作
key_ok=1:先按键2动作,再按键1动作
***********************************************/
if(key1_buf!=KEY1) //按键1端口电平有变化
{
if(key1_buf=0) //判断按键前一个状态是否为低
{ //说明按键松开了
if(key_detect==0) key_detect=2;
else if(key_detect==1)
{
key_detect=0;
key_ok=1;
}
}
key1_buf=KEY1;
}
if(key2_buf!=KEY2)
{
if(key2_buf=0)
{
if(key_detect==0) key_detect=1;
else if(key_detect==2)
{
key_detect=0;
key_ok=2;
}
}
key2_buf=KEY2;
}
我是这样分析的~~ |