AVR单片机用独立按键控制LED,为什么用一个按键可以,两个就不行呢

我用AVR单片机独立按键(接低电平)控制LED,一个键控制一个灯(低电平亮),只写一个键的程序可以,写两个键的程序就不行,下面是程序,求大神指教
以下是一个键,一个灯的程序
#include<avr/io.h>
int main(void)
{
DDRB&=~(1<<0);
PORTB|=(1<<0);
DDRA=0xff;
PORTA=0xff;

while(1)
{
if(!(PINB&=(1<<0)))
{
PORTA&=~(1<<0);
}
else
{
PORTA|=(1<<0);
PORTA|=(1<<1);
}
}
}

以下是两个键两个灯的程序,仅仅是增加了一个else语句
#include<avr/io.h>
int main(void)
{
DDRB&=~(1<<0);
PORTB|=(1<<0);
DDRB&=~(1<<1);
PORTB|=(1<<1);
DDRA=0xff;
PORTA=0xff;

while(1)
{
if(!(PINB&=(1<<0)))
{
PORTA&=~(1<<0);
}
else if(!(PINB&=(1<<1)))
{
PORTA&=~(1<<1);
}
else
{
PORTA|=(1<<0);
PORTA|=(1<<1);
}
}
}
我也试过更多灯的,都不行,两个以上按键之后LED就没有反应了

if(!(PINB&=(1<<0)))
语法错误,试试写成:
if(!(PINB&(1<<0)))

#include<avr/io.h>
int main(void)
{
DDRB&=~(1<<0);
PORTB|=(1<<0);
DDRB&=~(1<<1);
PORTB|=(1<<1);
DDRA=0xff;
PORTA=0xff;

while(1)
{
if(!(PINB&(1<<0)))
{
PORTA&=~(1<<0);
}
else if(!(PINB&(1<<1)))
{
PORTA&=~(1<<1);
}
else
{
PORTA|=(1<<0);
PORTA|=(1<<1);
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-16
语句有错.if语句嵌套有问题:if(...){...}else{...},如果加入if,则写成
if(...){
if(...){...}
else{...}
}else{
if(...){...}
else{...}
}
这样试试
这种写法太复杂和难理解了
相似回答