这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » STC51单片机实例之18蜂鸣器的使用

共1条 1/1 1 跳转至

STC51单片机实例之18蜂鸣器的使用

高工
2014-06-20 03:09:52     打赏
/********************************************************************
* 文件名  :  蜂鸣器发声.c
* 描述    :  蜂鸣器通过交替变化的电平后,会发出蜂鸣声。			 
* 杜邦线接法:P1.2用杜邦线连接到J17的左边第二个。
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int	  
sbit BELL = P1^2;		  	//设置P1.2口,为控制蜂鸣器发声的引脚									  

/********************************************************************
* 名称 : Delay()
* 功能 : 延时
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay(uint del)
{
	uint i;
	for(i=0; i<100; i++)       
	;
}

/********************************************************************
* 名称 : Main()
* 功能 : 实现灯的闪烁
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
	while(1)
	{
		BELL = 0;
		Delay(1);	   //延时10毫秒
		BELL = 1;
		Delay(1);	   //延时10毫秒
	}
}

 

/********************************************************************
* 文件名  :  蜂鸣器发声.c
* 描述    :  蜂鸣器通过交替变化的电平后,会发出蜂鸣声。			 
* 杜邦线接法:P1.2用杜邦线连接到J17的左边第二个。
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int	  
sbit BELL = P1^2;		  	//设置P1.2口,为控制蜂鸣器发声的引脚									  

/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay(uint i)
{
	uint x,j;
	for(j=0;j<i;j++)
	for(x=0;x<=148;x++);	
}

/********************************************************************
* 名称 : Main()
* 功能 : 实现灯的闪烁
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
	uint i;
	while(1)
	{
		for(i = 0; i < 500; i++)
		{
			BELL = 0;
			Delay(1);	   //延时10毫秒
			BELL = 1;
			Delay(1);	   //延时10毫秒	
		}
		Delay(1000);
	}
}

 

/********************************************************************
* 文件名  :  蜂鸣器发声.c
* 描述    :  模拟报警声,如闹钟 滴 滴 滴 滴	  						 
* 杜邦线接法:P1.2用杜邦线连接到J17的左边第二个。
***********************************************************************/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit SPK=P1^2;    //定义喇叭端口
unsigned char frq; 

void DelayUs2x(unsigned char t);//函数声明 
void DelayMs(unsigned char t);

/*------------------------------------------------
                    主函数
------------------------------------------------*/
main()
{
	unsigned int i;
	while(1)
    {
   		for(i=0;i<200;i++)
     	{
      		DelayUs2x(200); 
	  		SPK=!SPK;
	  	}
	  	SPK=0;//防止一直给喇叭通电造成损坏
   		for(i=0;i<200;i++)
      	{
      		DelayMs(1);  
	 	}       
    }
}
/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
	while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{     
	while(t--)
 	{
     	//大致延时1mS
    	DelayUs2x(245);
		DelayUs2x(245);
 	}
}

 

/********************************************************************
* 文件名  :  蜂鸣器发声.c
* 描述    :  模救护车发声		 
* 杜邦线接法:P1.2用杜邦线连接到J17的左边第二个。
***********************************************************************/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit SPK=P1^2;    //定义喇叭端口
unsigned char frq; 

void DelayUs2x(unsigned char t);//函数声明 
void DelayMs(unsigned char t);
/*------------------------------------------------
                    定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
 TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
 //TH0=0x00;	      //给定初值
 //TL0=0x00;
 EA=1;            //总中断打开
 ET0=1;           //定时器中断打开
 TR0=1;           //定时器开关打开
}
/*------------------------------------------------
                    主函数
------------------------------------------------*/
main()
{
 unsigned char i;
 Init_Timer0(); //初始化定时器
 while(1)
      {
   frq=0;
   for(i=0;i<60;i++)//播放1s左右一种频率
      {
      DelayMs(10); 
	  }
   frq=100;
   for(i=0;i<60;i++)//播放1s左右另外一种频率
      {  
      DelayMs(10); 
	  }
          
	 }
}
/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
 while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
 while(t--)
 {
     //大致延时1mS
     DelayUs2x(245);
	 DelayUs2x(245);
 }
}
/*------------------------------------------------
                 定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 
{
 TH0=0xfe;		  //重新赋值 
 TL0=frq;         //低8位值在主程序中不断累加
 
 SPK=!SPK;        //端口电平取反

}

/********************************************************************
* 描述    :  模拟消防车发声		 
* 杜邦线接法:P1.2用杜邦线连接到J17的左边第二个。
***********************************************************************/

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit SPK=P1^2;    //定义喇叭端口
unsigned char frq; 

void DelayUs2x(unsigned char t);//函数声明 
void DelayMs(unsigned char t);
/*------------------------------------------------
                    定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
 TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
 //TH0=0x00;	      //给定初值
 //TL0=0x00;
 EA=1;            //总中断打开
 ET0=1;           //定时器中断打开
 TR0=1;           //定时器开关打开
}
/*------------------------------------------------
                    主函数
------------------------------------------------*/
main()
{
 unsigned char i;
 Init_Timer0(); //初始化定时器
 while(1)
      {
   for(i=0;i<200;i++)
      {
      DelayMs(10); //延时10ms,累加频率值
	  frq=i;
	  }
   for(i=200;i>0;i--)
      {
      DelayMs(10); //延时10ms,累减频率值
	  frq=i;
	  }
          
	  }
}
/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
 while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
 while(t--)
 {
     //大致延时1mS
     DelayUs2x(245);
	 DelayUs2x(245);
 }
}/*------------------------------------------------
                 定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 
{
 TH0=0xfe;		  //重新赋值 
 TL0=frq;         //低8位值在主程序中不断累加
 
 SPK=!SPK;        //端口电平取反

}

 /********************************************************************
* 描述    :  模拟警车发声  
* 创建人  : 东流,2012年2月7日
* 版本号  : 1.0
* 杜邦线接法:P1.2用杜邦线连接到J17的左边第二个。
***********************************************************************/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义


sbit SPK=P1^2;    //定义喇叭端口
unsigned char frq; 


void DelayUs2x(unsigned char t);//函数声明 
void DelayMs(unsigned char t);
/*------------------------------------------------
                    定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
 TMOD |= 0x01;  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响     
 //TH0=0x00;      //给定初值
 //TL0=0x00;
 EA=1;            //总中断打开
 ET0=1;           //定时器中断打开
 TR0=1;           //定时器开关打开
}
/*------------------------------------------------
                    主函数
------------------------------------------------*/
main()
{
 Init_Timer0(); //初始化定时器
 while(1)
      {
       
      DelayMs(1); //延时1ms,累加频率值
 frq++;
          
 }
}
/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
 while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
 while(t--)
 {
     //大致延时1mS
     DelayUs2x(245);
DelayUs2x(245);
 }
}
/*------------------------------------------------
                 定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 
{
 TH0=0xfe;  //重新赋值 
 TL0=frq;         //低8位值在主程序中不断累加
 
 SPK=!SPK;        //端口电平取反


}

 


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]