这是一段用开关控制LED,状态的程序。我使用的是attiny13的单片机,每次开关运行到需要LED闪的时候程序就会卡死,请各位师傅指教下怎样写才能避免让程序卡在死循环里,同时有能让LED闪速起来。
/*
程序要求:
按下第一开关:led1亮,led0灭;
第二次:led0亮,led1灭;
第三次:led0,led1全亮;
第四次:led0灭,led1闪烁;
第五次;led1灭,led0闪烁。
循环~~~~~~
*/
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define led0_0 PORTB &=~(1<
#define led0_1 PORTB |=(1<
.
#define led1_0 PORTB &=~(1<
#define led1_1 PORTB |=(1<
uchar m,i;
void NO_0()//第一状态:led1亮,led0灭
{
led0_0;
led1_1;
}
void NO_1()//第二状态:led0亮,led1灭
{
led0_1;
led1_0;
}
void NO_2()//第三状态:led0,led1全亮
{
led0_1;
led1_1;
}
void NO_3()//第四状态:led0灭,led1闪烁。
{
led1_0;
while(1)
{
led0_0;
_delay_ms(500);
led0_1;
_delay_ms(500);
}
}
void NO_4()//第五状态:led1灭,led0闪烁。
{
led0_0;
while(1)
{
led1_0;
_delay_ms(500);
led1_1;
_delay_ms(500);
}
}
void NO_5()//第六状态:led0,led1一起闪烁。
{
while(1)
{
led0_0;
led1_0;
_delay_ms(500);
led0_1;
led1_1;
_delay_ms(500);
}
}
int main(void)
{
DDRB=0b001111;
PORTB=0b110010;
while(1)
{
if (PINB &(1<
{
_delay_ms(10);
if (PINB & (1<
{
while(PINB &(1<
m++;
_delay_ms(10);
}
}
switch(m)
{
case 0:NO_0();break;
case 1:NO_1();break;
case 2:NO_2();break;
case 3:NO_3();break;
case 4:NO_4();break;
case 5:NO_5();break;
default:m=0;break;
}
}
}