利用外部中断点亮LED,求延时消抖函数,新手上路
这个是我写的利用外部中断点亮和熄灭LED,但是不能消抖,延时函数一写好,求消抖。 while(1){
if(rEINTPEND&(1<<8)) //按下key1
{
rEINTPEND |= 1<< 8;
i++;
if(i%2==1)
{
rGPBDAT=rGPBDAT&(~(1<<5))|(0<<5); //点亮LED1
}
else
{
rGPBDAT=rGPBDAT&(~(1<<5))|(1<<5);
}
}
else if(rEINTPEND&(1<<11)) //按下key2
{
rEINTPEND |= 1<< 11;
j++;
if(j%2==1)
{
rGPBDAT=rGPBDAT&(~(1<<6))|(0<<6); //点亮LED2
}
else
{
rGPBDAT=rGPBDAT&(~(1<<6))|(1<<6);
}
}
else if(rEINTPEND&(1<<13)) //按下key3
{
rEINTPEND |= 1<< 13;
m++;
if(m%2==1)
{
rGPBDAT=rGPBDAT&(~(1<<7))|(0<<7); //点亮LED3
}
else
{
rGPBDAT=rGPBDAT&(~(1<<7))|(1<<7);
}
}
else if(rEINTPEND&(1<<14)) //按下key4
{
rEINTPEND |= 1<< 14;
n++;
if(n%2==1)
{
rGPBDAT=rGPBDAT&(~(1<<8))|(0<<8); //点亮LED4
}
else
{
rGPBDAT=rGPBDAT&(~(1<<8))|(1<<8);
}
}
else if(rEINTPEND&(1<<15)) //按下key5
{
rEINTPEND |= 1<< 15;
rGPBDAT=rGPBDAT&(~(1<<5))|(1<<5);
rGPBDAT=rGPBDAT&(~(1<<6))|(1<<6);
rGPBDAT=rGPBDAT&(~(1<<7))|(1<<7);
rGPBDAT=rGPBDAT&(~(1<<8))|(1<<8);
//熄灭所有的灯
}
else if(rEINTPEND&(1<<19)) //按下key6
{
rEINTPEND |= 1<< 19;
rGPBDAT=rGPBDAT&(~(1<<5))|(0<<5);
rGPBDAT=rGPBDAT&(~(1<<6))|(0<<6);
rGPBDAT=rGPBDAT&(~(1<<7))|(0<<7);
rGPBDAT=rGPBDAT&(~(1<<8))|(0<<8);
//点亮所有的灯
}
}
}
void delayms(unsigned char t)//延时函数
{
rTCFG1 &=rTCFG1&(~0x0F);
rTCFG1|=0x02; // 1/8分频
rTCNTB0 =(PCLK)/8/1000; //时钟频率为PCLK/8
//1ms延时 rTCON&= ~0x0F; //
rTCON|= (1<<3)|(1<<1)|(1<<0);
rTCON&= ~(1<<1);
while(t--)
{
while(rTCNTO0!=(rTCNTB0-1));
}
rTCON&= ~(1<<0); //停止定时器0
}
页:
[1]