51单片机学习笔记【七】——蜂鸣器和继电器

一.蜂鸣器

1.蜂鸣器基础

蜂鸣器按驱动方式分为有源蜂鸣器和无源蜂鸣器,有源蜂鸣器内部带振荡器,接入一个低电平便会响;无源蜂鸣器不带振荡器,让它响要接500HZ~4.5KHZ之间的脉冲信号来驱动才会响。很实验采用的是无源蜂鸣器。

2.电路原理图

51单片机学习笔记【七】——蜂鸣器和继电器_第1张图片

3.实验说明

本实验通过控制蜂鸣器分别在4KHZ和1KHZ频率下发声,实验接线为JP8接P1.5。

4.程序源代码

/**************************************
  > File Name: 蜂鸣器实验
  > Author: pengshp
  > Mail: [email protected]
  > Date: 2015年 7 月 25 日
***************************************/
#include 
#define uchar unsigned char
#define uint unsigned int

sbit BUZZ = P1^5;

unsigned char T0RH=0;
unsigned char T0RL=0;
void OpenBuzz(unsigned int frequ); 
void StopBuzz();

void main()
{
    unsigned int i;
    EA =1;                          //使能全局中断
    TMOD = 0x01;                    //配置T0工作模式1

    while(1)
    {
        OpenBuzz(4000);             //以4KHZ频率启动蜂鸣器
        for(i=0; i<40000; i++);
        StopBuzz();                 //停止蜂鸣器
        for(i=0; i<40000; i++);
        OpenBuzz(1000);             //以1KHZ频率启动蜂鸣器
        for(i=0; i<40000; i++);
        StopBuzz();
        for(i=0; i<40000; i++);

    }
}

void OpenBuzz(unsigned int frequ)
{
    unsigned int reload;            //计算所需定时器重载值

    reload = 65536 - (11059200/12)/(frequ*2); 
    T0RH = (unsigned char)(reload >>8);
    T0RL = (unsigned char)reload;

    TH0 = 0xFF;
    TL0 = 0xFE;

    ET0 = 1;                        //使能T0中断
    TR0 = 1;                        //启动T0
}

void StopBuzz()
{
    ET0 = 0;
    TR0 = 0;
}

void InterruptTimer0() interrupt 1
{
    TH0 = T0RH;
    TL0 = T0RL;
    BUZZ = ~BUZZ;
}

二.继电器

1.继电器原理

通过输出不同的电平,控制继电器的开合,实现对电路的控制,不通电是闭合于常开引脚,通电时闭合于常闭引脚。主要参数有额定工作电压,额定工作电流,触点负荷,可控制交流和直流电。

2.电路原理图

51单片机学习笔记【七】——蜂鸣器和继电器_第2张图片

3.实验说明

本实验通过按键K1控制继电器的开与合,开始继电器工作,按下K1继电器停止工作,再按下继电器又开始工作,如此重复。接线为J2接P1.4,K1接P0.0。

4程序源代码

/**************************************
  > File Name: 继电器实验
  > Author: pengshp
  > Mail: [email protected]
  > Date: 2015年 7 月 25 日
***************************************/
#include 
#define uchar unsigned char
#define uint unsigned int

sbit RELAY=P1^4;              //继电器位声明
sbit K1=P0^0;                 //开关K1位声明

void Delay(uint ms)
{
    uchar i;
    while(ms--)
    {
        for(i=120;i>0;i--);
    }
}
void main()
{
    RELAY=0;                  //继电器工作
    K1=1;
    while(1)
    {
        if(!K1)
        {
            Delay(50);
            if(K1==0)
            {
                while(!K1);   //等待按键释放
                RELAY=~RELAY; //继电器取反
            }
        }
    }
}

你可能感兴趣的:(51单片机)