【发布时间】:2017-02-20 03:53:57
【问题描述】:
我有电路设置,每次按下按钮时都会打开 LED,它从 0 计数到 255,所以二进制 0000 0000 到 1111 1111。我的开关配置为 PB2,即板上的 D9。
我遇到了一个问题,正如您从我的计算机中看到的那样,我使用了 8 个引脚,6 个来自 D 寄存器,2 个来自 B 寄存器。当我增加 PORTB 并在某个时候它变为 0b00000100 时,它的值与输入引脚 pb2 相同,所以在我的无限循环中,即使我没有按下 PINB 按钮,它也会打开。我尝试将 PORTB 的值重置为 0,但它仍然无法关闭。
我需要一种机制,因此当我增加 PORTB 时,它不会影响我的输入引脚 PB2。
感谢您的帮助,我尝试发布视频,但它太大了。
#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
/*
Board digital I/O pin to atmega328 registers for LEDS
| d2 | d3 | d4 | d5 | d6 | d7 | d8 | d9 |
| pd2 | pd3 | pd4 | pd5 | pd6 | pd7 | pb0 | pd1 |
Input Button
| d9 |
| pb2 |
*/
int main(void) {
int x;
DDRD = 0b11111100;
PORTD = 0b00000000;
DDRB = 0b00000011;
PORTB = 0b00000100;
while(1) {
if((PINB & 0b00000100) == 0) {
if(x < 63) {
PORTD = PORTD + 0b00000100;
x++;
} else if (x == 63) {
x=0;
PORTD = 0b00000000;
PORTB = PORTB + 0b00000001;
//problem here, when PORTB is incremented to 0b00000100 then the switch turns on automatically
if((PORTB & 0b00000100) == 0b00000100) {
PORTB = 0b00000000;
PORTD = 0b00000000;
}
}
_delay_ms(80);
}
}
return 0;
}
【问题讨论】: