我编写了一个简单的程序,使用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/