我正在运行下面给出的程序,但是问题是for循环仅运行一次并打开LED,然后关闭。它应该运行5次。 下面是代码:
void led(void)
{
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
}
void main(void)
{
ANSEL = 0; //Disable Analog PORTA
TRISA0 = 1; //Make RA0 as Input
TRISB = 0x00;
PORTA = 0;
PORTB = 0x01;
// RB0=0;
while(1)
{
//Switch Pressed
if(swch==0) //Check for Switch Pressed
{
__delay_ms(delay_debounce); //Switch Debounce Delay
if(swch==0) //Check again Switch Pressed
{
//Blink LED at PORT RB0
for (int i = 0; i < 2; i++)
{
led();
}
}
}
else if(swch==1)
{
//Do Nothing
}
}
return;
}
答案 0 :(得分:0)
实际上,LED开灯和关灯 5 2次(请参见代码),它发生得如此之快,以至于好像发生了一次。这是因为在您重新打开它之间没有延迟。将此小片段添加到您的代码中:
//other code...
for(int i=0;i<2;i++) // The 2 here means the LED will only flash twice!
{
led();
__delay(500);
}
// other code...
答案 1 :(得分:0)
如果您扩展循环中的工作,它将变成
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
// No delay here before it switches back
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
请注意,离开例程时,LED更改状态之间没有延迟。更改状态后再添加一个延迟。
void led(void)
{
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
__delay_ms(delay);
}