我试图通过一个led切换功能来制作一个按钮去抖动软件,每次我通过提出问题但从未有效的方式返回一个不同的布尔值:
#include <avr/io.h>
bool ledToggle();
int main(void)
{
DDRB |= (1 << 0);
DDRB &= ~(1 << 0);
while(1)
{
//TODO:: Please write your application code
if (ledToggle() == true)
{
//led on
PORTB |= (1 << 0);
}else{
//led off
PORTB &= ~(1 << 0);
}
}
}
bool ledToggle()
{
static bool state = false;
if(bit_is_clear(PINB, 1)){
state = !state;
}
return state;
}
修改
当我尝试编译它时,我没有任何错误或任何错误,但是没有工作......
答案 0 :(得分:0)
在main()的第二行,您错误地将LED端口而不是BUTTON端口设置为输入。它应该是:
DDRB &= ~(1 << 1);
我建议使用定义作为一种不太可能犯这种错误的方法:
#define LED 0
#define BUTTON 1
DDRB |= (1 << LED);
DDRB &= ~(1 << BUTTON);
答案 1 :(得分:0)
我不知道这个代码会以哪种方式去除连接到端口B / 1的开关。去抖意味着
如果程序运行良好,LED将以与开关相同的速度反弹。
在你的bool ledToggle()
我建议您声明static volatile bool state;
以确保在RAM中创建变量(而不是CPU寄存器)