gpt4 book ai didi

c - AtMega16 LED立方体

转载 作者:行者123 更新时间:2023-11-30 17:58:46 25 4
gpt4 key购买 nike

该代码适用于 LED 立方体,我想添加新功能。当有人点击连接到 PORTB0 的按钮时,当前的灯光效果应该改变。

我尝试了一些方法,但没有成功。

该程序适用于ATmega16,代码是在Atmer Studio 6中编写的

code

最佳答案

连接到 B0 的电路是什么样的?

假设开关的一侧连接到 B0,另一侧连接到地面,您的方向和上拉值都很好,但您的 if 语句应该在按下按钮时寻找 PINB 的位 0 从 1 变为 0 。当上拉电阻打开时,当按钮未被按下时该位将为 1,当按钮被按下时该位将为 0。

在代码中,您将输入视为“边缘”,但实际上它是“电平”。我的意思是,从 CPU 的角度来看,按下按钮会在很长一段时间内改变输入信号。您想要更改过渡效果

这里还有另一个问题,那就是开关去抖动。当按下开关时,它不会直接从关闭变为打开。转换期间会出现噪音,看起来就像您的代码按下了许多按钮。

去抖动可以通过硬件或软件来完成。在软件中,我会在delay_ms的内部循环中执行类似的操作:

static unsigned int debounce; 
static const unsigned int presscount = 500;
if ((PINB&1)==0) { // switch is pressed
if (debounce < presscount ) {
++debounce;
}
}
else {
if (debounce > 0) {
--debounce;
}
}
if (debounce == presscount ) {
// switch has been pressed long enough
debounce = 0; // reset
i = (i+1)%4;
return;
}

这将每 500 次循环次数最多增加一次效果。如果你一直按住按钮,效果将继续改变。您可能需要修改代码,以便在开关关闭一段时间之前不会再次增加效果,这样无论按住多长时间,每次按下都只会增加一次。对于上面的代码,您可以使用“presscount”常量来看看它的作用。

希望有帮助。

关于c - AtMega16 LED立方体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11992781/

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