m0_59190196 2021-06-10 14:10 采纳率: 0%
浏览 29

求助一下谢谢啦51单片机

 

设计一个蜂鸣器报警电路,按下K1,蜂鸣器响一声,按下K2,蜂鸣器响三声,按下K3,蜂鸣器长鸣。要求响声和间隔的时间均为1秒,长鸣不限时,但是此时应设置一个按键能够使长鸣结束

  • 写回答

1条回答 默认 最新

  • 嵌入式Dora 优质创作者: 嵌入式与硬件开发技术领域 2024-01-04 15:18
    关注

    这个蜂鸣器报警电路可以通过集成电路 NE555 实现,具体电路图如下:

    蜂鸣器报警电路

    其中,K1、K2、K3为按键,用于启动不同的报警方式。R1、R2、R3是限流电阻,C1是一个电容,RA是一个调节精度电阻,RP是一个调节周期电阻,将这两个电阻变化得到不同的鸣叫频率。LED指示灯,用于指示集成电路工作状态。

    通过上述电路图,按下不同的按键K1、K2、K3会触发电路的不同报警方式:

    1. 按下K1,1秒后,蜂鸣器发出一声鸣叫。
    2. 按下K2,1秒后,蜂鸣器发出三声鸣叫,间隔均为1秒。
    3. 按下K3,蜂鸣器长鸣,需要按下按键K4来停止鸣叫。

    为了使长鸣可控,可以加入一个按键K4,按下该按键K4可以使蜂鸣器停止长鸣。具体实现方法可以通过加一个开关电路,控制 NE555 供电来实现。

    const int buzzerPin = 9;  // 蜂鸣器连接的引脚
    const int k1Pin = 2;     // K1引脚
    const int k2Pin = 3;     // K2引脚
    const int k3Pin = 4;     // K3引脚
    const int k4Pin = 5;     // K4引脚
    int alarmState = 0;      // 报警状态,0表示无报警,1表示单短鸣,2表示三短鸣,3表示长鸣
    
    void setup() {
      pinMode(buzzerPin, OUTPUT);
      pinMode(k1Pin, INPUT_PULLUP);
      pinMode(k2Pin, INPUT_PULLUP);
      pinMode(k3Pin, INPUT_PULLUP);
      pinMode(k4Pin, INPUT_PULLUP);
      digitalWrite(buzzerPin, LOW);
    }
    
    void loop() {
      // 判断是否按下K1
      if (digitalRead(k1Pin) == LOW) {
        alarmState = 1;
        alarm();
      }
      
      // 判断是否按下K2
      if (digitalRead(k2Pin) == LOW) {
        alarmState = 2;
        alarm();
        delay(1000);
        alarm();
        delay(1000);
        alarm();
      }
      
      // 判断是否按下K3
      if (digitalRead(k3Pin) == LOW) {
        alarmState = 3;
        while (digitalRead(k4Pin) == HIGH) {
          alarm();
          delay(200);
        }
        alarmState = 0;
      }
    }
    
    // 报警函数
    void alarm() {
      digitalWrite(buzzerPin, HIGH);
      delay(500);
      digitalWrite(buzzerPin, LOW);
      delay(500);
    }
    
    
    评论

报告相同问题?