按键消抖与无源蜂鸣器

去想要一个联合按键消抖的无语蜂鸣器
按下去一次无源蜂鸣器响
再一次按下去,无源蜂鸣器停止响
我试用while循环语句里面加上if语句判断按键是否按下
按下便进入一个蜂鸣器响的死循
现在我想再在这个死循环里面加一个如果再次识别按键按下,
便会退出这个蜂鸣器响应的循环,从第一个循环继续怎么改代码?


#include <reg52.h>  // 引入51单片机头文件  
  
sbit key = P3^0;     // 按键输入  
sbit buzzer = P3^1;  // 蜂鸣器输出  
  
void delay(unsigned int n) {  // 延时函数  
    while (n--) {  
        for (int i = 0; i < 120; i++);  
    }  
}  
  
void main() {  
    buzzer = 0;  // 初始化蜂鸣器引脚为低电平,不发声  
    while (1) {   // 无限循环  
        if (key == 0) {  // 判断按键是否按下  
            delay(10);   // 按键消抖  
            if (key == 0) {  // 再次判断按键是否按下  
                buzzer = 1;  // 蜂鸣器发声  
                while (key == 0);  // 等待按键释放  
                buzzer = 0;  // 蜂鸣器停止发声  
            }  
        }  
    }  
}

在这个代码中,首先定义了按键输入key和蜂鸣器输出buzzer的引脚。然后,在main()函数中使用一个while循环来不断检测按键状态。当检测到按键被按下时,先进行一次延时操作进行按键消抖,然后再进行一次按键状态的检测。如果按键仍然被按下,就使蜂鸣器发声,并使用一个无限循环等待按键释放。当检测到按键释放时,就让蜂鸣器停止发声,并退出无限循环。这样就可以实现联合按键消抖的无源蜂鸣器了。

你可以定义一个变量比如k, 当你按一次按键时 k增加1。
然后判断k等于1时,蜂鸣器响, k等于2时,蜂鸣器关,同时k清零。
这样子按下第一次的时候 蜂鸣器响,第二次蜂鸣器就关了

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/348676
  • 除此之外, 这篇博客: 游戏数字资产复用——有哪些是你需要知道的?中的 游戏数字资产复用不只是复制&粘贴 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    需要注意的是,游戏数字资产复用并不是简单的复制和粘贴,而是你应该重复利用和完善的理念。为了进行修改而不影响其他版本,并促进团队之间的协作,您需要正确的版本控制系统。因为有了正确的工具,团队就可以管理游戏数字资产的所有迭代,并循环利用它们。

    20家顶级游戏开发工作室中,有19家选择的这个工具是Perforce Helix Core。它成为媒体和游戏开发的标杆性工具是有原因的。因为它不仅能够无缝地管理跨产品和版本的迭代,而且还具有让团队中的每个人快速找到并复用游戏数字资产所需的性能。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^