我写了一个简单的程序,使用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;
}
答案 0 :(得分:0)
PORTC &= 0xF9;
不会将0更改为9.事实上,当PORTC为0时,它不会执行任何操作。
另外,摆脱PORTC= PORTC++;
和PORTC= PORTC--;
构造,它们是不正确的。使用PORTC++;
或PORTC = PORTC + 1;
。