zoukankan      html  css  js  c++  java
  • 五、单片机学习——继电器与蜂鸣器实验

    实验目的:    理解并掌握继电器和蜂鸣器驱动电路的工作原理;
          理解并掌握用单片机 I/O 驱动大电流器件的驱动方法;
    实验模块:核心板+流水灯与独立按键模块+继电器模块+蜂鸣器模块;
    实验内容:按键控制继电器和蜂鸣器动作,并用相应的 led 灯进行指示,即第一
            个按键按下,第一位 led 灯点亮,蜂鸣器响应;第二个按键按下,第二位 led
            灯点亮,继电器吸合;第三个按键按下,第一个、第二个流水灯点亮,继电器吸
         合、蜂鸣器响应;第四个按键按下,恢复初始状态,所有的 led 灯熄灭、继电器
            断开、蜂鸣器不响应。

    模块连接图:

    电路原理图:

    电路驱动原理:(1)蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,仅仅依靠单片机 I/O 不足以驱动蜂鸣器进行工作;蜂鸣器的正极接到三极管的 C 极上面,蜂鸣器的负极接到地端,三极管的基极 B 经过限流电阻后由单片机的 P1.2 引脚控制,当 P1.2 输出高电平时,三极管 T1 截止,没有电流流过线圈,蜂鸣器不发声;当 P1.42 输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制 P1.2 脚的电平来使蜂鸣器发出声音或关闭。(2)继电器驱动电路如上,主要通过 PNP 型的三极管 S8550 来实现通过单片机的 I/O 口控制继电器的吸合与断开;三极管驱动继电器主要是应用三极管的放大特性和开关特性;当与单片机相连的 I/0 口输出低电平时,三极管导通,此时三极管的 E 极(发射极)与 C 极(集电极)间的阻值很小,此时电路相当于 VCC 经过继电器,再经过通过三极管接到地形成完整回路,继电器吸合;相反,当与单片机相连的 I/0口输出高电平时,三极管截止,此时三极管的 E 极(发射极)与 C 极(集电极)间的阻值很大,电路无法形成回路,继电器不吸合。因此,我们可以通过程序控制与单片机相连 I/O 口的电平来控制继电器的吸合与关闭。

    工程代码1:功能描述: 控制蜂鸣器实现播放音乐"生日快乐"
    硬件连接:  用1位杜邦线将J10_0与J18_bz连接

    #include<reg51.h>               //包含头文件
    sbit BZ=P0^0;                   //定义蜂鸣器控制管脚       
    #define uchar unsigned char    
    #define uint unsigned int
     
     uchar code SOUNDLONG[25]=        //"生日快乐"节拍
     {
      15,5,20,20,20,40,
      15,5,20,20,20,40,
      15,5,20,20,20,20,20,
      15,5,20,20,20,40
     };
    uchar code SOUNDTONE[25]=         //"生日快乐"音调
    {
     212,212,190,212,159,169,
     212,212,190,212,142,159,
     212,212,106,126,159,169,190,
     119,119,126,159,142,159     
    };
    //**************************************************************************************************
    //延时函数
    //**************************************************************************************************
    delay(uint time)              //int型数据为16位,所以最大值为65535           
     {
      uint  i,j;                  //定义变量i,j,用于循环语句
      for(i=0;i<time;i++)         //for循环,循环50*time次
         for(j=0;j<50;j++);       //for循环,循环50次
     }
    //**************************************************************************************************
    //播放音调
    //**************************************************************************************************
    void Play_music()                         
    {
      uint Tone,Long;                 //定义音调变量
      uint i,j,k;                     //定义
         for(i=0;i<25;i++)         //"生日快乐"的25种音调
          {
              Tone=SOUNDTONE[i];      //读取音调
              Long=30*SOUNDLONG[i];   //读取节拍
              for(j=0;j<Long;j++)     //输出不同节拍
               {
                BZ=0;                 //关闭蜂鸣器
                for(k=0;k<Tone;k++);  //Tone的不同来区分7种音调
                BZ=1;                 //打开蜂鸣器
                for(k=0;k<Tone;k++);  //Tone的不同来区分7种音调
            }
          }
    }
    //**************************************************************************************************
    //主函数
    //**************************************************************************************************
    void main()
    {
     while(1)
      {
       Play_music();                  //播放音乐
       BZ=0;                          //关闭蜂鸣器
       delay(10000);                  //关闭蜂鸣器时间
      }
    }

    工程代码2:
      功能描述: 控制继电器通断,同时发出"啪啪"声
      硬件连接:  用1位杜邦线将J11_7与J18_K2连接

    ***************************************************************************************************/
    #include "reg51.h"       //包含头文件
    sbit K2=P2^7;            //定义继电器控制IO
    #define uchar unsigned char
    #define uint  unsigned int
    //**************************************************************************************************
    //延时函数
    //**************************************************************************************************
    delay(uint time)              //int型数据为16位,所以最大值为65535           
     {
      uint  i,j;                  //定义变量i,j,用于循环语句
      for(i=0;i<time;i++)         //for循环,循环50*time次
         for(j=0;j<50;j++);       //for循环,循环50次
     }
    //**************************************************************************************************
    //主函数
    //**************************************************************************************************
    void main()                   //主函数
    {
         while(1)                 //进入while死循环
          {
            K2=0;                 //断开继电器
            delay(5000);          //延时
            K2=1;                 //导通继电器
            delay(5000);          //延时
          }        
    }
  • 相关阅读:
    [转载]每天要说无数次的话,原来英语这么说
    [转载]What I Have Lived For 一生何求?
    WIN 7 和fedora双系统引导问题
    [转载]网站建设中一些容易被忽视的问题
    linux进程控制-wait()
    shell(2)
    电脑英语缩略词
    shell(1)
    [转载]无论成败 但求做最好的自己
    [转载]C++出错提示英汉对照表
  • 原文地址:https://www.cnblogs.com/breads/p/12713017.html
Copyright © 2011-2022 走看看