gpt4 book ai didi

c - 使用 Atmega328P 对 Romeo 板上的按钮开关进行编程

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:31 25 4
gpt4 key购买 nike

我正在尝试用 C 编写一个简单的程序,当我按下一个按钮时,它会关闭一排 LED 灯。我对嵌入式设备和使用按位运算符都很陌生,我不知道自己做错了什么。

我正在使用带有 Amega328p 的 Romeo 板,它连接到 I/O 套件板,其中的引脚分别连接到 LED 和按钮。

Romeo Schematic

I/O Tainer 板原理图: enter image description here

引脚具有 DDRx PORTx 和 PINx 设置。

我已将 LED 的引脚 D2-D7 连接到 JP3_1-6(我可以看到这部分工作正常)

我已将引脚 D10 (PB2) 连接到按钮的 JP2_5(问题部分)

我已将两 block 板上的 GND 和 VCC 相互连接。

这是我的代码:

void main() 
{
DDRD = 0b11111100; // open all registries to be used
PORTD = 0b11111100; // set all LEDs ON to start

DDRB = 0b00000000; // set as input
PORTB = 0b00000100; // set PB2 pull up resistors

if((PINB & 0b00000100)==0) // if buttons pressed
{
PORTD = 0b00000000; // turn all lights off
}
}

当我按下按钮时,没有任何反应。我不认为这是板子,因为我使用什么开关并不重要。

解决此问题的任何帮助或指导将不胜感激。我认为这是代码,而不是我如何连接东西,但我是新手,所以我可能是错的。

最佳答案

发生的事情是 if 语句运行一次(可能在您按下按钮之前),然后 main 返回。要解决此问题,您需要在 while 循环中运行 if 语句。像这样的东西:

void main() 
{

DDRD = 0b11111100; // open all registries to be used
PORTD = 0b11111100; // set all LEDs ON to start

DDRB = 0b00000000; // set as input
PORTB = 0b00000100; // set PB2 pull up resistors

while(1)
{
if((PINB & 0b00000100)==0) // if buttons pressed
{
PORTD = 0b00000000; // turn all lights off
}
//TODO: set LEDs on button release?
}
}

我不知道当 main 在您的微 Controller 上返回时会发生什么。一个常见的事情是重新运行 main。

关于c - 使用 Atmega328P 对 Romeo 板上的按钮开关进行编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48975685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com