[英]Atmega 328 Code Issue | I am trying to create 4 scenarios
In the following code I am trying to create 4 scenarios在下面的代码中,我试图创建 4 个场景
I) Red Led blinks at the specified rate when button 1 is pressed I) 按下按钮 1 时,红色 LED 以指定的速率闪烁
II) Green Led blinks at the specified rate when button 2 is pressed II) 当按下按钮 2 时,绿色 LED 以指定的速率闪烁
III) Both Led blinks at the specified rate when button 3 is pressed III) 按下按钮 3 时,两个 LED 都以指定的速率闪烁
IV) when more than 1 button is pressed Do nothing. IV) 当按下超过 1 个按钮时什么都不做。
Scenario I,II,III works but I am having trouble for IV场景 I、II、III 有效,但我遇到了 IV 问题
#include <avr/io.h>
#include <util/delay.h>
#define DURATION 40
int main(void){
DDRD = 1<<DDD7|1<<DDD6;// D7 as output; other pins input
PORTD = 1<<PORTD4|1<<PORTD2|1<<PORTD5; // Set internal pullup resistor on D4
while(1){
if ((PIND & (1<<PIND2)) == 0){ // PIND4=0 when pressed
PORTD ^= (1<<PORTD6);
_delay_ms(DURATION);}
else{
PORTD &= ~(1<<PORTD6);
}
if ((PIND & (1<<PIND4)) == 0){ // PIND4=0 when pressed
PORTD ^= (1<<PORTD7);
_delay_ms(DURATION);}
else {
PORTD &= ~(1<<PORTD7);}// When button isn't pressed
if ((PIND & (1<<PIND5)) == 0){
_delay_ms(DURATION);
PORTD ^= (1<<PORTD6);
_delay_ms(DURATION);
PORTD ^= (1<<PORTD7);
_delay_ms(DURATION);
}
else {
PORTD &= ~(1<<PORTD6)|~(1<<PORTD7);
}
if((PIND & (1<<PIND5)|(1<<PIND2)|(1<<PIND4)) == 0){
PORTD &= ~(1<<PORTD6)|~(1<<PORTD7);
}
}
return(0);
}
change PORTD &= ~(1<<PORTD6)|~(1<<PORTD7);
更改PORTD &= ~(1<<PORTD6)|~(1<<PORTD7);
to PORTD &= ~((1<<PORTD6)|(1<<PORTD7));
到PORTD &= ~((1<<PORTD6)|(1<<PORTD7));
because result of first expression is 0xFF因为第一个表达式的结果是 0xFF
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.