求教各位大神,我编写了一个简单的独立按键防抖的子函数,程序如下,在定时中断中调用这个函数没有效果。然后我把这段程序直接写到中断函数中,它是起作用的。
bit INDRIVER(bit x)
{
bit back;
bit y;
static uchar keybuf = 0xff;
keybuf = (keybuf<<1) | x; //扫描一次,左移输入一位
if (keybuf == 0x00) //8次扫描均为0
{
y = 0; //按键弹起状态
}
else if (keybuf==0xff)
{
y = 1; //按键按下状态
}
else
{}
back = y;
return back;
}
定时中断函数:
void T1_ISR(void) interrupt 3
{
TH1=0xF8;
TL1=0xCD;
Ms5_Time++;
if(20>Ms5_Time && Ms5_Time>0)
{
IN2=1; //关闭第二片245
OUT_QS1=0; //关闭第一片573
OUT_QS2=0; //关闭第二片573
IN1=0; // 选中第一片245
// P1=0XFF;
_nop_();
Input0=INDRIVER(Data0); //扫描按键状态1
Input1=INDRIVER(Data1);
Input2=INDRIVER(Data2);
Input3=INDRIVER(Data3);
Input4=INDRIVER(Data4);
Input5=INDRIVER(Data5);
}
是不是因为在子函数中定义了静态变量,所以不能多次调用? 还是我的设计思路就是有问题的?把子函数直接写在中断中,定义多个静态变量,程序重复写多次,是可以运行的。因为硬件上有很多路输入,实在不想重复写防抖程序,求教各位大神,到底哪里出问题了。