51_无源蜂鸣器


 /**********************51单片机学习例程************************
*  平台:Keil U4 + STC89C52
*  名称:按键控制蜂鸣器,2KHz方波控制无源蜂鸣器
*  编写:Tony
*  日期:2022-2-6
*   QQ : 674749794
*  晶体:12MHZ
*	 变更记录:无
******************************************************************/
#include
#include	

#define GPIO_LED P1
sbit K1=P3^1;
sbit BEEP=P3^0;
void Delay10ms(unsigned int c);   //延时10ms
void Timer0_Init();
/*******************************************************************************
* 函 数 名         : Timer0_Init
* 函数功能		   : 定时器0初始化函数,250us中断一次
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Timer0_Init()
{
 TMOD=0x02;	 //定时器0,工作方式2
 TH0=0x06;
 TL0=0x06;
 ET0=1;	     //开启定时器0中断
 EA=1;		 //开启总中断
}
/*******************************************************************************
* 函 数 名         : main
* 函数功能		   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void main(void)
{
	unsigned int i,j;
	K1=1;
	j=0x01; //1111_1110
	BEEP=1;
	Timer0_Init();
	while(1)
	{	
		GPIO_LED=j;	 
		if(K1==0)		//检测按键K1是否按下
		{
			Delay10ms(1);	//消除抖动
			if(K1==0)
			{
			    TR0=1;
				j=_cror_(j,1);
				Delay10ms(1);
				TR0=0;
				//BEEP=~BEEP;
				while((i<50)&&(K1==0))	 //检测按键是否松开
				{
					Delay10ms(1);
					i++;
				}
				i=0;
			}
		}		

	}				
}
/*******************************************************************************
* 函 数 名         : Delay10ms
* 函数功能		   : 延时函数,延时10ms
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a,b;
    for(;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}
void Tmer0() interrupt 1
{
  BEEP=~BEEP;

}