0

这是 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;
}
4

1 回答 1

1

x 的值在 main() 中永远不会改变。

你要

while((x=button_check(x))==0)
于 2015-09-12T08:44:27.377 回答