这是ATMEGA 128微控制器中的3位定时器代码。如果您按下连接到端口D的按钮,计时器将启动。但是如果按下它一会儿,计时器将重置。在proteus仿真中,微控制器在按下按钮后仅计为1。从那以后没有任何事情发生(显示仍然是" 001")
#define F_CPU 4000000UL
#include<avr/io.h>
#include<avr/delay.h>
int x;
int button_check(int x)
{ DDRD = 0x00;
if(PIND==0xFF)
{
_delay_ms(200);
if(PIND==0xFF)
{ x=1;}
else
{ x=0;}
}
else
{ x=x;}
return x;
}
int main(void)
{
int a,b,c;
DDRA = 0xFF;
DDRB = 0xFF;
DDRC = 0xFF;
x=1;
while(1)
{
a=0;
b=0;
c=0;
while(button_check(x)==0) //starting condition
{ _delay_ms(200);
if(a==9)
{ a=0;
if(b==9)
{ b=0;
if(c==9)
{ c=0;}
else
{ c=c+1;}
}
else
{ b=b+1;}
}
else
{ a=a+1;}
PORTA = a;
PORTB = b;
PORTC = c;
}
}
return 0;
}
答案 0 :(得分:1)
x中的值永远不会在main()中发生变化。
你想要
while((x=button_check(x))==0)