这段代码是矩阵按按钮的下降沿检测程序,如果相应的按钮按下并弹起的时候执行相应的功能,但是在实际应用中总是出现一个问题:有2个按键同时按下的时候,有时候会出现这个子程序之外的程序都不执行了,可能是在这段代码中发生了死循环的情况,现在将这段代码贴上来,大家帮我分析一下。
void KeyDown()
{
char a=0;
jzjp=0x0f;
if(jzjp!=0x0f)//读取按键是否按下
{
Delay100us();//延时10ms进行消抖
if(jzjp!=0x0f)//再次检测键盘是否按下
{
jzjp=0X0F; //测试列
switch(jzjp)
{
case(0X07):cj=0;break;
case(0X0b):cj=1;break;
case(0X0d): cj=2;break;
case(0X0e):cj=3;break;
}
jzjp=0XF0; //测试行
switch(jzjp)
{
case(0X70):cj=cj;jzjp=0X0F;break;
case(0Xb0):cj=cj+4;jzjp=0X0F;break;
case(0Xd0): cj=cj+8;jzjp=0X0F;break;
case(0Xe0):cj=cj+12;jzjp=0X0F;break;
}
}
}
//以下是脉冲检测,有按键按下的时候执行变量“zdsl”自减功能按键按下一次,zdsl的值减1:
if((jzjp!=0x0f)&&zdsy>0)
{
Delay100us();
if(jzjp!=0x0f)
{
while(jzjp!=0x0f);
zdsy=zdsy-1;
}
}
}