简体   繁体   English

Atmega 328 代码问题 | 我正在尝试创建 4 个场景

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM