gpt4 book ai didi

c - Atmel 按钮去抖动不起作用

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

我正在尝试借助 LED 切换功能来制作一个按钮去抖软件,该功能每次都会返回一个不同的 bool 值,这是我之前通过询问问题得到的,但从未起作用:

#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;
}
<小时/>

编辑

当我尝试编译它时,我没有收到任何错误或任何错误,只是不起作用......

最佳答案

我不知道这段代码会以何种方式对连接到端口 B/1 的交换机进行去抖。去抖意味着

  • 检查并存储按键逻辑状态
  • 等待一定时间(取决于硬件,5 - 50 毫秒)
  • 将(现在)逻辑状态与之前读取的逻辑状态进行比较
  • 如果等于(现在)逻辑状态是去抖按键状态

如果程序运行良好,LED 将以与开关相同的速度跳动。

在您的 bool ledToggle() 中,我建议您声明 static volatile bool state; 以确保变量是在 RAM(而不是 CPU 寄存器)中创建的

关于c - Atmel 按钮去抖动不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23135566/

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