我编写了一个简单的程序,使用2个按钮在7段显示器上递增和递减值,当我尝试在atmega16微控制器上尝试该值时,仅递增有效,递减部分仅在我尝试首先递增时起作用,否则不起作用工作,如果数字达到0也不会达到9 ..我确定代码有问题,但我无法弄清楚。
这是代码

#include<avr/io.h>
#include<stdio.h>
#include<stdlib.h>
#include<util/delay.h>

int main()
{


//seven seg display  PORTC 0:3 , initial value 2 , inc when Port B6 is pressed (dont   exceed 9>>0) , dec Port B7
//init
//set DDRC 0:3 as output
DDRC |=0x0F;
//set init value for 7 seg as 2
PORTC &= 0xF0;
PORTC |=(1<<1);

//set port B 6,7 as inputs
DDRB &=0x3F;



while(1)
{
    //check if b6 is pressed
    if(!(PINB & 0b01000000))
    {
        _delay_ms(30);
        while(!(PINB & 0b01000000));
        if((PORTC & 0x0F) ==0x09)
            {
                PORTC &= 0xF0;
            }
        else
            {
                PORTC= PORTC++;
            }

    }
    if(!(PINB & 0b10000000))
    {
        _delay_ms(30);
        while(!(PINB & 0b10000000));
        if((PORTC & 0x0F) ==0x00)
            {
                PORTC &= 0xF9;
            }
        else
            {
                PORTC= PORTC--;
            }

    }
}


return 0;


}

最佳答案

PORTC &= 0xF9;不会将0更改为9。实际上,当PORTC为0时,它什么也不做。

另外,摆脱PORTC= PORTC++;PORTC= PORTC--;构造,它们是不正确的。使用PORTC++;PORTC = PORTC + 1;

关于c - 非常简单的应用程序(使用2个按钮递增和递减七段显示),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23322177/

10-09 03:59